如何创建Oracle Multitenant数据库用户账户

日期: 2019-07-01 作者:Brian Peasland翻译:邹铮 来源:TechTarget中国 英文

在大多数情况下,Oracle Multitenant数据库环境的用户和安全性基本与Oracle数据库保持一致。数据库管理员仍然可以创建用户帐户、分配角色和权限,并为各个数据库部署密码控制,就像在传统的Oracle系统中一样。

Oracle Database 12c提供了Oracle Multitenant架构,它将多租户容器数据库(CDB)与在其中运行的可插拔数据库(PDB)相结合,并包含应用程序使用的数据。PDB似乎是独立于应用程序及其用户的数据库,并且,它们在这个可选架构中也保持独立。现在Oracle 18c和19c也提供Oracle Multitenant架构。

当我们在可插拔数据库中创建用户时,它仅存在于该特定PDB中。对于在PDB中组合预定义用户权限集的角色,也是这样。如果另一个PDB对不同用户使用相同的角色名称,则每个角色仅适用于创建它的特定数据库。在Oracle术语中,这些称为本地用户或角色。

通用用户获得数据库完全访问权限通行证

Oracle Multitenant还支持通用用户,这些用户在CDB的根容器中创建,并且能够访问和管理它以及所有可插拔数据库,只要他们在每个PDB中获得适当的权限即可。

有些通用用户由甲骨文软件自动生成。例如,当创建CDB时,甲骨文的Database Configuration Assistant实用程序将提示你为SYS和SYSTEM用户提供密码,这两个管理帐户是在根容器级别设置,并通过连接的PDB传播。

在为本系列有关管理Oracle Multitenant数据库系统设置的测试平台环境中,具有正确权限的数据库管理员(DBA)可以作为SYSTEM用户连接到CDB $ ROOT根容器以及我在第一篇文章中添加到该架构的HR_PROD可插拔数据库,第一篇文章主要介绍如何创建容器数据库和PDB。

你还可以在Oracle Multitenant中创建自己的通用用户。除甲骨文提供的用户名外,所有通用用户名称必须以“c ##”或“C ##”作为前缀。你可以通过修改COMMON_USER_PREFIX数据库参数来更改它,但甲骨文建议DBA不要这样做。

应用程序很少会使用通用用户帐户。通常,那些需要连接到系统中的PDB以执行管理工作的DBA会使用通用用户。让我们看一下如何为CDB中的所有容器创建一个通用用户,并为其提供CREATE SESSION系统特权和DBA角色,以便它可以用于登录和管理HR_PROD和其他PDB。

这是我在甲骨文的SQL-Plus命令行界面中输入的代码,以及已完成操作的确认:

SQL> create user c##my_dba identified by Password1 container=all;

User created.

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

Grant succeeded.

SQL> grant dba to c##my_dba container=all;

Grant succeeded.

SQL> grant select any dictionary to c##my_dba container=all;

Grant succeeded.

SQL> alter user c##my_dba set container_data=all container=current;

User altered.

如上所示,我还授予了SELECT ANY DICTIONARY系统特权并更改了用户,因此它可以查看甲骨文数据字典中的所有容器数据,其中包含数据库模式对象定义、缺省列值、用户名和其他数据库信息。

Oracle Multitenant中的数据字典更改

为了使Oracle Multitenant正常运行,我们确实需要对数据字典进行一些更改以适应容器数据库及其PDB。在本系列最后的文章中,我们将讨论如何修改数据字典中的视图以支持甲骨文数据库系统中多个租户。

当甲骨文创建Multitenant架构时,它希望环境对用户和应用程序尽可能透明,这意味着数据字典视图应返回相同的结果,仿佛CDB中的容器不是多租户数据库的一部分那样。

如果你在PDB中,则ALL_、USER_和DBA_数据字典视图仅显示该特定数据库的信息。如果你在根容器中使用传统视图,则同样如此。例如,在下面的SQL-Plus代码部分中,单独的DBA_TABLES视图显示根容器中的表数和Oracle Multitenant数据库测试平台中的两个PDB。

SQL> alter session set container=cdb$root;

Session altered.

SQL> select count(*) From dba_tables;

COUNT(*)

———-

1888

SQL> alter session set container=hr_prod;

Session altered.

SQL> select count(*) From dba_tables;

COUNT(*)

———-

5490

SQL> alter session set container=firstpdb;

Session altered.

SQL> select count(*) From dba_tables;

COUNT(*)

———-

23862

扩展Multitenant数据库视图

CDB_视图还包含一个额外的CON_ID列,其中包含每行数据的容器ID。你可以将此列连接到V $ PDBS的CON_ID列,这是一个新的数据字典视图,其中显示根容器中的所有可插拔数据库,以查看各种PDB的名称。

数据字典中还有一些其他新视图,DBA会希望熟悉这些视图以管理Oracle Multitenant数据库部署。下面的简要描述是假设你正在从根容器查询视图:

  • V$CONTAINERS 显示所有可插拔数据库和根容器。
  • DBA_PDB_HISTORY显示PDB何时以及从何处被克隆。
  • PDB_PLUG_IN_VIOLATIONS显示当PDB插入根容器时出现的任何问题。

 

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

Brian Peasland
Brian Peasland

Techtarget旗下Searchoracle网站的资深专家,有16年IT行业经验、计算机科学硕士、专攻数据库方向,曾担任系统管理员等职。此外,他还获Oracle 7.3、8和8i的OCP数据库管理员证书,目前为SGT Inc.公司首席DBA。

翻译

邹铮
邹铮

相关推荐