<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      代碼改變世界

      Oracle如何找出一個表的間接授權信息?

      2025-06-27 09:36  瀟湘隱者  閱讀(59)  評論(0)    收藏  舉報

      在Oracle數據庫中, 如果需要找出一張表授權給了哪一個用戶,這個比較簡單的,如果有一些視圖引用了這張表,然后這張視圖授權給了其它用戶的話, 那么這也屬于這張表的授權信息,如果也要找出這類信息,那么如何找出來這些信息呢?

      下面簡單看一個例子, 在數據庫中存在三個用戶T1, T2, T3, 假設T1用戶將表T1.TEST的查詢權限授予了用戶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 connectresource to t1;
      grant connectresource to t2;
      grant connectresource to t3;


      grant create view to t2;
      grant create view to t3;

      具體授權操作如下所示:

      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>
      SQLgrant select on test to t2;

      Grant succeeded

      那么此時查看關于表TEST的授權信息如下所示:

      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的查詢權限授予了用戶T2,并且使用了選項GRANT OPTION的話

      SQL> show user;
      USER is "T1"
      SQL> grant select on test to t2 with grant option;

      Grant succeeded.

      SQL

      那么此時,如果在T2用戶下面創建一個視圖,引用表TEST, 然后將視圖T2.V_TEST的查詢權限授權給了用戶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

      此時用戶T3就相當間接擁有了表TEST的查詢權限. 如下所示:

      SQL> show user;
      USER is "T3"
      SQL> select * from t2.v_test;

      NAME
      ------------------------------
      k1
      k2

      SQL> 

      但是,我們用上面的SQL來查詢一下表TEST授予了哪些用戶.如下所示, 這個查詢結果不能體現表TEST間接授權給了用戶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

      那么問題來了,如何查詢這種情況下的授權呢? 其實我們可以用下面SQL實現這個需求.如下所示:

      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'
      );
      主站蜘蛛池模板: 国产精品久久久久久av| 国产91丝袜在线观看| 亚洲a人片在线观看网址| 久久综合久色欧美综合狠狠| 亚洲天堂网中文在线资源| 亚洲欧洲日产国码高潮αv| 视频区 国产 图片区 小说区 | 广河县| 国产无遮挡猛进猛出免费| 陵川县| 国产精品亚洲二区亚瑟| 成人午夜视频在线| 国产精品露脸3p普通话| 日本一区二区三区东京热| 精品无码人妻| 精品日韩色国产在线观看| 里番全彩爆乳女教师| 精品人妻日韩中文字幕| 伊人成人在线视频免费| 蜜臀AⅤ永久无码精品| 日韩av在线一区二区三区| 中文字幕亚洲无线码一区女同| 57pao成人国产永久免费视频| 国产精品护士| 久久国产精品不只是精品| 桃江县| 国产精品一二三区蜜臀av| 又粗又硬又黄a级毛片| 亚洲中文久久久精品无码| 久久综合国产色美利坚| 三上悠亚精品二区在线观看| 亚洲精品一区国产欧美| 亚洲中文字幕av天堂| 久久国产精品老人性| 亚洲色成人网站www永久男男| 尤物国产精品福利在线网| 99久久精品费精品国产一区二 | 国产精品麻豆中文字幕| 少妇上班人妻精品偷人| 亚洲精品日韩在线丰满| 国产老熟女视频一区二区|