授權物件許可權後的授權者顯示問題
對使用者授予物件許可權後,查詢資料字典,資料字典中記錄的授權者並不一定是真正授權的使用者。
能授予物件許可權的只有三種情況:一、物件的OWNER;二、被授予物件許可權且包含WITH GRANT OPTION許可權;三、使用者擁有GRANT ANY OBJECT PRIVILEGE許可權:
SQL> CREATE USER U_GRANTEE IDENTIFIED BY PASSWORD;
使用者已建立。
SQL> CREATE USER U_WITH_GRANT IDENTIFIED BY PASSWORD;
使用者已建立。
SQL> CREATE USER U_GRANT_ANY IDENTIFIED BY PASSWORD;
使用者已建立。
SQL> CREATE USER U_WITH_GRANT_AND_ANY IDENTIFIED BY PASSWORD;
使用者已建立。
SQL> SHOW USER
USER 為 "YANGTK"
SQL> CREATE TABLE T (ID NUMBER);
表已建立。
SQL> GRANT SELECT ON T TO U_GRANTEE;
授權成功。
SQL> SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'U_GRANTEE';
GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRA HIE
---------- ---------- ---------- -------------------- ---------- --- ---
U_GRANTEE YANGTK T YANGTK SELECT NO NO
對於第一種情況沒有什麼特別之處,物件的OWNER授權後,顯示的授權者就是OWNER。
SQL> GRANT INSERT ON T TO U_WITH_GRANT WITH GRANT OPTION;
授權成功。
SQL> GRANT CREATE SESSION TO U_WITH_GRANT;
授權成功。
SQL> CONN U_WITH_GRANT/PASSWORD
已連線。
SQL> GRANT INSERT ON YANGTK.T TO U_GRANTEE;
授權成功。
SQL> CONN YANGTK/YANGTK
已連線。
SQL> SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'U_GRANTEE';
GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRA HIE
---------- ---------- ---------- -------------------- ---------- --- ---
U_GRANTEE YANGTK T U_WITH_GRANT INSERT NO NO
U_GRANTEE YANGTK T YANGTK SELECT NO NO
第二種情況也很正常,當擁有WITH GRANT OPTION的使用者授權時,顯示的GRANTOR就是執行授權命令的使用者。
SQL> GRANT GRANT ANY OBJECT PRIVILEGE TO U_GRANT_ANY;
授權成功。
SQL> GRANT CREATE SESSION TO U_GRANT_ANY;
授權成功。
SQL> CONN U_GRANT_ANY/PASSWORD
已連線。
SQL> GRANT UPDATE ON YANGTK.T TO U_GRANTEE;
授權成功。
SQL> CONN YANGTK/YANGTK
已連線。
SQL> SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'U_GRANTEE';
GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRA HIE
---------- ---------- ---------- -------------------- ---------- --- ---
U_GRANTEE YANGTK T U_WITH_GRANT INSERT NO NO
U_GRANTEE YANGTK T YANGTK UPDATE NO NO
U_GRANTEE YANGTK T YANGTK SELECT NO NO
第三種情況比較特別,對於擁有GRANT ANY OBJECT PRIVILEGE系統許可權的使用者,授權後,顯示的GRANTOR是OWNER,而並不是執行授權命令的使用者。
其實還有第四種情況,就是使用者同時擁有物件的WITH GRANT OPTION和GRANT ANY OBJECT PRIVILEGE系統許可權:
SQL> GRANT GRANT ANY OBJECT PRIVILEGE TO U_WITH_GRANT_AND_ANY;
授權成功。
SQL> GRANT DELETE ON T TO U_WITH_GRANT_AND_ANY WITH GRANT OPTION;
授權成功。
SQL> GRANT CREATE SESSION TO U_WITH_GRANT_AND_ANY;
授權成功。
SQL> CONN U_WITH_GRANT_AND_ANY/PASSWORD
已連線。
SQL> GRANT DELETE ON YANGTK.T TO U_GRANTEE;
授權成功。
SQL> CONN YANGTK/YANGTK
已連線。
SQL> SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'U_GRANTEE';
GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRA HIE
---------- ---------- ---------- -------------------- ---------- --- ---
U_GRANTEE YANGTK T U_WITH_GRANT_AND_ANY DELETE NO NO
U_GRANTEE YANGTK T U_WITH_GRANT INSERT NO NO
U_GRANTEE YANGTK T YANGTK UPDATE NO NO
U_GRANTEE YANGTK T YANGTK SELECT NO NO
當使用者同時符合後兩種情況,在授權時,顯示的GRANTOR仍然是執行授權命令的使用者,而不再是物件的OWNER。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-674978/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 認證/授權與許可權的問題
- Oracle建立表空間、建立使用者、授權、授權物件的訪問以及檢視許可權集合Oracle物件
- DB2許可權與授權DB2
- 授權許可權服務設計解析
- [BUG反饋]許可權管理 -> 訪問授權 點選後報錯
- 鴻蒙Next許可權申請全攻略:系統授權與使用者授權之道鴻蒙
- oracle顯式授權和隱式授權Oracle
- 1.7.6. 授權和撤銷管理許可權
- 為什麼許可權授權很難?- osohq
- 許可權管理之多租戶隔離授權
- [WCF許可權控制]基於Windows使用者組的授權方式[上篇]Windows
- 定義者許可權儲存過程role無效,必須要有顯式授權儲存過程
- Oracle的物件許可權、角色許可權、系統許可權Oracle物件
- MongoDB建立只讀使用者並授權指定集合的查詢許可權MongoDB
- Oracle 使用者、物件許可權、系統許可權Oracle物件
- 5. 建立使用者、授權以及修改密碼等許可權操作密碼
- Oracle 建立表空間、建立使用者以及授權、檢視許可權Oracle
- django開發之許可權管理(一)——許可權管理詳解(許可權管理原理以及方案)、不使用許可權框架的原始授權方式詳解Django框架
- 『學了就忘』Linux許可權管理 — 54、sudo授權Linux
- mysql操作命令梳理(4)-grant授權和revoke回收許可權MySql
- MSSQL授權的問題-架構SQL架構
- 授權機制與授權模型研究模型
- 微服務中如何設計一個許可權授權服務微服務
- 更改授權後選單不顯示是怎麼回事?
- 認證授權方案之授權初識
- 認證授權問題概覽
- Anvil Connect:一個集各種許可權授權協議的開源身份驗證與授權伺服器協議伺服器
- mysql 授權MySql
- oracle授權Oracle
- 表列授權
- 【認證與授權】Spring Security的授權流程Spring
- Spring security(五)-完美許可權管理系統(授權過程分析)Spring
- [WCF許可權控制]利用WCF自定義授權模式提供當前Principal模式
- MySQL建立使用者授權訪問MySql
- MySQL許可權問題MySql
- 認證授權方案之授權揭祕 (上篇)
- ASP.NET Core策略授權和 ABP 授權ASP.NET
- JBOSS未授權訪問