Oracle user1對user2使用者下所有表,有select、insert、delete、update許可權
對於本地的使用者,執行INSERT操作只需要INSERT許可權,而只有INSERT許可權這對於通過資料庫鏈執行插入操作是不夠的。
看Oracle的管理員手冊是發現了這個問題,以前還確實沒有注意過。
看一個具體的例子,首先在本地建立一個普通使用者,並將表T的INSERT、UPDATE和DELETE許可權授權給這個使用者:
SQL> show user
USER is "TEST"
SQL> create table t (id number);
Table created.
SQL> create user u1 identified by u1;
User created.
SQL> grant create session to u1;
Grant succeeded.
SQL> grant insert, update, delete on t to u1;
Grant succeeded.
SQL> conn u1/u1
Connected.
SQL> insert into test.t values (1);
1 row created.
SQL> update test.t set id = 2;
1 row updated.
SQL> delete test.t;
1 row deleted.
SQL> commit;
Commit complete.
在本地執行,使用者U1可以對T表執行INSERT、UPDATE和DELETE的操作。
下面在遠端建立資料庫鏈,使用U1作為連線使用者:
SQL> select * from global_name;
GLOBAL_NAME
--------------------------------------------------------------------------------
TESTRAC
SQL> create database link test08
2 connect to u1
3 identified by u1
4 using '172.25.13.229/test08';
資料庫連結已建立。
SQL> select * from [email protected];
GLOBAL_NAME
--------------------------------------------------------------------------------
TEST08
SQL> insert into [email protected] values (1);
insert into [email protected] values (1)
*第 1 行出現錯誤:
ORA-01031: insufficient privileges
ORA-02063: 緊接著 line (起自 TEST08)
SQL> update [email protected] set id = 1;
update [email protected] set id = 1
*第 1 行出現錯誤:
ORA-01031: insufficient privileges
ORA-02063: 緊接著 line (起自 TEST08)
SQL> delete [email protected];
delete [email protected]
*第 1 行出現錯誤:
ORA-01031: insufficient privileges
ORA-02063: 緊接著 line (起自 TEST08)
這是由於通過資料庫鏈訪問遠端物件的時候,Oracle需要查詢許可權來對錶結構進行分析,因此如果是通過資料庫鏈執行DML操作,除了對應的DML許可權外,使用者還需要SELECT許可權。
SQL> conn test/test
Connected.
SQL> grant select on t to u1;
Grant succeeded.
有了SELECT許可權,通過資料庫鏈執行DML就可以順利執行了:
SQL> insert into [email protected] values (1);
已建立 1 行。
SQL> update [email protected] set id = 2;
已更新 1 行。
SQL> delete [email protected];
已刪除 1 行。
SQL> commit;
提交完成。
SQL> select * from [email protected];
未選定行
---------------------------------------------------------------
其中我學習了,u1訪問test使用者中t表。
在我的資料庫中,user2已經存在很多表。
寫了一個儲存過程,把我資料庫user2所有表批量賦值給user1,
並且具有對錶的select、insert、delete、update許可權。
儲存過程如下:
CREATE OR REPLACE PROCEDURE GRANT_MAHANSO AS
CURSOR c_tablename IS
SELECT table_name FROM user_tables';
RetVal NUMBER;
sCursor INT;
sqlstr VARCHAR2(250);
BEGIN
FOR v_tablename IN c_tablename
LOOP
sqlstr := 'GRANT SELECT,DELETE,UPDATE,INSERT ON user2.'|| v_tablename.table_name
|| ' TO user1';
sCursor := dbms_sql.open_cursor;
dbms_sql.parse(sCursor,sqlstr, dbms_sql.native);
RetVal := dbms_sql.execute(sCursor);
dbms_sql.close_cursor(sCursor);
END LOOP;
END GRANT_MAHANSO ;
轉載請標明出處:http://space.itpub.net/12272958/viewspace-686912相關推薦
Oracle user1對user2使用者下所有表,有select、insert、delete、update許可權
對於本地的使用者,執行INSERT操作只需要INSERT許可權,而只有INSERT許可權這對於通過資料庫鏈執行插入操作是不夠的。 看Oracle的管理員手冊是發現了這個問題,以前還確實沒有注意過。 看一個具體的例子,首先在本地建立一個普通使用者,並將表T的INSERT、UPDATE和DELETE許可權授
Oracle查看某個用戶下所有表的記錄總數和所有表的字段總數、記錄數
sele user details oracl sys where col 字段 rac https://blog.csdn.net/zhihaoma/article/details/78607368 如我想查看用戶M下的所有表的總記錄數: SELECT SUM(num_
Oracle 匯入資料庫 刪除使用者、刪除表空間、刪除表空間下所有表,檢視當前表空間
匯入資料庫 在cmd下用 imp匯入 格式: imp userName/passWord file=bmp檔案路徑 ignore = y (忽略建立錯誤)full=y(匯入檔案中全部內容); 例: imp DISASTERV2/DISASTERV2 file=C:\Use
oracle—將指定使用者下所有表的查詢許可權賦給另一個使用者
一、建立新使用者user2。 二、在指定使用者(user1)下執行以下語句: select 'grant select on user1.' || t.table_name || ' to user2;' from user_tables t 輸出指令碼,複製指令碼
oracle表空間使用情況查詢和用戶下所有表情況查詢
name 表空間 data user ace char sele 文件名 row 一、查看表空間使用情況 --查詢表空間使用情況 SELECT UPPER(F.TABLESPACE_NAME) "表空間名", D.FILE_N
Oracle查詢數據庫中所有表的記錄數
ner dia function sta dbms repl log found tab 方法一: 首先建立一個計算函數 1 create or replace function count_rows(table_name in varchar2, 2
查詢一個用戶下的所有表,查詢表結構。設置表列寬。
color logs 表名 pan for des .cn alt cnblogs SELECT * FROM TAB; DESC 表名 設置表列寬: COL 屬性名 FOR A長度; 查詢一個用戶下的所有表,查詢表結構。設置表列寬。
查詢資料庫中當前使用者下的所有表,儲存過程,檢視,觸發器
user_objects是oracle字典表的試圖,他包含了通過DDL建立的所有物件。表,試圖,索引。。等 all_table, dba_table , user_table 同理 Select object_name From user_obj
Oracle 和 AWS Redshift 獲取 資料庫所有表名和列名的
Oracle select table_name from user_tables where table_name like '%plnsm%'; select OWNER, TABLE_NAME, COLUMN_NAME from all_tab_columns where COLU
mysql統計庫下所有表資料行數
一、執行下面sql select concat( 'select "', TABLE_name, '", count(*) from ', TABLE_SCHEMA, '.', TABLE_name, ' union all') from information_schema.tableswhere TAB
oracle 如何搜尋當前使用者下所有表裡含某個值的欄位?
create or replace procedure MY_Pro_SearchKeyWord is v_sql VARCHAR2(4000); v_tb_column VARCHAR2(4000); v_cnt NUMBER(18,0); cursor cu
oracle(建立/刪除/修改使用者,建立/刪除/修改表空間,授權使用者,刪除所有表,給使用者指定表空間
--oracle刪除某個使用者下的所有表 --此句只是查詢並且拼接sql,然後將執行的sql複製然後執行即可 select 'drop table '||table_name||';' from cat where table_type='TABLE'; export O
資料庫泵EXPDP匯出使用者下所有表
1. 在sys使用者下新建 SQL>create directory [dirname] as ‘[dirpath]’; dirname:取的名字 dirpath:dmp檔案匯出路徑
Windows下對資料夾下所有圖片批量重新命名(附C++,python,matlab程式碼)
原資料夾 重新命名之後 C++ #include <iostream> #include <io.h> //對系統檔案進行操作的標頭檔案 #include <string> #include
MYSQL 某個資料庫下所有表的 批量刪除表語句
select concat('drop table ',table_name,';') from information_schema.TABLES where table_schema='test';
SQL Server清空庫下所有表資料
第一步:“新建查詢”-》建立儲存過程 如下: CREATE PROCEDURE sp_DeleteAllData AS EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL' EXEC sp_MSForEa
PHP -- 遍歷出目錄下所有檔案,及演算法優化
在想解決這個問題的時候,我也查找了很多資料。推薦給大家我個人覺得比較好的一篇:PHP遍歷檔案目錄 文中第四個演算法可以遍歷出文件夾下的所有檔案,程式碼如下: $dir = 'E:\phpStudy\PHPTutorial\WWW'; echo '<pre>'; functio
oracle procedure 對將要賦值進行判斷,否則會報異常
當你將查出來的值,into給一個定義的變數的時候,首先判斷是否查詢出來值。 create or replace procedure procedureName( parameterName in parameterType parameterName out paramet
利用boost遍歷路徑下所有檔案,並判斷檔案是否是資料夾
#include<boost/filesystem.hpp> void GetFileNameFromDir(const char* rootPath) { boost::filesystem::path dir(rootPath); if (b
java 遍歷指定包下所有類,返回完整類名。工具類,可以直接拷入使用
1、說明: 此類為本人開發的工具類,具體應用在什麼地方呢。本人在實際專案中,許可權管理這一塊有所應用,應該是許可權這一塊有所需求而開發的。 應用場景說明:許可權資源自動化生產時,使用者點選介面的一鍵生成資源時,介面中就會遍歷指定controller包下所有