Oracle12C--角色(二十二)

知识点的梳理:

  • 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 ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值