我创建了表并将 select 语句授予角色。然后,我将角色授予用户。用户可以在我的表上执行 select 语句,但他无法通过 SELECT * FROM USER_TAB_PRIVS 查看有关此权限的信息; 人力资源用户在下面逐步说明:
CREATE TABLE A1 (ID NUMBER);
Table A1 created.
CREATE TABLE A2 (ID NUMBER);
Table A2 created.
CREATE ROLE ROLE1;
Role ROLE1 created.
GRANT SELECT ON A1 TO ROLE1;
Grant succeeded.
GRANT SELECT ON A2 TO ROLE1;
Grant succeeded.
GRANT ROLE1 TO MAX;
Grant succeeded.
然后按用户 MAX 执行步骤:
SET ROLE ROLE1;
Role ROLE1 succeeded.
SELECT * FROM HR.A1;--successfull
SELECT * FROM USER_TAB_PRIVS;--successful, but no rows
问题出在哪里?惠能澄清吗?
用户 MAX 没有表权限,只有角色 ROLE1 的权限。
使用USER_ROLE_PRIVS
显示这些权限。user_tab_privs
仅限于已连接/当前用户的权限。
表user_tab_privs是Oracle字典中的表。所以我建议使用Oracle数据库。grant select
后,如果您以用户 HR 身份连接,您将从user_tab_privs
获得一个条目。如果使用dba 用户,则必须查询dba_tab_privs
。