《Oracle用户角色与权限控制》由会员分享,可在线阅读,更多相关《Oracle用户角色与权限控制(17页珍藏版)》请在金锄头文库上搜索。
1、用户角色与权限控制用户角色与权限控制每次登录每次登录Oracle数据库,用户和密码是最基本的信数据库,用户和密码是最基本的信息。当使用特定的用户登录数据库时,该用户便具有自己的息。当使用特定的用户登录数据库时,该用户便具有自己的特点和操作权限。角色则是权限的集合,角色可以分配给用特点和操作权限。角色则是权限的集合,角色可以分配给用户,相当于一次性将某个特定权限集合分配给用户。户,相当于一次性将某个特定权限集合分配给用户。Oracle正是通过这三个重要的对象来实现数据库操作的安全策略。正是通过这三个重要的对象来实现数据库操作的安全策略。l用户及用户的创建;用户及用户的创建;l权限及权限的分配;权
2、限及权限的分配;l角色及角色的使用。角色及角色的使用。12.1 12.1 用户用户用户是数据库中最基本的对象之一。在前面的内容用户是数据库中最基本的对象之一。在前面的内容中,登录数据库一直使用了中,登录数据库一直使用了system用户。而该用户是管理用户。而该用户是管理员级别的用户,拥有数据库大多数对象的操作权限。在正式员级别的用户,拥有数据库大多数对象的操作权限。在正式开发过程中,使用该用户将是不安全的。一旦操作失当,有开发过程中,使用该用户将是不安全的。一旦操作失当,有可能对数据库造成严重损害。本节将讲述可能对数据库造成严重损害。本节将讲述Oracle中用户的基中用户的基本情况和如何创建用
3、户。本情况和如何创建用户。12.1.1 Oracle12.1.1 Oracle中的用户中的用户Oracle中的用户可以分为两类:一类是中的用户可以分为两类:一类是Oracle数据数据库创建时,由系统自动创建的用户,称为系统用户,如库创建时,由系统自动创建的用户,称为系统用户,如sys和和system;另一类用户是利用系统用户创建的用户,称为;另一类用户是利用系统用户创建的用户,称为普通用户。可以通过查询视图普通用户。可以通过查询视图dba_users来查看当前数据库来查看当前数据库的所有用户状况。的所有用户状况。select username, account_status, default_
4、tablespace, temporary_tablespace from dba_users12.1.2 12.1.2 创建新用户创建新用户可以在可以在Oracle中创建新的用户。创建用户应该使用中创建新的用户。创建用户应该使用create user命令,在创建普通用户的同时,应为其分配一命令,在创建普通用户的同时,应为其分配一个具体的表空间。个具体的表空间。create user tiger identified by abc default tablespace usersselect username, account_status, default_tablespace, tempo
5、rary_tablespace from dba_users where lower(username) = tiger; 12.1.3 12.1.3 用户与模式(用户与模式(SchemaSchema)模式是指用户所拥有的所有对象的集合。这些对象模式是指用户所拥有的所有对象的集合。这些对象包括:表、索引、视图、存储过程等。每个用户都会有独立包括:表、索引、视图、存储过程等。每个用户都会有独立的模式信息。当然,对于新建用户,在没有创建任何对象时,的模式信息。当然,对于新建用户,在没有创建任何对象时,所拥有的对象集合为空,所拥有的对象集合为空,Schema同样为空。但是,同样为空。但是,Schem
6、a必须依赖于用户的存在而存在,即不存在不属于任必须依赖于用户的存在而存在,即不存在不属于任何用户的何用户的Schema对象。对象。select sys_context(userenv, current_user) current_user, sys_context(userenv, current_schema) current_schema from dual; create table dual(testdata varchar2(20);Select * from dual;select * from sys.dual;12.1.4 12.1.4 系统用户系统用户syssys和和syst
7、emsystem系统用户系统用户sys和和system是是Oracle数据库常用的两个系统数据库常用的两个系统用户。其中用户。其中sys是是Oracle数据库中最高权限用户,其角色为数据库中最高权限用户,其角色为SYSDBA(数据库管理员);而(数据库管理员);而system用户的权限仅次于用户的权限仅次于sys用用户,其角色为户,其角色为SYSOPER(数据库操作员)。在权限的范围上,(数据库操作员)。在权限的范围上,sys可以创建数据库,而可以创建数据库,而system则不可以。则不可以。system用户密码丢失是一个常见问题。例如,当多次输用户密码丢失是一个常见问题。例如,当多次输入错误
8、的密码之后,入错误的密码之后,Oracle会锁定会锁定system账号,不允许用户再次账号,不允许用户再次登录。登录。sqlplus /ORCL as sysdbashow parameter db_name; select username, account_status from dba_users where lower(username)=system; alter user system account unlock; alter user system identified by abc123; 12.2 12.2 权限权限权限(权限(Privilege)的最终作用对象是用户。即所
9、有)的最终作用对象是用户。即所有用户在数据库内的操作对象和可执行的动作都是受到限制的。用户在数据库内的操作对象和可执行的动作都是受到限制的。Oracle中共有两种权限:系统权限和对象权限。中共有两种权限:系统权限和对象权限。12.2.1 12.2.1 系统权限系统权限1获得系统权限的相关信息获得系统权限的相关信息select distinct privilege from dba_sys_privs; 2为用户分配权限为用户分配权限sqlplus tiger/abctest grant create session to tiger; create table tiger(name varch
10、ar2(20);grant create table to tiger;alter user tiger quota 10M on users quota 2M on temp;select * from dba_sys_privs where lower(grantee) = tiger; 3收回用户的系统权限收回用户的系统权限 revoke create table from tiger; create table test(test_data varchar2(2); 12.2.2 12.2.2 对象权限对象权限对象权限是指用户对已有对象的操作权限。这些权对象权限是指用户对已有对象的操作
11、权限。这些权限包括以下几种:限包括以下几种:lselect:可用于查询表、视图和序列。:可用于查询表、视图和序列。linsert:向表或视图中插入新的记录:向表或视图中插入新的记录lupdate:更新表中数据:更新表中数据ldelete:删除表中数据:删除表中数据lexecute:函数、存储过程、程序包等的调用或执行:函数、存储过程、程序包等的调用或执行lindex:为表创建索引:为表创建索引lreferences:为表创建外键:为表创建外键lalter:修改表或者序列的属性:修改表或者序列的属性12.2.2 12.2.2 对象权限对象权限1为用户赋予为用户赋予select权限权限 grant
12、 select on t_employees to tiger; 2为用户赋予为用户赋予insert权限权限3为用户赋予为用户赋予update权限权限4为用户赋予为用户赋予all权限权限select table_name, grantee, grantor, privilege from dba_tab_privs where table_name = T_EMPLOYEES; 5收回用户的对象权限收回用户的对象权限 revoke select on t_employees from tiger; 12.3 12.3 角色角色虽然可以利用虽然可以利用grant命令为所有用户分配权限,但是命令为
13、所有用户分配权限,但是如果数据库的用户众多,而且权限关系复杂,那么为用户分如果数据库的用户众多,而且权限关系复杂,那么为用户分配权限的工作量将变得十分巨大。因此,配权限的工作量将变得十分巨大。因此,Oracle提出了角色提出了角色的概念。的概念。角色是指系统权限或者对象权限的集合。角色是指系统权限或者对象权限的集合。Oracle允允许首先创建一个角色,然后将角色信息赋予用户,从而间接许首先创建一个角色,然后将角色信息赋予用户,从而间接地将权限信息添加给用户。因为角色的可复用性,因此,可地将权限信息添加给用户。因为角色的可复用性,因此,可以将角色再次分配给其他用户,从而减少了重复工作。以将角色再
14、次分配给其他用户,从而减少了重复工作。就角色的创建来说,可以利用继承的特性,从简单就角色的创建来说,可以利用继承的特性,从简单的角色衍生出复杂的角色,这无疑大大提高了权限分配工作的角色衍生出复杂的角色,这无疑大大提高了权限分配工作的效率。的效率。12.3.1 12.3.1 创建和使用角色创建和使用角色创建角色可以使用命令创建角色可以使用命令create role,并可以利用,并可以利用grant命令为角色分配权限,最后将角色信息赋予用户。命令为角色分配权限,最后将角色信息赋予用户。create role role_employee; grant select on t_employees to
15、 role_employee; select table_name, grantee, grantor, privilege from dba_tab_privs where table_name = T_EMPLOYEES; grant role_employee to tiger select * from system.t_employees order by employee_id; 12.3.2 12.3.2 继承角色继承角色角色继承是指一个角色可以继承其他角色的权限信角色继承是指一个角色可以继承其他角色的权限信息,从而减少自身使用息,从而减少自身使用grant的机会。的机会。cre
16、ate role role_hr; grant role_employee to role_hr; grant update, insert on t_employees to role_hr; select table_name, grantee, grantor, privilege from dba_tab_privs where table_name = T_EMPLOYEES; create user cat identified by abc; grant create session to cat; grant role_hr to cat; update system.t_em
17、ployees set status = CXL where employee_id = 13;12.3.3 12.3.3 禁用和启用角色禁用和启用角色每个用户登录数据库时,都可以获得其默认角色。每个用户登录数据库时,都可以获得其默认角色。可以通过查询视图可以通过查询视图session_roles来获得当前会话下该用户来获得当前会话下该用户的默认角色。管理员可以禁用用户的默认角色,一旦禁用,的默认角色。管理员可以禁用用户的默认角色,一旦禁用,则用户从该角色获得的权限将不再有效。则用户从该角色获得的权限将不再有效。alter user cat default role none; select
18、* from session_roles; select * from system.t_employees order by employee_id; set role role_hr; select * from session_roles; select * from system.t_employees order by employee_id; 12.4 12.4 本章实例本章实例Oracle数据库内置了几个默认角色。这些角色包括:数据库内置了几个默认角色。这些角色包括:RESOURCE、CONNECT和和DBA。在许多应用系统的开发。在许多应用系统的开发中,往往为开发人员创建一个新
19、的用户,并为该用户分配中,往往为开发人员创建一个新的用户,并为该用户分配CONNECT和和RESOURCE角色。本节将查看这两种角色的角色。本节将查看这两种角色的主要权限。主要权限。select * from dba_sys_privs where lower(grantee) = connect;select * from dba_sys_privs where lower(grantee) = resource; 12.5 12.5 本章小结本章小结本章详细讲述了用户、权限和角色的相互关系,并本章详细讲述了用户、权限和角色的相互关系,并通过多个实例来剖析如何创建用户、分配权限和使用角色。通过多个实例来剖析如何创建用户、分配权限和使用角色。尤其需要注意的是角色的使用,合理使用角色可以极大提高尤其需要注意的是角色的使用,合理使用角色可以极大提高数据库权限管理的效率,减轻数据库数据库权限管理的效率,减轻数据库DBA的工作负担。的工作负担。12.6 12.6 习题习题1简述用户与模式的关系?简述用户与模式的关系?2简述系统权限与对象权限的区别?简述系统权限与对象权限的区别?3简述角色的意义。简述角色的意义。4如何实现两个角色之间的继承。如何实现两个角色之间的继承。