权限分为
1.直接权限系统权限(可以赋给角色和用户) 和对象权限(直接将某个表、视图、存储过程等对象的操作权限赋给用户或角色)
2.间接权限 角色赋予用户所带有的权限

较为方便的设权限为:先设角色权限 然后将角色赋予给用户,这样不会导致管理混乱,直接赋予用户系统权限容易导致管理混乱

△.如果是授予的DEFAULT的时候,那么这个用户登录的时候自动就具备了这个角色,不需要进行这个角色的密码验证的。如果不是DEFAULT的,那么可以使用SET ROLE ROLE_NAME IDENTIFIED ROLE_PASSWORD来进行密码验证后,用户才能具有相应的角色。所以你即使给用户赋予了某个角色,如果没有设置defaule,登录后是默认不生效的

alter user syc default role all;alter user syc default role r1;

一些视图:
-- 确定角色的权限

select * from role_tab_privs ;              包含了授予角色的对象权限
select * from role_role_privs ;             包含了授予另一角色的角色
select * from role_sys_privs ;              包含了授予角色的系统权限
-- 确定用户帐户所授予的权限
select * from DBA_tab_privs ;   直接授予用户帐户的对象权限
select * from DBA_role_privs ; 授予用户帐户的角色
select * from DBA_sys_privs ;   授予用户帐户的系统权限

(1)系统权限(角色1下有角色2,角色2下没有角色,角色再套角色需要接着查赋予用户的角色上的角色权限):

select * from (
select grantee,privilege,'' role1,'' role2 
,'' DEFAULT_ROLE from dba_sys_privs 
 --直接赋予用户的系统权限
union all
select b.grantee,privilege,
b.grantee,b.GRANTED_ROLE role,b.DEFAULT_ROLE from dba_sys_privs a
,dba_role_privs  b where
a.GRANTEE=b.GRANTED_ROLE  
--赋予用户的角色权限
union all
select  b.grantee,privilege,b.granted_role role1
,c.GRANTED_ROLE role2,b.DEFAULT_ROLE  
from  dba_role_privs b,dba_role_privs c,dba_sys_privs a
 where  b.GRANTED_ROLe=c.GRANTEE and 
a.GRANTEE=c.GRANTED_ROLE
 --赋予用户的角色上的角色权限
) where  grantee ='SYC'

(2)对象权限(角色1下有角色2,角色2下没有角色,角色再套角色需要接着查赋予用户的角色上的角色权限):

select * from (
select owner,privilege,table_name,
'' role1,'' role2  from DBA_tab_privs  --直接赋予用户的系统权限
union all
select a.owner,privilege,table_name,
b.grantee role ,'' from role_tab_privs a,dba_role_privs  b where
a.role=b.GRANTED_ROLE and b.grantee='JULAN' 
 --赋予用户的角色权限
union all
select  b.grantee,privilege,b.granted_role role1
,c.GRANTED_ROLE role2 from  dba_role_privs b
,dba_role_privs c,role_tab_privs a
 where  b.GRANTED_ROLe=c.GRANTEE and
 b.grantee='JULAN' and a.role = c.granted_role
 --赋予用户的角色上的角色权限
) where  owner ='SYC'

授予存储过程的查询权限:

CREATE PROCEDURE、创建存储程序

CREATE ANY PROCEDURE、 创建任何存储程序

ALTER ANY PROCEDURE、更改任何存储程序

DROP ANY PROCEDURE、删除任何存储程序

EXECUTE ANY PROCEDURE、执行任何存储程序

DEBUG ANY PROCEDURE.查看定义任何存储程序

而实际上存储程序的对象权限只有EXECUTE和DEBUG两种,
execute有查看和执行的权限
debug只有查看的权限
授予所有存储过程查询权限只需:grant debug any procedure to xxx;

用户自己查询:
查询授出去的对象权限
select * from user_tab_privs_made;
select * from all_tab_privs_made;
用户拥有的对象权限
select * from user_tab_privs_recd;
select * from all_tab_privs_recd;

用户分配出去的列的对象权限
select * from user_col_privs_made;
select * from all_col_privs_made;

用户拥有的关于列的对象权限
select * from user_col_privs_recd;
select * from all_col_privs_recd

posted on 2022-05-16 19:08  xc川  阅读(91)  评论(0)    收藏  举报