角色:
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系统权限;
3)、dba角色:具有所有的系统权限以及with admin oprion选项,默认的dba用户是sys和system,他们可以将然和系统权限授予其他用户,但是要足以的是dba角色不具备sysdba和sysoper的特权(启动和关闭数据库);
3、自定义角色:根据自己的需要来定义角色,一般是dba来建立,如果是别的用户建立,则要求用户具有create role的系统权限,在建立角色是可以指定验证方式(不验证、数据库验证等);
1)、建立角色(不验证);
如果角色是公共角色,可以采用不验证的方式建立角色;
create role roleName not identified;
2)、建立角色(数据库验证);
采用这样的方式,角色名,口令存放在数据库中,当激活该角色是,必须提供口令,在建立这种角色是需要为其提供口令;
4、角色授权:当建立角色时候,角色灭有任何权限,为了使得角色完成特定任务,必须为其授予相应的系统权限和对象权限;
1)、给角色授权:给角色授予权限和给用户授予权限没有多大区别,但是要注意,系统权限的unlimited tablespace和对象权限的with grant option是不能被授予的;
2)、分配角色给某个用户:
一般分配时候dba来完成的,如果是其他用户身份分配角色,则要求该用户具有grant any role的系统权限;
5、删除角色:
使用drop role 命令,一般是由dba来执行的,如果其他用户,则要求该用户具有drop any role的系统权限;
这里就要考虑一个问题了:
一旦myrole1给删除了的话,那么myuser还具有myrole所具有的权限呢?
通过实验,说明,当删除myrole1的时候,myuser所具有的权限也被删除了;
6、显示角色信息:
1)、显示所有信息:
2)、显示角色所具有的系统权限;
3)、显示角色所具有的对象权限;
通过查询数据字典dba_tab_privs可以查看角色具有的对象权限或者是列权限;
4)、显示用户具有的角色以及默认角色;
当以用户的身份连接到数据库时候,oracle会自动激活默认的角色,通过查询数据字典dba_role_privs可以显示某个用户所具有的角色以及当前默认的角色;
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时候,根据实际情况可以返回不同的结果;
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 10
14 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 denied
Warning: 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 YES
CONNECT 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时候,根据实际情况可以返回不同的结果;