请考虑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
2) 使用全限定表名的同义词
不幸的是,这似乎也不能解决问题。
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
3) 改变会话
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