一、查询自己角色
只能查询自己具有的权限,不包括授予的角色,所以也就不能查询通过角色授予的权限。
SELECT * FROM dba_sys_privs WHERE grantee = 'username'; 可以查询某个user拥有哪些系统权限 (SYS用户)
SELECT * FROM user_sys_privs 可以查询自己拥有哪些系统权限
查询一个用户的所有系统权限(包含角色的系统权限) (DBA执行)
SELECT privilege FROM dba_sys_privs WHERE grantee='USERNAME'
union
SELECT privilege FROM dba_sys_privs WHERE grantee IN (SELECT granted_role FROM dba_role_privs WHERE grantee='USERNAME');
用户自己查询(用DBA执行存在重复权限的问题,例如ADMINISTER ANY SQL TUNING SET 存在于DBA和SYS里面。)
SELECT * FROM user_sys_privs
UNION
SELECT * FROM role_sys_privs;
需要使用
SELECT privilege FROM user_sys_privs
UNION
SELECT privilege FROM role_sys_privs;
二、角色管理
注:当删除A用户的权限时,通过A赋予B的权限不会消失。
execute //执行存储过程权限
SQL> grant all on tablename to public; // public表示是所有的用户,这里的all权限不包括drop。
SQL> select owner, table_name from all_tables; // 用户可以查询的表
SQL> select table_name from user_tables; // 用户创建的表
SQL> select grantor, table_schema, table_name, privilege from all_tab_privs; // 获权可以存取的表(被授权的)
SQL> select grantee, owner, table_name, privilege from user_tab_privs; // 授出权限的表(授出的权限)
with admin option 用于系统权限授权,with grant option 用于对象授权。
给一个用户授予系统权限带上with admin option 时,此用户可把此系统权限授予其他用户或角色,但收回这个用户的系统权限时,这个用户已经授予其他用户或角色的此系统权限不会因传播无效,如授予A系统权限create session with admin option,然后A又把create session权限授予B,但管理员收回A的create session权限时,B依然拥有create session的权限,但管理员可以显式收回B create session的权限,即直接revoke create session from B.
with grant option用于对象授权时,被授予的用户也可把此对象权限授予其他用户或角色,不同的是但管理员收回用with grant option授权的用户对象权限时,权限会因传播而失效,如grant select on table with grant option to A,A用户把此权限授予B,但管理员收回A的权限时,B的权限也会失效,但管理员不可以直接收回B的SELECT ON TABLE 权限。