权限分为
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 allselect b.grantee,privilege,b.grantee,b.GRANTED_ROLE role,b.DEFAULT_ROLE from dba_sys_privs a,dba_role_privs b wherea.GRANTEE=b.GRANTED_ROLE--赋予用户的角色权限union allselect b.grantee,privilege,b.granted_role role1,c.GRANTED_ROLE role2,b.DEFAULT_ROLEfrom dba_role_privs b,dba_role_privs c,dba_sys_privs awhere b.GRANTED_ROLe=c.GRANTEE anda.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 allselect a.owner,privilege,table_name,b.grantee role ,'' from role_tab_privs a,dba_role_privs b wherea.role=b.GRANTED_ROLE and b.grantee='JULAN'--赋予用户的角色权限union allselect b.grantee,privilege,b.granted_role role1,c.GRANTED_ROLE role2 from dba_role_privs b,dba_role_privs c,role_tab_privs awhere b.GRANTED_ROLe=c.GRANTEE andb.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
文章转载自程序碎碎念,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




