您的位置:首页 > 数据库 > Oracle

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

2017-04-24 09:28 204 查看
知识点的梳理:

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 用户名;<
4000
/span>
示例:将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_made和user_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";

sysoper和sysdba权限

用户使用conn进行连接时,可以通过as设置sysdoper或sysdba,它们分别对应两种不同的权限:

sysoper系统权限:
执行startup和shutdown操作;
执行alter datebase open|mount|backup;
archivelog和recovery;
create spfile;
restricted session权限;

sysdba系统权限:
create database;
alter tablespace begin/end backup;
recover database until;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Oracle