Oracle
為什麼“GRANT SELECT … TO Role;”不允許角色成員選擇?
請考慮Oracle 11g數據庫上的以下場景。
使用者 ADMIN 執行以下操作:
CREATE USER Alice IDENTIFIED BY pwdalice; GRANT CREATE SESSION TO Alice; CREATE ROLE Viewer IDENTIFIED BY pwdviewer; GRANT Viewer TO Alice; GRANT SELECT ON Table_1 TO Viewer;
然後 Alice 以“Alice”身份登錄數據庫並執行以下命令:
SELECT * FROM Table_1;
愛麗絲收到以下錯誤:
SELECT * FROM Table_1 * ERROR at line 1: ORA-00942: table or view does not exist
我認為授予角色特權將使其成員使用者能夠獲得這些特權。但是,這種情況表明事實並非如此。我在這裡想念什麼?如何使用角色將 SELECT 授予 Alice?
更新:
按照答案,嘗試了 3 次修復,但均未成功
- 使用完全限定的表名
我錯過了在
SELECT * FROM Table_1;
命令中包含模式名稱。但是,即使添加瞭如下所示的架構名稱,仍然會出現錯誤。愛麗絲執行:
SELECT * FROM ADMIN.Table_1;
得到錯誤:
SELECT * FROM ADMIN.Table_1 * ERROR at line 1: ORA-00942: table or view does not exist
- 使用全限定表名的同義詞
不幸的是,這似乎也不能解決問題。
Alice 執行以下操作:
CREATE SYNONYM Syn_Table_1 FOR ADMIN.Table_1; CREATE SYNONYM Syn_Table_1 FOR ADMIN.Table_1 * ERROR at line 1: ORA-01031: insufficient privileges
- 改變會話
ALTER SESSION SET current_schema = ADMIN; Session altered. SELECT * FROM Table_1; SELECT * FROM Table_1 * ERROR at line 1: ORA-00942: table or view does not exist
除了確保您處於正確的架構中之外,請嘗試這個;
以 Alice 身份登錄後,執行以下操作:
SET ROLE Viewer IDENTIFIED BY pwdviewer;
更多請看這裡
您創建的角色受密碼保護。因此,當愛麗絲登錄時,預設情況下不啟用它。