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

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

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

      Oracle關于列權限(Column Privileges)控制

      2025-08-29 09:32  瀟湘隱者  閱讀(19)  評論(0)    收藏  舉報

      Oracle數據庫中有列權限(Column Privileges)嗎? 相信不少老司機都會對這個權限感到陌生. 無它,只是用得少而已,而且Oracle關于列權限的控制有點奇怪.甚至有點奇葩,沒有詆毀的意思,而是就事論事. 下面請見淺析, 僅代表個人觀點.

      首先,這個權限并不像你想象的那樣.可以控制列的查詢(只對某些列授予查詢權限給其它用戶), 這個是不存在的.而像SQL Server數據庫是有這項功能的.

      SQL Server可以給用戶授予相關列的查詢權限(SELECT), 更多關于SQL Server列權限的介紹,可以查看我的這篇博客SQL Server 關于列的權限控制

      GRANT SELECT(BusinessEntityID, NationalIDNumber, LoginID) ON  [HumanResources].[Employee] TO [UserA]
      

      但是Oracle數據庫沒有這個功能. 如下所示

      SQL> SHOW USER;
      USER is "TEST"
      SQL> GRANT SELECT(OBJECT_ID, OBJECT_NAME) ON TEST.T2 TO TEST1;
      GRANT SELECT(OBJECT_ID, OBJECT_NAME) ON TEST.T2 TO TEST1
                  *
      ERROR at line 1:
      ORA-00969: missing ON keyword
      
      SQL> 
      

      其實并不是我的SQL語法有問題,而是實際上(到目前為止),Oracle就沒有這個功能,官方文檔關于列權限(Column Privileges)的闡述如下所示

      column
      
      Specify the table or view column on which privileges are to be granted. You can specify columns only when granting the INSERT, REFERENCES, or UPDATE privilege. If you do not list columns, then the grantee has the specified privilege on all columns in the table or view.
      
      For information on existing column object grants, query the USER_, ALL_, or DBA_COL_PRIVS data dictionary view.
      

      Oracle數據庫的列權限(Column Privileges)只能對列授予INSERT,UPDATE,REFERENCES這三種權限.也就是說不能對表/視圖的相關列進行SELECT授權. 下面簡單演示一下

      用戶TEST授予用戶TEST1對表T2的列(OBJECT_ID, OBJECT_NAME)更新的權限

      SQL> 
      SQL> SHOW USER;
      USER is "TEST"
      SQL> GRANT UPDATE(OBJECT_ID, OBJECT_NAME) ON TEST.T2 TO TEST1;
      
      Grant succeeded.
      
      SQL> 
      

      用戶TEST授予用戶TEST1對表T2的列(OBJECT_ID, OBJECT_NAME)插入的的權限

      SQL> SHOW USER;
      USER is "TEST"
      SQL> GRANT INSERT(OBJECT_ID, OBJECT_NAME) ON TEST.T2 TO TEST1;
      
      Grant succeeded.
      
      SQL> 
      

      那么要如何回收這些授予的權限呢?

      SQL> SHOW USER;
      USER is "TEST"
      SQL> REVOKE UPDATE(OBJECT_ID, OBJECT_NAME) ON TEST.T2 FROM TEST1;
      REVOKE UPDATE(OBJECT_ID, OBJECT_NAME) ON TEST.T2 FROM TEST1
                   *
      ERROR at line 1:
      ORA-01750: UPDATE/REFERENCES may only be REVOKEd from the whole table, not by
      column
      

      關于錯誤ORA-01750的解釋如下所示:

      $ oerr ora 01750
      01750, 00000, "UPDATE/REFERENCES may only be REVOKEd from the whole table, not by column"
      // *Cause:     Although it was possible to GRANT update privileges on a
      //             column-by-column basis, it was only possible to REVOKE them for
      //             an entire table.
      // *Action:    Do not identify specific columns. To revoke update
      //             privileges for certain columns, use REVOKE for the entire
      //             table and GRANT the user privileges for specific columns.
      

      上面解釋得非常清楚了. 也就是說關于列權限(UPDATE),只能對整個表進行回收.

      SQL> SHOW USER;
      USER is "SYS"
      SQL> REVOKE UPDATE ON TEST.T2 FROM  TEST1;
      
      Revoke succeeded.
      SQL> REVOKE INSERT ON TEST.T2 FROM TEST1;
      
      Revoke succeeded.
      
      SQL> 
      

      總結

      關于Oracle數據庫中有列權限(Column Privileges),沒有授予指定列的查詢權限功能, 其實這個才是列權限最有價值的功能, 沒有這個功能,那么只能通過視圖來間接實現這個功能了. 另外, 列權限的權限回收也是透漏著別扭. 讓人有點懵.

      主站蜘蛛池模板: 日韩AV高清在线看片| 在线无码午夜福利高潮视频| 久久人体视频| 国产成人精品亚洲精品日日| 亚洲综合一区国产精品| 少妇伦子伦情品无吗| 苍井空毛片精品久久久| 亚洲 自拍 另类小说综合图区| 日韩在线不卡免费视频一区| 亚洲人成网线在线播放VA| 欧美人与zoxxxx另类| 麻豆精品久久精品色综合| 亚洲av成人无码精品电影在线| 真人抽搐一进一出视频| 国产极品精品自在线不卡| 亚洲欧美日韩综合一区在线| 亚洲国产精品毛片在线看| 三级国产在线观看| 伊人久久久av老熟妇色| 石门县| 亚洲理论在线A中文字幕| 囯产精品久久久久久久久久妞妞| 97精品亚成在人线免视频| 成人国产一区二区三区精品| 黄色免费在线网址| 日日爽日日操| 国产福利微视频一区二区| 中文字幕无码视频手机免费看 | 国偷自产视频一区二区久| 日日碰狠狠添天天爽超碰97| 免费可以在线看a∨网站| 在线看国产精品自拍内射| 日韩丝袜亚洲国产欧美一区 | 国产精品无遮挡一区二区| 内射干少妇亚洲69xxx| 亚日韩精品一区二区三区| 亚洲国产欧美一区二区好看电影| 国产精品成人久久电影| 少妇人妻偷人精品视频| 五月天中文字幕mv在线| 亚洲欧美牲交|