Oracle Database :玩转Oracle学习笔记之(7):orcle角色(1)

来源:互联网 发布:httpclient json 编辑:程序博客网 时间:2024/06/05 18:47
角色:

1、角色介绍:角色就是相关权限的命令集合,是用角色的主要目的就是为了简化权限的管理,假定有用户a,b,c,为了然他们都拥有有链接数据库的权限和在scott.emp表上进行select,insert和update权限的话,采用直接授权的方式,则需要进行12次授权;

2、预定义角色:值Oracle所提供的角色,每种角色都用于执行一些特定的管理任务,下面介绍几种常见的预定义角色:connect , resource  ,dba;
1)、connect:角色:
connect角色一般具有应用开发人员所需的大部分权限,比如:alter session;create cluster ; create database link ; create session; create table ; create view ; creata sequence;

2)、resource:具有应用开发所需的其他权限,比如建立存储过程、触发器等;这里注意的是resource角色隐含了unlimited tablespace系统权限;
create cluster;create indextype;create table;create sequece;create type;create procedure;create trigger;

3)、dba角色:具有所有的系统权限以及with admin oprion选项,默认的dba用户是sys和system,他们可以将然和系统权限授予其他用户,但是要足以的是dba角色不具备sysdba和sysoper的特权(启动和关闭数据库);


3、自定义角色:根据自己的需要来定义角色,一般是dba来建立,如果是别的用户建立,则要求用户具有create role的系统权限,在建立角色是可以指定验证方式(不验证、数据库验证等);
1)、建立角色(不验证);
如果角色是公共角色,可以采用不验证的方式建立角色;
create role roleName not identified;
SQL> create role myrole1 not identified;Role created.

2)、建立角色(数据库验证);
采用这样的方式,角色名,口令存放在数据库中,当激活该角色是,必须提供口令,在建立这种角色是需要为其提供口令;
create role roleName identified by S123;

4、角色授权:当建立角色时候,角色灭有任何权限,为了使得角色完成特定任务,必须为其授予相应的系统权限和对象权限;
1)、给角色授权:给角色授予权限和给用户授予权限没有多大区别,但是要注意,系统权限的unlimited tablespace和对象权限的with grant option是不能被授予的;
SQL> grant create session to myrole1 with admin option;Grant succeeded.SQL> conn scott/Spongcer123;Connected.SQL> show user;USER is "SCOTT"SQL> grant select on emp to myrole1;Grant succeeded.SQL> grant update , delete on emp to myrole1;Grant succeeded.

2)、分配角色给某个用户:
一般分配时候dba来完成的,如果是其他用户身份分配角色,则要求该用户具有grant any role的系统权限;
SQL> conn system/Spongcer123;Connected.SQL> create user myuser identified by Spongcer123;User created.SQL> grant myrole1 to myuser 【with admin option】;(如果有with admin option的话,说明myuser可以将system分配各他的角色myrole1在分配各别的用户;)Grant succeeded.SQL> conn myuser/Spongcer123;Connected.SQL> select * from scott.emp;     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO---------- ---------- --------- ---------- --------- ---------- ---------- ----------      7369 SMITH      CLERK           7902 17-DEC-80        800                    20      7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30      7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30      7566 JONES      MANAGER         7839 02-APR-81       2975                    20      7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30      7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30      7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10      7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20      7839 KING       PRESIDENT            17-NOV-81       5000                    10      7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30      7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO---------- ---------- --------- ---------- --------- ---------- ---------- ----------      7900 JAMES      CLERK           7698 03-DEC-81        950                    30      7902 FORD       ANALYST         7566 03-DEC-81       3000                    20      7934 MILLER     CLERK           7782 23-JAN-82       1300                    1014 rows selected.


5、删除角色:
使用drop role 命令,一般是由dba来执行的,如果其他用户,则要求该用户具有drop any role的系统权限;

这里就要考虑一个问题了:
一旦myrole1给删除了的话,那么myuser还具有myrole所具有的权限呢?
SQL> drop role myrole1;Role dropped.SQL> conn  myuser/Spongcer123;ERROR:ORA-01045: user MYUSER lacks CREATE SESSION privilege; logon deniedWarning: You are no longer connected to ORACLE.

通过实验,说明,当删除myrole1的时候,myuser所具有的权限也被删除了;


6、显示角色信息:
1)、显示所有信息:
SQL> conn system/Spongcer123;Connected.SQL> select * from dba_roles;

2)、显示角色所具有的系统权限;
SQL> select privilege , admin_option from role_sys_privs where role='DBA';

3)、显示角色所具有的对象权限;
通过查询数据字典dba_tab_privs可以查看角色具有的对象权限或者是列权限;
4)、显示用户具有的角色以及默认角色;

当以用户的身份连接到数据库时候,oracle会自动激活默认的角色,通过查询数据字典dba_role_privs可以显示某个用户所具有的角色以及当前默认的角色;
SQL> desc dba_role_privs; Name                    Null?    Type ----------------------- -------- ---------------- GRANTEE                          VARCHAR2(30) GRANTED_ROLE            NOT NULL VARCHAR2(30) ADMIN_OPTION                     VARCHAR2(3) DEFAULT_ROLE                     VARCHAR2(3)SQL> select granted_role , default_role from dba_role_privs where grantee='SCOTT';GRANTED_ROLE                   DEF------------------------------ ---RESOURCE                       YESCONNECT                        YES

7、精细访问控制:
是指用户可以使用函数。策略实现更加细微的安全访问控制,如果使用精细访问控制,则当在客户端发出sql语句(select , insert , update,delete)时候,oracle会自动在sql语句后追加谓词(where子句),并执行新的sql语句,通过这样的控制,可以使得不同的数据库用户访问相同的表示,返回不同的数据库信息;
比如:三个用户:scott , blake , jones
策略:emp_access;
数据库表:emp;

通过策略emp_access,用户scott , blake , jones在执行相同的sql语句时候,可以返回不同的结果,例如,执行select ename from emp时候,根据实际情况可以返回不同的结果;


原创粉丝点击