Oracle12.2 多租户环境下的授权管理

题记:在多租户环境中,权限可以全局授予整个CDB,一个应用容器数据库(application container),或者单个的PDB。在多租户环境下,往往牵一发而动全身,因此合理授权就显得格外重要。通过本文我们首先来认识多租户中的全局授权和本地授权。

概述
在多租户环境下,common user和local user之间可以互相授权。他们本身的权限既不属于公共权限也不属于本地权限。那么他们的权限如何起作用,这取决于权限是被全局授予还是本地授予的。

关于公用用户common user和本地用户local user的内容,请查看:

Oracle 12c多租户特性详解:全局用户与本地用户的原理与维护

权限生效满足以下规则:

全局授予的权限
1、被全局授予的权限能够应用于现有和将来创建的container中。

2、只有common 用户才能被授予公共权限,并且需要授权者也是common用户。

3、common 用户可以给另一个common 用户或者common 角色进行授权。

4、在进行授权的时候,授权者必须连接到root 容器,并且在授权语句中指定 CONTAINER=ALL。

5、系统权限和对象权限都可以被全局授予。

6、当一个common用户连接或者转换到现有的一个容器中时,该用户的权限除了受到当前被授予权限的限制,还受到所在容器具有的权限的限制。

7、避免全局地授予public权限。

本地授予的权限
1、本地授予的权限只能在当前的container中起作用,哪怕是对于root 容器,如果权限被本地授予,只能在root中起作用。

2、common 用户和local 用户都可以进行本地授权。

3、授权者必须连接到某一个container中,并在授权语句中指定CONTAINER=CURRENT。

4、common用户和local用户都可以对common或local的角色授予权限。

5、任何用户都可以对其他的用户、角色(包含public角色)进行本地授权。

全局授予系统权限
用户只能在被授权的PDB内使用对应的系统权限。例如,如果用户A在PDB B中被授予某种权限,该权限只有当用户A连接到PDB B中时才会生效。

在满足下列条件的情况下,系统权限可以被root及所有现有的和新创建的PDB中生效:

1、授权者属于common 用户,而被授权者是common用户、common角色或者public 角色,不要全局地对public角色授予系统权限,这会影响到所有能访问到的用户。

2、系统权限的授予者在进行全局授权的时候包含了ADMIN OPTION的选项。

3、在授权语句中包含了CONTAINER=ALL 的选项。

下面的例子显示了如何全局授权给公用用户c##hr_admin。

CONNECT SYSTEM
Enter password: password Connected.

GRANT CREATE ANY TABLE TO c##hr_admin CONTAINER=ALL;

全局授予对象权限
公共对象上的对象权限对该对象以及此对象上的所有关联链接生效。如果满足下面的一些要求,这些链接包括所有元数据链接,数据链接(以前称为对象链接)或与其相关联的扩展数据链接(属于该容器的所有PDB(包括新创建的PDB))。

1、对象特权授予者是公用用户,而被授权者是公用用户,公用角色或PUBLIC角色。

2、对象特权授权者拥有全局授予的GRANT权限。

3、GRANT语句包含CONTAINER = ALL子句。

以下示例显示如何向公用用户c## hr_admin授予对象特权,以便他可以从CDB根目录中的任何与之相关联的PDB中的DBA_PDBS视图进行select查询。

CONNECT SYSTEM
Enter password: password Connected.

GRANT SELECT ON DBA_OBJECTS TO c##hr_admin
CONTAINER=ALL;

授予或回收PDB的访问权限
可以在多租户环境中授予和撤销PDB访问权限。

要在多租户环境中授予权限,应该在GRANT或REVOKE语句中包含CONTAINER子句。

将CONTAINER设置为ALL,将特权应用于所有现有和新创建的容器; 将其设置为CURRENT仅将权限应用于本地容器。 省略CONTAINER子句将特权应用于本地容器。 如果从root发出GRANT语句,并忽略CONTAINER子句,则该特权将在本地PDB应用。

下面的语句是如何通用授予公用用户c## hr_admin的CREATE TABLE权限,以便此用户可以在所有现有和新创建的容器中使用此权限。

CONNECT SYSTEM
Enter password: password Connected.

GRANT CREATE TABLE TO c##hr_admin CONTAINER=ALL;

启用公用用户查看CONTAINER_DATA对象信息
公用用户可以查看root中的CONTAINER_DATA对象或特定PDB中的数据。


连接到root时查看有关root,CDB和PDB的数据

当公用用户执行查询时,可以限制X $表和V $,GV $和CDB_ *视图的视图信息。X$表和这些视图包含有关应用程序root及其关联应用程序PDB的信息,或者如果连接到CDB root,则是整个CDB。

当不想全局其他PDB的敏感信息时,限制此信息很有用。 要启用此功能,Oracle数据库将这些表和视图提供为容器数据对象。 可以通过查询USER_ | DBA_ | ALL_VIEWS | TABLES字典视图的TABLE_NAME,VIEW_NAME和CONTAINER_DATA列来查找特定表或视图是否为容器数据对象。

要查找有关默认(用户级别)和特定于对象的CONTAINER_DATA属性的信息,请查询CDB_CONTAINER_DATA数据字典视图。

例如:

启用公用用户查看指定PDB的信息
可以通过调整用户的CONTAINER_DATA属性来启用公用用户访问与特定PDB相关的数据。(要使公用用户能够访问有关特定PDB的数据,请在root中发出ALTER USER语句。)

以下示例显示如何发出ALTER USER语句以启用通用用户c##hr_admin在V $ SESSION视图中查看与CDB $ ROOT,SALES_PDB和HRPDB容器相关的信息(假设此用户可以查询该视图)。

CONNECT SYSTEM
Enter password: password Connected.

ALTER USER c##hr_admin
SET CONTAINER_DATA = (CDB$ROOT, SALESPDB, HRPDB)
FOR V$SESSION CONTAINER=CURRENT;

在上面的示例中:

  • SET CONTAINER_DATA列出容器,有关用户可以访问的数据。
  • FOR  V$SESSION指定CONTAINER_DATA动态视图,公用用户c## hr_admin将可以做select查询。
  • 必须指定CONTAINER = CURRENT,因为当连接到根时,CONTAINER = ALL是ALTER USER语句的默认值,但CONTAINER_DATA属性的修改必须限制为root。

如果要启用用户c##hr_admin来查看与该用户可访问的所有CONTAINER_DATA对象中的CDB$ROOT,SALES_PDB,HR_PDB容器相关的信息,请忽略FOR V$SESSION。 例如:

ALTER USER c##hr_admin
SET CONTAINER_DATA = (CDB$ROOT, SALESPDB, HRPDB)
CONTAINER=CURRENT;

文章转自数据和云公众号,原文链接

时间: 2024-11-05 06:26:29

Oracle12.2 多租户环境下的授权管理的相关文章

如何在多租户环境下使用数据库的闪回功能

编辑手记:对于数据库的闪回功能,可能大家都不陌生,那么如何在多租户环境下使用该功能,如果关闭了表空间的闪回功能,会给数据库带来哪些影响?我们一起来学习. 本文来自周四大讲堂内容整理. 我们先说一下Flashback这个单词,我们大家常称它为闪回,可能有的人称它为回闪.Flashback 是oracle 9i 版本开始提供的一项特性,利用oracle查询多版本一致的特点,实现从回滚段中读取一定的时间内在表中操作过的数据. Flashback Database是Oracle10g的新增功能,在启动F

详解Oracle RAC 环境下的连接管理

这篇文章详细介绍了Oracle RAC环境下的连接管理,分别介绍了什么是 Connect Time Load Balancing.Runtime Connection Load Balancing.Connect Time Connection Failover 和 Runtime Connection Failover,以及里面所涉及到的 TAF.ONS.FCF.FAN.LBA 等诸多知识点.本文主要是针对 Oracle RAC 11gR2 环境下的连接管理,但同时也会对比说明一下 Oracl

视角 | 多容器环境下的日志管理难?有人做起了这个生意

本文讲的是视角 | 多容器环境下的日志管理难?有人做起了这个生意,[编者的话]本文介绍了一个新的工具SPM,它用于解决在多容器环境下日志管理所遇到的问题,同时它整合了多种功能,避免了以往需要安装多种工具的麻烦,配合Kibana的展示功能,使得该工具还是值得一试的. 在微服务流行的今天,日志路由和解析的传统静态配置方法已经有点吃力:事实上,它还带来了额外的复杂度和资源消耗.相对的,这使得不能运行在单机上的微服务的数量降低了. 在SPM for Docker整合的日志管理功能中,对微服务进行了支持,

云计算环境下煤矿应急管理关键技术研究

云计算环境下煤矿应急管理关键技术研究 西安科技大学  马莉 分析煤矿应急管理海量数据的来源及在传统模式下数据存储与处理的局限性,设计煤矿应急云平台中海量数据存储及分析的实现方法,重点阐述黄陵矿业集团下属煤矿生产作业环境参数异动模型及其在煤矿应急云平台中的实现方法,并对该矿某段周期内的瓦斯数据进行异动判定的分析,从而为管理人员的决策行为提供科学依据.最后通过对煤矿应急云平台数据处理性能的实验测试,验证了本文基于Hadoop开源分布式生态系统搭建的煤矿应急云平台相对于传统煤矿应急信息系统具有良好的数

负载平衡环境下的SESSION管理

session|session 创建交互式web 页面时最大的挑战之一是维持用户的状态,一个站点也许想记住你是谁.在n页之前你点击了什么.在这最后一次做了些什么.现在马上要向你显示什么.实现这些功能的途径有许多,如查询字符串.提交表单或cookies,最强大的一种是ASP的Session 对象.  原文出处:http://www.asptoday.com/articles/20000118.htm      当用户第一次到达某站点,他/她被给予一个HTTP cookie格式的SessionID

云计算环境下数据中心管理运行探讨

编者按:管理是IT系统良性运行的重要保障,不同的IT设备都有自己的管理系统.特别是大规模数据中心,必须通过集中的管理系统来运行管理计算.存储.网络等设备,以能够快速响应和处理数据中心的业务变更.异常事件.持续优化.在<IP领航>往期的文章中曾多次聚焦"数据中心的管理",但大都侧重于"以网络为核心"的管理,本文将把视线放大到整个云计算环境下的数据中心,对三种运行管理模型逐一对比分析. 传统数据中心,基础架构层面设备之间通过标准化连接和协议互通,保证了计算.

vmi:scm环境下的库存管理方法

一.革新传统库存控制方法的必要性 近年来,供应链管理(Supply Chain Management.简称SCM)在国内外日益受到人们的关注和重视,许多物流企业也开始重视探讨这种新的管理理念在库存管理中的应用.所谓供应链管理是以各种技术尤其是信息技术为依托,在供应链各节点间建立一种战略伙伴关系,实现从原材料供应商.制造商.分销商.零售商直到最终用户的商流.物流.信息流.资金流在整个供应链上的畅通无阻的流动,最终达到双赢甚至是多赢目的的过程. 在供应链管理环境下,供应链各个环节的活动都应该是同步进

网络营销环境下的需要细分客户

1.网站客户细分的重要性 由于网络开放性以及不受物理地址局限的优点,使得一个购物类电子商务网站的潜在客户非常的广泛,全世界范围内所有这个网站的访问者都是企业的潜在客户.但据http://www.aliyun.com/zixun/aggregation/32268.html">调查显示,目前网络营销的一个基本现状是:95%以上的访问者(潜在客户)在浏览企业网站过后,都悄然离开而且并没有主动与企业联系,也就是说:电子商务网站每天都在流失95%的网络商机-这是今天传统网络营销的尴尬,有了庞大的潜

云存储环境下的副本创建策略的研究

云存储环境下的副本创建策略的研究 海南大学  叶祥龙 随着互联网技术的不断发展,尤其在最近几年,数据呈现出爆炸式的发展,传统的数据处理方式已经无法满足人们的需要.云存储的出现给人们带来了福音,可以很好的满足用户数据处理需求.然而,云存储的出现也带来了系统容错性.访问效率.数据可靠性等问题.为了解决这些问题,论文为云存储引入了副本技术.副本技术的引入,也给系统带来了副本一致性维护.负载均衡等问题.因此,对云存储环境下的副本创建策略的研究是必要而有意义的.论文主要开展了以下研究工作:首先,详细介绍了