数据库角色、用户、授权总结(详细)

总述

每个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,因此有四种组合状态。

五种基本状态可分为三类:正常状态、锁定状态、密码过期状态。其中

  1. OPEN状态表示用户处于正常状态;
  2. LOCKED和LOCKED(TIMED)表示用户被锁定状态

用户被锁定有两种:

  • LOCKED:是DBA显式的通过SQL语句对用户进行锁定,见下述语句:
alter user [username] account lock
  • LOCKED(TIMED):这一种是被动的锁定,默认情况下如果密码输入错误超过10次则被动锁定。
  1. 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。

  1. CONNECT Role(连接角色):临时用户,特别是那些不需要建表的用户,通常只赋予他们CONNECTrole。CONNECT是使用Oracle的简单权限,这种权限只有在对其他用户的表有访问权时,包括select、insert、update和delete等,才会变得有意义。拥有CONNECT role的用户还能够创建表、视图、序列(sequence)、簇(cluster)、同义词(synonym )、会话(session)和与其他数据库的链(link)。
  2. RESOURCE Role(资源角色):更可靠和正式的数据库用户可以授予RESOURCE role。RESOURCE提供给用户另外的权限以创建他们自己的表、序列、过程(procedure)、触发器(trigger)、索引(index)和簇(cluster)。
  3. DBA Role(数据库管理员角色):DBA role拥有所有的系统权限—-包括无限制的空间限额和给其他用户授予各种权限的能力。SYSTEM由DBA用户拥有。

下面介绍一些DBA经常使用的典型权限。

  1. 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 用户就可以建表、建立聚簇、建立过程、建立序列等

  1. 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;

参考文献:
创建新用户,grant授权,角色,建表
Oracle数据库查看用户状态

    原文作者:data大柳
    原文地址: https://blog.csdn.net/yawei_liu1688/article/details/108335599
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞