Oracle-用户、权限与角色

章节目标

  • 通过本章学习,学员应达到如下目标:
    • 理解用户概念;
    • 掌握创建用户方法;
    • 理解权限概念;
    • 理解如何进行权限分配和收回;
    • 理解角色概念;
    • 理解如何通过角色进行权限分配;

本章内容

用户

  • 用户
    • 用户是数据库的使用者。
    • 用户一般是由DBA来创建和维护的,创建用户后,用户不可以执行任何Oracle操作(包括建立会话),只有赋予用户相关的权限,用户才能执行权限允许范围内的操作。
  • 创建用户
    • 语法
CREATE USER user                           
IDENTIFIED BY   password
[default tablespace 默认表空间名 
temp tablespace 临时表空间名 quota 配额大小 on 表空间名]
  • deafult tablespace:用户的默认表空间;

  • temporary tablespace: 用户的临时表空间;

  • quota on :表示允许该用户在表空间中使用的空间大小,可以设置多个不同的表空间;

  • 执行该语句的用户需要有“创建用户”的权限,一般为系统的DBA用户。

  • 例:以SYSTEM用户登录,创建test用户

CREATE USER test IDENTIFIED BY test;
  • 用户被创建后,没有任何权限,包括登录。用户如果想登录,至少需要有“CREATE SESSION”的权限
GRANT CREATE SESSION TO test;
  • 例:以test用户身份建表
CREATE TABLE emp1(id NUMBER,
            name VARCHAR2(20),
            sal NUMBER);
返回权限不足。
  • 对新建用户,默认情况没有创建对象的权限,用户要想创建对象,需要有对象的创建权限CREATE TABLE、CREATE SEQUENCE等

  • 赋予test用户创建表的权限

Conn system/oracle;
GRANT CREATE TABLE TO test;
  • 例:test用户身份执行建表操作
CREATE TABLE emp1(id NUMBER,name VARCHAR2(20),sal NUMBER);
返回错误“表空间USERS中无权限”
  • 修改配额
ALTER USER 用户名
QUOTA 10m ON 表空间名; 
  • 例:以SYSTEM用户身份执行,给test分配USERS表空间的10M配额
ALTER USER test
QUOTA 10m ON users;
  • 例:以test用户身份执行建表命令
CREATE TABLE emp1(id NUMBER,name VARCHAR2(20),sal NUMBER);
表已创建。
  • 修改密码
ALTER USER user IDENTIFIED BY 新密码;
  • DBA可以修改任何普通用户的密码,而不需要知道用户的旧密码。

  • 在sqlplus下执行password命令来修改登录用户自己的密码,提示会输入旧密码和新密码。

  • 用户状态

  • OPEN:正常状态,为用户帐号初始创建后状态。

  • EXPIRED:密码过期状态,用户下次登录的时候需要修改密码;

  • LOCKED:锁定状态,不能执行任何Oracle相关操作

  • 状态管理语句

ALTER USER user PASSWORD EXPIRE;--密码过期
ALTER USER user ACCOUNT LOCK[UNLOCK];--帐户锁定/解锁
  • 删除用户
DROP USER user [CASCADE]
  • CASCADE表示系统先自动删除该用户下的所有对象,然后再删除该用户的定义。
  • 已经登录的用户是不允许被删除的。

权限

  • 权限概述

    • 数据库用户要想在数据库上执行任何操作,必须首先要拥有权限,包括建立会话。
  • 权限分类

    • 系统权限:允许用户在数据库中执行指定的行为,一般可以理解成比较通用的一类权限。
    • 对象权限:允许用户访问和操作一个指定的对象,该对象是一个确切存储在数据库中的命名对象。
  • 系统特权

    • SYSOPER:启动停止数据库,恢复数据库等;
    • SYSDBA:所有SYSOPER功能的管理权限;创建数据库等权限。

系统权限

  • 授予系统权限
GRANT sys_priv_list TO user_list [WITH ADMIN OPTION]
  • sys_priv_list:系统特权列表,由逗号分隔;

  • user_list: 用户列表,由逗号分隔;

  • WITH ADMIN OPTION:允许权限的接受者再把此特权授予其他用户。

  • 例:授予test用户CREATE SESSION权限,并且允许test把该权限授予别人。

GRANT create session TO test WITH ADMIN OPTION;
  • 回收系统权限
REVOKE sys_priv_list FROM user_list ;
  • 注意:使用 WITH ADMIN OPTION 选项授予的权限,在回收时候的回收策略如下:
    • 如果A授予权限给B,B又把该权限赋予给C ,如果此时A把权限从B处收回,那么B给予出去的权限是继续保留,即C继续拥有该权限。

对象权限

  • 对象权限
    • 是在指定的表、视图、序列或过程上执行指定动作的权限或权利。
    • 每种对象都有一个特殊的可授予的权限集。
    • 对象的所有者自动拥有该对象的所有权限,并且能够把权限授予其它用户。
  • 授予对象权限
GRANT object_priv | [ALL PRIVILEGES ]|[(column)]
ON      [schema.]object
TO      {user|PUBLIC} [WITH GRANT OPTION];
  • object_priv:是将被授予的对象权限;

  • ALL PRIVILEGES:指定对象的所有权限;

  • column:在授予INSERT、REFERENCES或UPDATE权限时可以指定列;

  • ON object:指定的对象名;

  • TO user:指定权限被授予谁;

  • TO PUBLIC:授予权限给所有用户;

  • WITH GRANT OPTION:允许被授予权限的用户再授予对象权限给其它用户;

  • SCHEMA:指定用户名,如果省略,默认为当前用户;

  • 例:把员工表的查询权限给Test用户;

GRANT select on employees To test;
  • 回收对象权限
REVOKE 对象权限种类 ON 对象名 FROM user;
  • 对象的权限会级联回收。

角色

  • 角色(ROLE)

    • 角色是权限的集合。
  • 角色作用

    • 简化权限管理。

创建角色

  • 创建角色
CREATE ROLE role;
  • 例:以SYSTEM的用户身份建立测试角色tr
CREATE ROLE tr;

为角色授权

  • 为角色授予权限
GRANT 权限列表 TO 角色列表;
  • 例:给角色tr授予create sequence的权限
GRANT create sequence TO tr;

通过角色为用户授权

  • 通过角色为用户授权
GRANT 角色列表 To 用户列表;
  • 例:通过角色为用户test授权
GRANT tr TO test;
  • 以test用户登录,验证是否已拥有相关权限
SELECT * FROM session_privs;

通过角色从用户收回权限

  • 通过角色从用户收回权限
REVOKE 角色 FROM 用户;
  • 从角色收回权限
REVOKE 权限 FROM 角色;
  • 删除角色
DROP ROLE 角色;

预定义角色

  • 预定义角色
    • Oracle数据库预先定义好的角色,通常包括:
    • DBA角色:该角色中的权限通常赋给数据库管理员;
    • CONNECT角色、RESOURCE角色;
    • CONNECT和RESOURCE是相对较安全的角色,角色中包含的权限仅限于用户自己的对象范围,因此,经常使用CONNECT和RESOURCE来简化权限管理。
  • 查看DBA角色中包含的系统权限
SELECT * FROM DBA_SYS_PRIVS
WHERE GRANTEE='DBA’;
  • 查看CONNECT角色中包含的系统权限
SELECT * FROM DBA_SYS_PRIVS
WHERE GRANTEE='CONNECT‘;
  • 查看RESOURCE角色中包含的系统权限
SELECT * FROM DBA_SYS_PRIVS
WHERE GRANTEE='RESOURCE‘; 

PUBLIC

  • PUBLIC
    • PUBLIC对象既不是用户,也不是角色,代表公众,公开;PUBLIC中拥有的所有权限,所有数据库的用户都会自动拥有;为安全起见,PUBLIC中不应该拥有任何权限。

    • 例:给PUBLIC赋予create session 权限

GRANT create session TO public;
  • 执行上述语句后,所有的用户都会自动从public中获得create session的权限。

本章重点总结

  • 用户的管理
  • 权限的管理
  • 角色的管理

分割线


博主为咯学编程:父母不同意学编程,现已断绝关系;恋人不同意学编程,现已分手;亲戚不同意学编程,现已断绝来往;老板不同意学编程,现已失业三十年。。。。。。如果此博文有帮到你欢迎打赏,金额不限。。。

你可能感兴趣的:(Oracle-用户、权限与角色)