Oracle

為什麼“GRANT SELECT … TO Role;”不允許角色成員選擇?

  • May 5, 2020

請考慮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 次修復,但均未成功

  1. 使用完全限定的表名

我錯過了在 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
  1. 使用全限定表名的同義詞

不幸的是,這似乎也不能解決問題。

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
  1. 改變會話

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;

更多請看這裡

您創建的角色受密碼保護。因此,當愛麗絲登錄時,預設情況下不啟用它。

引用自:https://dba.stackexchange.com/questions/49463