博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle12C多租户管理用户、角色、权限
阅读量:7110 次
发布时间:2019-06-28

本文共 2182 字,大约阅读时间需要 7 分钟。

在Oracle12C中,用户权限的管理相对传统的 Oracle 单数据库环境稍有不同。在多租户环境中有两种类型的用户。

①:共同用户(Common User): 该用户存在所有容器 (根和所有的 Pdb) 中。

②:本地用户(Local User): 用户只有在特定的 PDB 中存在。同样的用户名中可以存在多个Pdb中创建,但它们之间没有关系。

同样,有两种类型的角色:如

①:共同角色(Common Role): 该角色在所有容器 (根和所有的 Pdb) 中。

②:本地角色(Local Role): 该角色只存在于特定的 PDB。可以在多个 Pdb中创建相同的角色名称,但它们之间没有关系。

一些 DDL 语句有扩充,以使他们能够定向到当前容器还是所有容器的CONTAINER子句。它的使用将在以下各节中进行演示。

注意:

   在 cdb 中创建公共用户的时候, pdbs 中也会创建相同用户。若CDB 下 GRANT 命令赋权,如果赋权时未指定container=all,则赋权只在CDB中生效,并不会在PDB中生效,这个用户要能够访问PDB,需要切换到 pdb 再赋权。。若赋权时指定 container=all,则赋权在CDB中生效,也在PDB中生效。

1、在CDB中,给用户赋权时未指定container=all:

SQL> show con_name;

CON_NAME

------------------------------

CDB$ROOT

SQL> create user c##zhang identified by zhang;

SQL> grant create session to c##zhang;  --赋权给用户,这个时候开启另一个窗口使用该用户登录pdb的时候是没有权限的,如下:

[oracle@localhost ~]$ sqlplus c##zhang/zhang@192.168.2.100/testpdb

SQL*Plus: Release 12.2.0.1.0 Production on Tue Jul 18 15:15:51 2017

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

ERROR:

ORA-01045: user C##ZHANG lacks CREATE SESSION privilege; logon denied

----切换到pdb中,给用户赋权就可以登录了:

SQL> alter session set container=testpdb;

SQL> grant create session to c##zhang;

2、在CDB中,给用户赋权时指定container=all:

SQL> create user c##zhang1 identified by zhang;

SQL> grant create session to c##zhang1 container=all;

3、创建公共角色:

SQL> show con_name

CON_NAME

------------------------------

CDB$ROOT      

SQL> create role c##role;   ---创建角色

SQL> grant select on dba_objects to c##role container=all;  --给这个角色加权限

SQL> grant c##role to c##zhang1 container=all;  --将角色赋给公共用户

SQL> alter session set container=testpdb;  ---切换到pdb

SQL> grant c##role to admin;   ---也可以把这个角色赋予pdb中的本地用户

4、本地角色

  本地角色是以类似的方式到 pre-12 c 数据库创建的。每个 PDB 可以具有与匹配的名称,因为当地的作用范围仅限于当前 PDB 的角色。

必须满足以下条件。

条件:

①:必须连接到具有CREATE ROLE权限的用户。

②:如果您连接到公共用户,容器必须设置为本地 PDB。

③:角色名称为本地角色不必须与"C##"或"c##"作为前缀。

④:角色名称必须是唯一在 PDB 内。

⑤:本地角色可以赋权给公共用户(作用范围局限于pdb内操作,不影响CDB权限)或者本地用户。如:

SQL> show con_name;

CON_NAME

------------------------------

TESTPDB

SQL> create role pdb_role;    ---创建角色

SQL> grant select on dba_tables to pdb_role;  --给角色加权限

SQL> grant pdb_role to c##zhang;  --将角色赋予公共用户

SQL> grant pdb_role to admin;   ---将角色赋予本地用户

本文转自一个笨小孩51CTO博客,原文链接: http://blog.51cto.com/fengfeng688/1949774,如需转载请自行联系原作者
你可能感兴趣的文章
SpringBoot入门八,添加定时任务
查看>>
我的友情链接
查看>>
SpringMVC springMVC的拦截器
查看>>
Zabbix的安装部署
查看>>
php把二维数组转化为字符串
查看>>
目录与文件属性——《Unix/Linux编程实践教程》读书笔记
查看>>
5年麦肯锡工作经验的GG总结的Word骨灰级操作大全
查看>>
Xcode下载
查看>>
python operator计算模块
查看>>
SVN版本冲突解决详解
查看>>
nginx rewrite规则
查看>>
浅谈javascript:void(0)的含义
查看>>
IOS学习动画一之 UIKit动画
查看>>
tomcat编码乱码问题
查看>>
Spring中的自动装配(AutoWire)
查看>>
016,spring boot集成Mybatis之多数据源
查看>>
关于JOptionPane的一些东西
查看>>
STM32学习笔记2——RC522
查看>>
Centos环境下的DNS智能解析
查看>>
文件扩展名(后缀)与MINE-type的对照关系
查看>>