辽宁本溪教育网:Oracle学习笔记(15)角色管理

来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 10:58:13

角色管理

 

角色:命名了的权限集合(系统权限或对象权限),多个用户可以使用多个角色。
优点:简化用户对权限的管理;动态权限管理(激活才可以用);有选择的可以启用(enable)或关闭(disable)权限;可以通过操作系统来授权;改善系统性能。
sql>conn sys/admin1 as sysdba
sql>set wrap off
sql>set linesize 1000
sql>select * from dba_roles; //系统角色表
sql>select * from role_sys_privs; //哪些系统权限授予了相关角色
sql>select * from role_tab_privs; //对象的权限


1.创建和修改角色
CREATE ROLE oe_clerk; //无口令
CREATE ROLE hr_clerk IDENTIFIED BY bonus;   //指定了口令验证
CREATE ROLE hr_manager IDENTIFIED EXTERNALLY //指定了外部验证(OS验证)
修改角色即修改角色的验证方式或口令:
ALTER ROLE oe_clerk IDENTIFIED BY order;
ALTER ROLE hr_clerk IDENTIFIED EXTERNALLY;
ALTER ROLE hr_manager NOT IDENTIFIED;

sql>alter role testrole1 identified by kxf_001 //修改角色指定了口令
sql>set role testrole1; //激活口令无效,必须也指定口令才可以激活
sql>set role testrole1 identified by kxf_001  //激活成功

sql>create role testrole3 identified by kxf_001 //建立角色指定口令

sql>alter role testrole3 not identified; //无须口令
sql>set role testrole3; //直接激活角色无须口令
sql>alter role testrole3 identified externally; //外部验证

 

2.控制角色可用性:动态管理用户的权限。
动态权限管理举例testuser1/testrole1:
窗口1:
sql>conn sys/admin1 as sysdba
sql>drop user testuser1 cascade ;  //删除用户testuser1
sql>c /1/2
sql>run            //删除用户testuser2
sql>drop role testrole1;  //删除角色testrole1

sql>create user testuser1    //创建testuser1用户
    identified by kxf_001;
sql>grant create session to testuser1;  //把会话 权限给testuser1用户

窗口2:
sql>conn testuser1/kxf_001;
sql>select * from kong.authors; //无权限访问kong用户的authors表

窗口1:
sql>create role testrole1; //创建角色1
sql>conn kong/kxf_001   //连接kong用户
sql>grant select on authors to testrole1; //将select on authors权限给testrole1角色
sql>grant testrole1 to testuser1; //将角色testrole1授予用户testuser1

窗口2:
sql>run   //select * from kong.authors 仍然无法访问。
sql>set role testrole1; //激活角色(重要)

sql>run   //select * from kong.authors 有权限可以访问

 

3.指定角色:
建立role以后,role本身没有任何权限,除非把权限指定给public,public再给到role.只是给role命了名,而无任何权限。因此需要授予权限给role这个载体.
GRANT oe_clerk TO scott;
GRANT hr_clerk TO hr_manager;
GRANT hr_manager TO scott WITH ADMIN OPTION;

sql>grant create table to testrole3;     //授予系统权限给testrole3
sql>grant create any table to testrole3;
sql>conn kong/kxf_001
sql>grant select,update on authors to testrole3; //授予对象权限给testrole3
sql>grant update(au_id,au_lname,au_fname) on authors to testrole3; //授予基于栏位级别的权限给testrosle3
sql>grant testrole3 to testuser1; //将角色testrole3授予testuser1用户
sql>grant testrole3 to testrole1; //将一个role传递给另一个role。即将testrole3角色授予testrole1角色
sql>grant testrole3 to testuser1 with admin option;// 可将这个权限传递给第三个人,但是不级联

注意1:role不能自己授予给自己或间接授予给自己(即不能循环授权)
sql>grant testrole1 to testrole3;  //已经讲爱你个testrole1授给testrole3,不能再将testrole3授给testrole1
sql>grant testrole3 to testrole3; //不能将角色授予自己

注意2:所有role都没有owner这个说法的(No Schema),不需要指定所有者:如kong.role1 是错误的。

 

4.默认角色Default roles:
初始默认的角色在用户登录时会自动激活,不管你有没有口令。登录后它会自动继承用户所拥有的权限。可以显式的指定哪些role是默认,哪些role不是默认的。默认角色不需要口令。
alter user xxx default role role1,[role2....] [all] [except role3,role4][none]
ALTER USER scott DEFAULT ROLE hr_clerk,oe_clerk;
ALTER USER scott DEFAULT ROLE ALL;
ALTER USER scott DEFAULT ROLE ALL EXCEPT hr_clerk;
ALTER USER scott DEFAULT ROLE NONE;

sql>alter user testuser1 default role testrole3; //指定testrole3是default role
sql>alter user testuser1 default role all;  //所有default role
sql>alter user testuser1 default role all except testrole1; //除了testrole1非default,其他都是default
sql>alter user testuser1 default role none;  //所有非default role

 

5.应用角色:
仅仅通过验证PL/SQL数据包来使应用角色可用。
sql>create role testrole4 identified using sys.dbms_output; //通过PL/SQL数据包来进行验证

 

6、Enable和Disable角色:
Diable role可以从一个用户中临时地取消角色
Enable role可以临时地授予一个用户角色

SET ROLE hr_clerk;
SET ROLE oe_clerk IDENTIFIED BY order;
SET ROLE ALL EXCEPT oe_clerk;

sql>set role testrole1 identified by kxf_001;
sql>conn testuser1/kxf_001
sql>select * from kong.authors

sql>set role none; //关闭所有角色
sql>select * from kong.authors; //无法访问

 

7.撤消用户角色
REVOKE oe_clerk FROM scott;
REVOKE hr_manager FROM PUBLIC;
sql>revoke testrole3 from testrole1;
sql>revoke testrole1 from testuser1;

 

8.删除角色:

DROP ROLE hr_manager;
sql>drop role testrole3;


9.使用系统预定义的角色
CONNECT,RESOURCE,DBA: 授予Database连接,资源访问和数据库管理的权限
EXP_FULL_DATABASE:授予Database完整输出(导出)的权限 cmd:exp 用户名/口令 输出文件地址 full=y
IMP_FULL_DATABASE:授予Database完整输入(导入)的权限 cmd:imp 用户名/口令 输入文件地址 full=y
DELETE_CATALOG_ROLE:授予对系统表里的资料进行直接删除
EXECUTE_CATALOG_ROLE:授予对系统直接run标准数据包
SELECT_CATALOG_ROLE:授予对系统数据字典的查看

sql>execute dbms_output.put_line('test string1'); //run标准数据包
cmd: exp testuser1/kxf_001@fox file=c:\t1.txt full=y


10.使用口令保护和默认角色:
建议:把一些比较低级的权限建立为role,并指定为默认角色default role.而需要口令保护的权限<比如INSERT,UPDATE,DELETE AND SELECT 等权限>使用口令保护。

 

11.从数据字典中获取角色信息
DBA_ROLES  所有在数据库中存在的角色
DBA_ROLE_PRIVS 把哪些role给到哪些用户或其他的角色role
ROLE_ROLE_PRIVS 把哪些角色授予哪些角色
DBA_SYS_PRIVS   把哪些系统权限给到了哪些用户和角色
ROLE_SYS_PRIVS  把哪些系统权限给到了哪些角色
ROLE_TAB_PRIVS  把哪些数据对象权限给到了哪些角色
SESSION_ROLES   用户使用了当前哪些可用的角色
sql>grant testrole1 to testuser1;
sql>select * from dba_role_privs where grantee='TESTUSER1' //def=no,adm=no
sql>alter user testuser1 default role all;
sql>select * from dba_role_privs where grantee='TESTUSER1' //def=yes,adm=no
sql>grant testrole1 to testuser1 with admin option;
sql>select * from dba_role_privs where grantee='TESTUSER1'  //def=yes,adm=yes
sql>select * from role_role_privs; //dba 包含了系统中预定义的其他role的所有权限

sql>select * from session_roles;
sql>set role testrole1 identified by kxf_001;
sql>select * from role_role_privs;
sql>select * from role_tab_privs;
sql>select * from role_sys_privs;