总述
每个Oracle用户都有一个名字和口令,并拥有一些由其创建的表、视图和其他资源。Oracle角色(role)就是一组权限(privilege)(或者是每个用户根据其状态和条件所需的访问类型)。用户可以给角色授予或赋予指定的权限,然后将角色赋给相应的用户。一个用户也可以直接给其他用户授权。
- 数据库系统权限(Database System Privilege):系统权限是指执行特定类型SQL命令的权利,用于控制用户可以执行的一个或一类数据库操作。新建用户没有任何权限。赋予系统权限允许用户执行特定的命令集。例如,CREATE TABLE权限允许用户创建表,GRANT ANY PRIVILEGE 权限允许用户授予任何系统权限。
- 数据库对象权限(Database Object Privilege):使得用户能够对各个对象进行某些操作。例如DELETE权限允许用户删除表或视图的行,SELECT权限允许用户通过select从表、视图、序列(sequences)或快照 (snapshots)中查询信息。
用户
一、创建用户
Oracle内部有两个建好的用户:SYSTEM和SYS。用户可直接登录到SYSTEM用户以创建其他用户,因为SYSTEM具有创建别的用户的权限。在安装Oracle时,用户或系统管理员首先可以为自己建立一个用户。例如:
模板是:create user 用户名 identified by 密码
比如:
create user test identified by 1q2w3e;
(上面 test 是创建的用户, 1q2w3e 是密码)
该命令还可以用来设置其他权限。要改变一个口令,可以使用alter user命令:
alter user test identified by usr01;
现在 test 的口令已由“1q2w3e”改为“usr01”。
二、删除用户
删除用户,可以使用drop user命令,如下所示:
drop user test;
如果用户拥有对象,则不能直接删除,否则将返回一个错误值。指定关键字cascade,可删除用户所有的对象,然后再删除用户。下面的例子用来删除用户与其对象:
drop user test cascade;
三、查看用户状态
当前ORACLE用户的状态可查看视图DBA_USERS;一般情况下在使用的正常用户均处于OPEN状态。
select username,account_status from dba_users;
用户状态一共有九种状态,可分为两类:1.基本状态;2.组合状态。
- 五种基本状态:OPEN、EXPIRED、EXPIRED(GRACE)、LOCKED(TIMED)、LOCKED;
- 四种组合状态:EXPIRED & LOCKED(TIMED)、EXPIRED(GRACE) & LOCKED(TIMED)、EXPIRED & LOCKED、EXPIRED(GRACE) & LOCKED。
后四种的组合状态可通过状态号STATUS#获得其状态的两个组合。锁定的两种状态LOCKED、LOCKED(TIMED)和密码过期的两种状态EXPIRED、EXPIRED(GRACE)之间任意组合即2×2=4,因此有四种组合状态。
五种基本状态可分为三类:正常状态、锁定状态、密码过期状态。其中
- OPEN状态表示用户处于正常状态;
- LOCKED和LOCKED(TIMED)表示用户被锁定状态
用户被锁定有两种:
- LOCKED:是DBA显式的通过SQL语句对用户进行锁定,见下述语句:
alter user [username] account lock
- LOCKED(TIMED):这一种是被动的锁定,默认情况下如果密码输入错误超过10次则被动锁定。
- EXPIRED、EXPIRED(GRACE)表示用户密码过期状态
修改PROFILE中的PASSWORD_LIFE_TIME实现密码是否过期:
alter profile default limit password_life_time unlimited;
密码过期后也可修改PROFILE中的PASSWORD_GRACE_TIME控制使用的天数:
alter profile default limit password_grece_time 180;
对于密码过期的用户OPEN:
alter user [username] identified by account unlock;
角色
一、3种标准角色
角色是一组相关权限的命名集合,使用角色最主要的目的是简化权限管理。
如果用户拥有对象,则不能直接删除,否则将返回一个错误值。指定关键字CASCADE,可删除用户所有的对象,然后再删除用户。下面的例子用来删除用户与其对象:
Oracle为了兼容以前的版本,提供了三种标准的角色(role):CONNECT、RESOURCE、DBA。
- CONNECT Role(连接角色):临时用户,特别是那些不需要建表的用户,通常只赋予他们CONNECTrole。CONNECT是使用Oracle的简单权限,这种权限只有在对其他用户的表有访问权时,包括select、insert、update和delete等,才会变得有意义。拥有CONNECT role的用户还能够创建表、视图、序列(sequence)、簇(cluster)、同义词(synonym )、会话(session)和与其他数据库的链(link)。
- RESOURCE Role(资源角色):更可靠和正式的数据库用户可以授予RESOURCE role。RESOURCE提供给用户另外的权限以创建他们自己的表、序列、过程(procedure)、触发器(trigger)、索引(index)和簇(cluster)。
- DBA Role(数据库管理员角色):DBA role拥有所有的系统权限—-包括无限制的空间限额和给其他用户授予各种权限的能力。SYSTEM由DBA用户拥有。
下面介绍一些DBA经常使用的典型权限。
- grant(授权)命令
下面对刚才创建的用户user01授权,命令如下:
grant connect, resource to test;
具体的有:
grant create session to epm_spark;
赋予 create session 的权限,这样 epm_spark 用户就能成功登陆数据库
grant create table to epm_spark;
赋予 create table 的权限,这样 epm_spark 用户就能在数据库创建表
grant unlimited tablespace to epm_spark;
赋予 unlimited tablespace 的权限,这样 epm_spark 用户就有使用表空间的权限。
赋予了用户上述几个权限,用户就拥有了创建表的权限,由于表是用户 epm_spark 的,相应的他就拥有了对创建的表的增删查改的权限了
grant connect to epm_spark;
赋予 connect 的权限,授予最终用户的典型权利,这样 epm_spark 用户就能建立会话、修改回话、建立数据库链接等
grant resource to epm_spark;
赋予 resource 的权限,授予开发人员的,这样 epm_spark 用户就可以建表、建立聚簇、建立过程、建立序列等
- revoke(撤消)权限
已授予的权限可以撤消。例如撤消(1)中的授权,命令如下:
revoke connect, resource from test;
一个具有DBA角色的用户可以撤消任何别的用户甚至别的DBA的CONNECT、RESOURCE 和DBA的其他权限。当然,这样是很危险的,因此,除非真正需要,DBA权限不应随便授予那些不是很重要的一般用户。
撤消一个用户的所有权限,并不意味着从Oracle中删除了这个用户,也不会破坏用户创建的任何表;只是简单禁止其对这些表的访问。其他要访问这些表的用户可以象以前那样地访问这些表。
二、创建角色
除了前面讲到的三种系统角色—-CONNECT、RESOURCE和DBA,用户还可以在Oracle创建自己的role。用户创建的role可以由表或系统权限或两者的组合构成。为了创建role,用户必须具有CREATE ROLE系统权限。下面给出一个create role命令的实例:
create role STUDENT;
这条命令创建了一个名为STUDENT的role。
一旦创建了一个role,用户就可以给他授权。给role授权的grant命令的语法与对用户授权的语法相同。在给role授权时,在grant命令的to子句中要使用role的名称,如下所示:
grant select on CLASS to STUDENT;
现在,拥有STUDENT角色的所有用户都具有对CLASS表的select权限。
三、删除角色
要删除角色,可以使用drop role命令,如下所示:
drop role STUDENT;
指定的role连同与之相关的权限将从数据库中全部删除。
其它
1.查看所有用户:
select * from dba_users;
select * from all_users;
select * from user_users;
2.查看用户或角色系统权限:
select * from dba_sys_privs;
select * from user_sys_privs;
3.查看用户对象权限:
select * from dba_tab_privs;
select * from all_tab_privs;
select * from user_tab_privs;
4.查看所有角色:
select * from dba_roles;
5.查看用户或角色所拥有的角色:
select * from dba_role_privs;
select * from user_role_privs;