Oracle授權A使用者查詢B使用者的所有表
Oracle授權A使用者查詢B使用者的所有表
需求:
新建的使用者userA,要授權給他訪問使用者scott的所有表
有三種兩方法:
1)
SQL> conn / as sysdba;
SQL> grant select any table on userA
這種方法的缺點是授予的許可權過大,userA不僅可以訪問scott下的所有表,也可以訪問其他使用者包括sys,system下的所有表。
2)
SQL> conn scott/tiger;
SQL> select 'GRANT SELECT ON' || table_name || 'to userA;' from user_tables
得到的結果如下
grant select on emp to userA;
grant select on dept to userA;
grant select on bonus to userA;
grant select on loc to userA;
再把上面得到的結果逐一執行一遍:
SQL> grant select on emp to userA;
SQL> grant select on dept to userA;
SQL> grant select on bonus to userA;
SQL> grant select on loc to userA;
這種方法的缺點是要執行比較多的語句,如果有100個表,就得執行100個grant語句;
另外scott新建的表不在被授權的範圍內,新建的表要想被userA訪問,也得執行grant語句:
grant select on 新建的表 to userA;
(3)使用遊標
先建立兩個使用者
SQL> create user test1 identified by oracle;
User created.
SQL> create user test2 identified by oracle;
User created.
授權
SQL> grant connect, resource to test1;
Grant succeeded.
SQL> grant connect, resource to test2;
Grant succeeded.
在test2下建立一個表作測試用
SQL> conn test2/oracle;
Connected.
SQL> create table t(id number);
Table created.
建立角色並用遊標給角色授權
SQL> conn /as sysdba;
Connected.
SQL> create role select_all_test2_tab;
Role created
SQL>
declare
CURSOR c_tabname is select table_name from dba_tables where owner = 'TEST2';
v_tabname dba_tables.table_name%TYPE;
sqlstr VARCHAR2(200);
begin
open c_tabname;
loop
fetch c_tabname into v_tabname;
exit when c_tabname%NOTFOUND;
sqlstr := 'grant select on test2.' || v_tabname ||' to select_all_test2_tab';
execute immediate sqlstr;
end loop;
close c_tabname;
end;
/
PL/SQL procedure successfully completed.
把角色授權給test1
SQL> grant select_all_test2_tab to test1;
Grant succeeded.
嘗試用test1訪問test2的表
SQL> conn test1/oracle;
Connected.
SQL> select * from test2.t;
no rows selected
在test2下新建表
SQL> conn test2/oracle;
Connected.
SQL> create table ta(id number);
Table created.
嘗試用test1訪問新建的表
SQL> conn test1/oracle;
Connected.
SQL> select * from test2.ta;
select * from test2.ta
*
ERROR at line 1:
ORA-00942: table or view does not exist
結論:與第二種方案相比,用這種方式不需逐一把test2下的表授權給test1訪問,但test2新建的表無法被test1訪問。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29485627/viewspace-1252563/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle建立使用者並給使用者授權查詢指定表或檢視的許可權Oracle
- Oracle的表空間、使用者和使用者授權Oracle
- Oracle查詢當前使用者和當前使用者下的所有表Oracle
- Oracle建立使用者、角色、授權、建表Oracle
- Oracle查詢使用者許可權Oracle
- sql 查詢當前使用者所有表的容量SQL
- Oracle新建表空間、使用者及授權Oracle
- oracle新建使用者,表空間,並授權Oracle
- 把一個使用者的所有表的查詢許可權 賦給另一個使用者
- 將一個使用者下所有表的查詢許可權賦給另一個使用者
- oracle 查詢所有表的表名Oracle
- Oracle中將一個使用者的所有物件授權給另一個使用者Oracle物件
- Oracle建立表空間、建立使用者以及授權Oracle
- oracle 跨庫查詢的授權方式Oracle
- MongoDB建立只讀使用者並授權指定集合的查詢許可權MongoDB
- Oracle使用者、授權、角色管理Oracle
- oracle建立使用者並授權Oracle
- Oracle建立使用者和授權Oracle
- oracle 查詢所有表的行數Oracle
- 查詢mysql資料庫中所有使用者及使用者許可權MySql資料庫
- Oracle建立表空間、建立使用者、授權、授權物件的訪問以及檢視許可權集合Oracle物件
- 授權訪問使用者的所有表.、批量建立和表名一致的同義詞
- sqlserver新增查詢 表、欄位註釋,組合查詢所有的使用者、表名、表註釋SQLServer
- Oracle 建立表空間、建立使用者以及授權、檢視許可權Oracle
- Oracle在儲存過程中呼叫其他使用者的表授權Oracle儲存過程
- oracle 給使用者批量授權unlimite tablespaceOracleMIT
- UserService 查詢使用者查詢許可權 isGlobalQuery分析
- oracle一個建立使用者、建立表空間、授權、建表的完整過程Oracle
- MySql查詢使用者許可權MySql
- Oracle使用者的新增、修改、刪除及授權Oracle
- 使用者授權,策略的使用
- 查詢每個使用者的許可權
- MySQL新增使用者使用者與授權MySql
- 查詢資料庫中的所有的普通使用者資料庫
- 查詢Oracle資料庫使用者表中的多少資料量Oracle資料庫
- 查詢資料庫授權以及授權到期的處理方法資料庫
- Oracle11g 建立使用者名稱、授權Oracle
- 關於oracle使用者許可權查詢總結檢視Oracle