Oracle找出一個(gè)表的間接授權(quán)信息的方法
在Oracle數(shù)據(jù)庫(kù)中, 如果需要找出一張表授權(quán)給了哪一個(gè)用戶,這個(gè)比較簡(jiǎn)單的,如果有一些視圖引用了這張表,然后這張視圖授權(quán)給了其它用戶的話, 那么這也屬于這張表的授權(quán)信息,如果也要找出這類信息,那么如何找出來這些信息呢?
下面簡(jiǎn)單看一個(gè)例子, 在數(shù)據(jù)庫(kù)中存在三個(gè)用戶T1, T2, T3, 假設(shè)T1用戶將表T1.TEST的查詢權(quán)限授予了用戶T2.
create user t1 identified by t123456; create user t2 identified by t234561; create user t3 identified by t345612; alter user t1 quota unlimited on users; alter user t2 quota unlimited on users; alter user t3 quota unlimited on users; grant connect, resource to t1; grant connect, resource to t2; grant connect, resource to t3; grant create view to t2; grant create view to t3;
具體授權(quán)操作如下所示:
SQL> show user; USER is "T1" SQL> create table test(id number(10), name varchar2(30)); Table created. SQL> insert into test 2 select 1, 'k1' from dual union all 3 select 2, 'k2' from dual; 2 rows created. SQL> commit; Commit complete. SQL> SQL> grant select on test to t2; Grant succeeded
那么此時(shí)查看關(guān)于表TEST的授權(quán)信息如下所示:
SET LINESIZE 820; COL GRANTEE FOR A12 COL OWNER FOR A12 COL TABLE_NAME FOR A12 COL GRANTOR FOR A12 COL PRIVILEGE FOR A12 SELECT OWNER, TABLE_NAME, GRANTOR , GRANTEE, PRIVILEGE, GRANTABLE, TYPE FROM DBA_TAB_PRIVS WHERE TABLE_NAME='TEST';
SQL> show user; USER is "SYS" SQL> SET LINESIZE 820; SQL> COL GRANTEE FOR A12 SQL> COL OWNER FOR A12 SQL> COL TABLE_NAME FOR A12 SQL> COL GRANTOR FOR A12 SQL> COL PRIVILEGE FOR A12 SQL> SELECT OWNER, TABLE_NAME, GRANTOR , GRANTEE, PRIVILEGE, GRANTABLE, TYPE 2 FROM DBA_TAB_PRIVS WHERE TABLE_NAME='TEST'; OWNER TABLE_NAME GRANTOR GRANTEE PRIVILEGE GRA TYPE ------------ ------------ ------------ ------------ ------------ --- ------------------------ T1 TEST T1 T2 SELECT NO TABLE SQL>
如果用戶T1將表TEST的查詢權(quán)限授予了用戶T2,并且使用了選項(xiàng)GRANT OPTION的話
SQL> show user; USER is "T1" SQL> grant select on test to t2 with grant option; Grant succeeded. SQL>
那么此時(shí),如果在T2用戶下面創(chuàng)建一個(gè)視圖,引用表TEST, 然后將視圖T2.V_TEST的查詢權(quán)限授權(quán)給了用戶T3.
SQL> show user; USER is "T2" SQL> create or replace view v_test 2 as 3 select name from t1.test; View created. SQL> grant select on t2.v_test to t3; Grant succeeded. SQL>
此時(shí)用戶T3就相當(dāng)間接擁有了表TEST的查詢權(quán)限. 如下所示:
SQL> show user; USER is "T3" SQL> select * from t2.v_test; NAME ------------------------------ k1 k2 SQL>
但是,我們用上面的SQL來查詢一下表TEST授予了哪些用戶.如下所示, 這個(gè)查詢結(jié)果不能體現(xiàn)表TEST間接授權(quán)給了用戶T3
SQL> show user; USER is "SYS" SQL> SET LINESIZE 820; SQL> COL GRANTEE FOR A12 SQL> COL OWNER FOR A12 SQL> COL TABLE_NAME FOR A12 SQL> COL GRANTOR FOR A12 SQL> COL PRIVILEGE FOR A12 SQL> SELECT OWNER, TABLE_NAME, GRANTOR , GRANTEE, PRIVILEGE, GRANTABLE, TYPE 2 FROM DBA_TAB_PRIVS WHERE TABLE_NAME='TEST'; OWNER TABLE_NAME GRANTOR GRANTEE PRIVILEGE GRA TYPE ------------ ------------ ------------ ------------ ------------ --- ------------------------ T1 TEST T1 T2 SELECT YES TABLE SQL>
那么問題來了,如何查詢這種情況下的授權(quán)呢? 其實(shí)我們可以用下面SQL實(shí)現(xiàn)這個(gè)需求.如下所示:
SET LINESIZE 820 COL OWNER FOR A10 COL TABLE_NAME FOR A16; COL GRANTOR FOR A16 COL GRANTEE FOR A16 COL PRIVILEGE FOR A8; SELECT OWNER, TABLE_NAME, GRANTOR , GRANTEE, PRIVILEGE, GRANTABLE, TYPE FROM DBA_TAB_PRIVS WHERE TABLE_NAME=UPPER(TRIM('&tb_name')) UNION ALL SELECT OWNER, TABLE_NAME, GRANTOR , GRANTEE, PRIVILEGE, GRANTABLE, TYPE FROM DBA_TAB_PRIVS WHERE TABLE_NAME IN( SELECT NAME FROM dba_dependencies WHERE REFERENCED_NAME=UPPER(TRIM('&tb_name')) AND TYPE='VIEW' );
到此這篇關(guān)于Oracle找出一個(gè)表的間接授權(quán)信息的方法的文章就介紹到這了,更多相關(guān)oracle表授權(quán)信息內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
大表delete刪數(shù)據(jù)導(dǎo)致數(shù)據(jù)庫(kù)異常解決
這篇文章主要為大家介紹了大表delete刪數(shù)據(jù)導(dǎo)致數(shù)據(jù)庫(kù)異常解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07PL/SQL編程經(jīng)驗(yàn)小結(jié)開發(fā)者網(wǎng)絡(luò)Oracle
PL/SQL編程經(jīng)驗(yàn)小結(jié)開發(fā)者網(wǎng)絡(luò)Oracle...2007-03-03Windows10安裝Oracle19c數(shù)據(jù)庫(kù)詳細(xì)記錄(圖文詳解)
這篇文章主要介紹了Windows10安裝Oracle19c數(shù)據(jù)庫(kù)詳細(xì)記錄,文中給大家介紹了修改密碼的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05oracle數(shù)據(jù)與文本導(dǎo)入導(dǎo)出源碼示例
這篇文章主要介紹了oracle數(shù)據(jù)與文本導(dǎo)入導(dǎo)出源碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。2017-10-10oracle數(shù)據(jù)庫(kù)索引失效的問題及解決
本文總結(jié)了在Oracle數(shù)據(jù)庫(kù)中索引失效的一些常見場(chǎng)景,包括使用isnull、isnotnull、!=、<、>、函數(shù)處理、like前置%查詢以及范圍索引和等值索引同時(shí)存在等情況,通過實(shí)際的SQL查詢驗(yàn)證,展示了索引失效的原因,并給出了相應(yīng)的優(yōu)化建議2025-01-01Oracle數(shù)據(jù)完整性和鎖機(jī)制簡(jiǎn)析
事務(wù)不是程序,事務(wù)和程序分屬兩個(gè)概念,事務(wù)控制語句稱為TCL,一般包括Commit和Rollback,需要了解的朋友可以參考下2012-11-11Oracle 23ai中重要新特性VECTOR數(shù)據(jù)類型的使用
Oracle 23ai 中的 VECTOR 數(shù)據(jù)類型是 Oracle 數(shù)據(jù)庫(kù)在 AI 領(lǐng)域的一個(gè)重要新特性,它允許用戶以向量的形式存儲(chǔ)數(shù)據(jù),并在這些向量的基礎(chǔ)上進(jìn)行高效的搜索和分析,下面就來介紹一下如何使用2024-08-08win x64下安裝oracle 12c出現(xiàn)INS-30131報(bào)錯(cuò)的解決方法
這篇文章主要介紹了win x64下安裝oracle 12c出現(xiàn)INS-30131報(bào)錯(cuò)的解決方法,感興趣的小伙伴們可以參考一下2016-07-07Oracle除去數(shù)據(jù)中的換行符以免讀取出現(xiàn)問題
將整條數(shù)據(jù)取出,并用特殊符號(hào)分割,如果數(shù)據(jù)出現(xiàn)換行的情況,那么讀取時(shí)就有問題,這時(shí)就可以采用下面的方法來去除2014-07-07