Oracle12C--权限管理(二十一)

知识点的梳理:

  • sql语句针对权限的控制提供了两个操作命令:GRANT(授权)与REVOKE(回收权限)

      

  • 说明
    • 用户创建完成后是没有权限的,所以无法使用,要为此用户授权。Oracle的权限分为两种:
      • 系统权限:数据库资源操作的权限,例如:创建数据表,索引等权限;
      • 对象权限:维护数据库中对象的能力,即:由一个用户操作另外一个用户的对象;
    • 所有权限应由DBA进行控制
  • 系统权限
    • 该权限是资源操作权限,应由DBA统一分配;
    • 为用户授权语法:

grant 权限,....
to [用户名,....|角色,....|public]
[with admin option];

权限:主要指的是各个系统权限;
to:设置授予权限的用户,角色或者是使用public将此权限设置为公共权限;
with admin option:将用户授予的权限继续授予其他用户

  • 示例:为c##mldnuser用户授予CREATE SESSION权限

GRANT CREATE SESSION TO c##mldnuser ;

此用户被授权后,可以进行登录;

注意:每个连接到数据库上的用户都通过一个session进行表示,如果某个用户缺少了创建session的权限,就无法登录。在无授权下进行登录,就会出现:"ORA-01045:user xxxxx lacks create session privilege;logon denied"的错误提示信息;

  • 示例:为c##mldnuser用户授权

GRANT CREATE TABLE , CREATE SEQUENCE , CREATE VIEW TO c##mldnuser WITH ADMIN OPTION ;

sql将三种权限授予c##mldnuser,同时WITH ADMIN OPTION子句,表示c##mldnuser用户可以将其权限授予其他用户

  • 示例:利用c##mldnuser用户登录,而后将创建表、以及创建序列的权限授予c##mldnjava用户

GRANT CREATE TABLE , CREATE SEQUENCE TO c##mldnjava ;

  • 示例:通过dba_sys_privs数据字典查看用户权限

SELECT *

FROM dba_sys_privs

WHERE grantee IN ('C##MLDNJAVA' , 'C##MLDNUSER')

ORDER BY grantee DESC ;

  • 撤销权限:
    • 语法:revoke 权限,.... from 用户名;
    • 示例:将c##mldnuser用户的CREATE VIEW、CREATE TABLE权限回收

REVOKE CREATE TABLE , CREATE VIEW FROM c##mldnuser ;

  • 如果一个用户的权限,是通过其他用户指定的,则可以由其他用户回收该用户的权限
    • 示例:上面的示例中,c##mldnuser将权限指定给了c##mldnjava,现在通过c##mldnuser用户回收c##mldnjava用户的CREATE SEQUENCE权限

REVOKE CREATE SEQUENCE FROM c##mldnjava ;

  • 对象权限
    • 对象权限用于赋予用户访问其他用户数据表的权利;
    • 语法:授予对象权限

grant 对象 |all [(,...)]
on 对象
to [用户名|角色名|public]
[with grant option]

本语法解析:
对象权限:下表的权限标记,如果设置为
all表示具有所有对象权限;
on:要授予权限的对象名称:
to:将此权限授予的用户名称或角色名称,如果设置为public表示为公共权限;
with grant option:允许授权用户继续授权其他用户;

  • Oracle定义了8种对象权限

No.

对象权限

(table)

序列(Sequence)

视图(view)

子程序(Procedure)

1

查询(select)

  

2

增加(insert)

  

  

3

更新(update)

  

  

4

删除(delete)

  

  

5

执行(execute)

  

  

  

6

修改(alter)

  

7

索引(index)

  

  

8

关联(references)

  

  

  

  • 示例:为c##mldnuser用户授予c##scott用户dept表的查询以及增加权限

GRANT SELECT , INSERT ON c##scott.dept TO c##mldnuser ;

此时c##mldnuse具备了查询和插入 c##scott下的dept表的能力

  • 示例:将c##scott.dept数据表更新部门名称(dname)的权限授予c##mldnuser用户

GRANT UPDATE(dname) ON c##scott.dept TO c##mldnuser ;

sql只允许c##mldnuser更新c##scott.dept表的dname字段,其他字段均没有权限

  • 示例:查询当前登录用户下的所有对象权限

CONN c##mldnuser/hellojava

COL owner FOR A10 ;

COL table_name FOR A10 ;

COL grantor FOR A10 ;

COL privilege FOR A10 ;

SELECT * FROM user_tab_privs_recd ;

  • 示例:通过"user_col_privs_recd"数据字典,查询当前用户所具备的列的对象权限

COL owner FOR A10 ;

COL table_name FOR A10 ;

COL column_name FOR A15 ;

COL grantor FOR A10 ;

COL privilege FOR A10 ;

SELECT * FROM user_col_privs_recd ;

  • 示例:可以通过user_tab_privs_madeuser_col_privs_made数据字典查看某一个数据库对象分配出去了哪些权限;
  • 回收对象权限
    • 语法:

revoke [权限,...|all]
on 对象
from [用户,...|角色|public]

  • 示例:回收c##scott.dept上的相关权限

REVOKE SELECT , INSERT ON c##scott.dept FROM c##mldnuser ;

REVOKE UPDATE ON c##scott.dept FROM c##mldnuser ;

  • 注意:只能按照对象权限回收,不能按照列权限回收
    • 在授权时可以有这样的方式,update(dname);但在回收权限时,这种方式无效,只能以整个表的权限方式回收;
    • 回收时使用此语法,会提示错误:"ORA-01750:UPDATE/REFERENCES只能从整个表而不能按列REVOKE";
  • sysopersysdba权限
    • 用户使用conn进行连接时,可以通过as设置sysdopersysdba,它们分别对应两种不同的权限:
      • sysoper系统权限:
        • 执行startupshutdown操作;
        • 执行alter datebase open|mount|backup;
        • archivelogrecovery;
        • create spfile;
        • restricted session权限;
      • sysdba系统权限:
        • create database;
        • alter tablespace begin/end backup;
        • recover database until;

你可能感兴趣的:(Oracle,Oracle12c学习笔记)