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

Oracle12C--角色(二十二)

2017-04-24 09:34 232 查看
知识点的梳理:
12c,在CDB下创建的角色,也要使用"C##"开头;
多个权限可以通过角色统一的管理,一个角色会包含若干个权限;

为了方便用户授权操作,可以直接利用connect,resource两个角色进行授权;
  

角色是啥?
角色是一组相关权限的集合(可以是系统权限,也可以是对象权限),可通过一个角色来维护多个具有相同权限的用户;

创建角色
创建角色可以通过DBA或具有相应create role权限的用户来完成
语法:

create role 角色名称
[not identified | identified by 密码];

not identified(默认):不需要任何的口令标记;
identified by 密码:创建角色的时候同时设置密码,该密码主要用在角色激活时使用;

示例:创建一个普通的角色

CREATE ROLE c##mldn_role_a ;

创建一个名为c##mldn_role_a的角色,该角色采用默认设置

示例:创建一个带有密码的角色

CREATE ROLE c##mldn_role_b IDENTIFIED BY hellojava ;

创建角色时设置的密码是在角色启用时使用的,可通过如下语句试验:

禁用当前会话中的所有角色

SET ROLE NONE ;

 启用当前会话中的所有角色

SET ROLE ALL ;

 启用c##mldn_role_b角色,此角色存在密码

SET ROLE c##mldn_role_b IDENTIFIED BY hellojava ;

示例:通过dba_roles数据字典查看创建的角色:

SELECT *

FROM dba_roles

WHERE role IN ('C##MLDN_ROLE_A','C##MLDN_ROLE_B');



角色授权
角色创建完成后,需要为角色授权
示例:为c##mldn_role_a角色授权

GRANT CREATE SESSION , CREATE TABLE , CREATE VIEW , CREATE SEQUENCE TO c##mldn_role_a ;

为c##mldn_role_a授予4个权限,保证c##mldn_role_a角色下的所有管理员具备创建基本数据库对象的能力

示例:为c##mldn_role_b角色授权

GRANT CREATE SESSION , CREATE ANY TABLE , INSERT ANY TABLE TO c##mldn_role_b ;

示例:查询role_sys_privs数据字典,查看两个角色的权限信息

SELECT *

FROM role_sys_privs

WHERE role IN ('C##MLDN_ROLE_A' , 'C##MLDN_ROLE_B')

ORDER BY role ;



为用户授予角色
将c##mldn_role_a的角色授予c##mldnuser用户

GRANT c##mldn_role_a TO c##mldnuser ;

将c##mldn_role_a和c##mldn_role_b的角色授予c##mldnjava用户

GRANT c##mldn_role_a ,c##mldn_role_b TO c##mldnjava ;

与授权操作一样,可以将一个或多个角色授予用户

查询c##mldnuser用户权限

CONN c##mldnuser/hellojava

COL privilege FOR A30 ;

SELECT * FROM session_privs ;

修改角色及回收角色权限

角色密码的设置
设置密码语法:alter role
角色名称 [not identified|identified by
密码];

示例:将c##mldn_role_a的角色密码设置为hellomldn
ALTER ROLE c##mldn_role_a IDENTIFIED BY hellomldn ;

示例2:取消c##mldn_role_b角色的密码
ALTER ROLE c##mldn_role_b NOT IDENTIFIED ;

通过角色回收权限

示例:将CREATE SESSION的权限从c##mldn_role_a角色中回收
REVOKE CREATE SESSION FROM c##mldn_role_a ;

示例:查询c##mldn_role_a角色中的权限信息

SELECT *

FROM role_sys_privs

WHERE role='C##MLDN_ROLE_A'

ORDER BY role ;

删除角色

语法:drop role
角色名称;
角色被删除后,其拥有此角色的用户权限也将一起被删除;

示例:删除c##mldn_role_b角色
DROP ROLE c##mldn_role_b ;

预定义角色
Oracle预定义角色

No.

预定义角色

描述

1

exp_full_database

导出数据库权限

2

imp_full_database

导入数据库权限

3

select_catalog_role

查询数据字典权限

4

execute_catalog_role

数据字典上的执行权限

5

delete_catalog_role

数据字典上的删除权限

6

dba

系统管理的相关权限

7

connect

授予用户最典型的权限

8

resource

授予开发人员的权限

connect,resource
它们是Oracle中两个最大的角色
示例:通过sys用户查询CONNECT和RESROUCE角色所拥有的权限

SELECT *

FROM role_sys_privs

WHERE role IN ('CONNECT' , 'RESOURCE')

ORDER BY role ;

查询后发现这两个角色具备常用的权限,所以在创建新用户后,最简单的做法就是将这两个角色直接授予用户
示例:将CONNECT、RESOURCE角色授予c##mldnuser用户

GRANT CONNECT , RESOURCE TO c##mldnuser ;

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Oracle