权限分为
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
浙公网安备 33010602011771号