Oracle多租戶管理員指南-CDB共性概念03

chenoracle發表於2020-03-25

Oracle® Multitenant   Administrator’s Guide

Part I   Multitenant Architecture

2   Overview of the Multitenant Architecture

2.1 Overview of Containers in a CDB

2.2 Overview of Commonality in the CDB

2.3 Overview of Applications in an Application Container

2.4 Overview of Services in a CDB

2.5 Overview of Tablespaces and Database Files in a CDB

2.6 Overview of Availability in a CDB

2.7 Overview of Oracle Resource Manager in a CDB

2.2 CDB 共性概念

CDB 中,每個使用者、角色或物件都是通用的或本地的。類似地,通常或在本地授予特權。

2.2.1 關於 CDB 的共性

CDB 或應用程式 root 中定義的一個常見 phenomenon 是,在插入到這個 root 中的所有容器中定義的 phenomenon 是相同的。

2.2.1.1 共性原則

CDB 中,一種 phenomenon 可能在系統容器 (CDB 本身 ) 中,也可能在特定的應用程式容器中。

例如,如果您在連線到CDB$ROOT 時建立一個公共使用者帳戶,那麼這個使用者帳戶對於 CDB 中的所有 pdb 和應用程式 ROOT 都是公共的。但是,如果在連線到應用程式 ROOT 時建立應用程式公共使用者帳戶,則此使用者帳戶僅對此應用程式容器中的 pdb 是公共的。

CDB$ROOT 或應用程式 ROOT 下,共性原則如下 :

•在每一個現有的和未來的容器中,一個常見的 phenomenon 是相同的。

因此,在插入到CDB 的每個 PDB 中,在 CDB ROOT 中定義的公共使用者具有相同的身份 ; 在應用程式 ROOT 中定義的公共使用者在插入到此應用程式 ROOT 的每個應用程式 PDB 中具有相同的標識。相反,區域性 phenomenon 僅侷限於一個現有容器。

•只有普通使用者才能改變普通 phenomenon 的存在。

更準確地說,只有登入到CDB ROOT 或應用程式 ROOT 的普通使用者才能建立、刪除或修改當前容器中常見的使用者、角色或物件的屬性。

2.2.1.2 CDB 中的名稱空間

CDB 中,每個物件的名稱空間都限定在其容器中。以下原則總結了範圍規則 :

•從應用程式的角度來看, PDB 是一個獨立的資料庫,不同於任何其他的 PDB

•區域性 phenomenon 是在一個容器內產生並限制在一個容器內。

注意:

在本主題中,phenomenon ”一詞表示“使用者帳戶、角色或資料庫物件”。

•常見的 phenomenon 定義在一個 CDB root 或應用程式 root 中,並且存在於所有正在或將要插入到這個 root 中的 pdb 中。

上述原則對區域性和普遍phenomenon 都有影響。

Local Phenomena

一個區域性phenomenon 必須在一個容器中進行惟一命名,但不能跨 CDB 中的所有容器進行惟一命名。不同容器中命名相同的區域性 phenomenon 是不同的。例如,一個 PDB 中的本地使用者 sh 與另一個 PDB 中的本地使用者 sh 不衝突。

CDB$ROOT 常見的 phenomenon

CDB$ROOT 中定義的常見 phenomenon 存在於多個容器中,並且在每個名稱空間中必須是惟一的。例如, CDB 根目錄包含預定義的通用使用者,如 SYSTEM SYS 。為了確保名稱空間分離, Oracle 資料庫禁止在另一個容器中建立系統使用者。

為了確保名稱空間分離,CDB 根中使用者建立的常見 phenomenon 的名稱必須以 COMMON_USER_PREFIX 初始化引數指定的值開始。預設字首是 c## C## 。所有其他使用者建立的 phenomenon 的名稱都不能以 c## C## 開頭。例如,您不能在 hrpdb 中建立名為 c##hr 的本地使用者,也不能在 CDB 根目錄中建立名為 hr 的公共使用者。

•應用程式常見的 phenomenon

在應用程式容器中,區域性phenomenon 和應用程式常見 phenomenon 的名稱不能衝突。

•應用程式通用使用者和角色

同樣的原則也適用於應用程式的普通使用者和CDB 的普通使用者。不同之處在於,對於 CDB 通用使用者,通用使用者字首的預設值是 c## c## ,而在應用程式根目錄中,通用使用者字首的預設值是空字串。

多租戶體系結構假設您從應用程式根目錄建立應用程式PDBs ,或者將單租戶應用程式轉換為多租戶應用程式。

•應用程式通用物件

多租戶體系結構假設您在應用程式根目錄中建立應用程式公共物件。稍後,在應用程式PDBs 中本地新增資料。

但是,Oracle 資料庫支援在應用程式 PDB 中建立本地表。在這種情況下,本地表與應用程式 PDB 中的應用程式公共物件駐留在同一個名稱空間中。

2.2.2 CDB 中公共使用者和本地使用者概況

如果使用者帳戶擁有定義資料庫的物件,則此使用者帳戶是公用的。未提供Oracle 的使用者帳戶是本地帳戶或公用帳戶。

CDB 公共使用者是在 CDB ROOT 中建立的公共使用者。應用程式公用使用者是在應用程式 ROOT 中建立的使用者,僅在此應用程式容器中公用。

下圖顯示了CDB 中可能的使用者帳戶型別。

CDB 公共使用者可以連線到其具有足夠許可權的 CDB 中的任何容器。相反,應用程式公共使用者只能連線到建立它的應用程式 ROOT ,或者連線到此應用程式 ROOT PDB ,這取決於它的許可權。

2.2.2.1 CDB 中公共使用者

在系統容器(CDB )或應用程式容器的上下文中,公共使用者是一個資料庫使用者,該使用者在 root 以及該容器中的每個現有和未來 PDB 中具有相同的標識。

每個公共使用者都可以連線到其容器的ROOT 中,並在其具有足夠許可權的任何 PDB 中執行操作。某些管理任務必須由公共使用者執行。示例包括建立 PDB 和拔出 PDB

例如,SYSTEM 是具有 DBA 許可權的 CDB 公共使用者。因此, SYSTEM 可以連線到 CDB ROOT 和資料庫中的任何 PDB 。您可以在 saas_sales 應用程式容器中建立一個公共使用者 saas_sales_admin 。在這種情況下, saas_sales_admin 使用者只能連線到 saas_sales 應用程式 root saas_sales 應用程式容器中的應用程式 PDB

每個公共使用者都是由Oracle 提供或由使用者建立的。 Oracle 提供的公共使用者的例子有 SYS SYSTEM 。每個使用者建立的公共使用者要麼是 CDB 公共使用者,要麼是應用程式公共使用者。

2-6 顯示了兩個 pdb 中的示例使用者和模式: hrpdb salespdb SYS c###dba CDB 的公共使用者,他們在 CDB$ROOT hrpdb salespdb 中擁有模式。本地使用者 hr rep 存在於 hrpdb 中。 salespdb 中也有本地使用者 hr rep

公共使用者具有以下特點:

•公共使用者可以登入其具有建立會話許可權的任何容器(包括 CDB$ROOT )。

公共使用者不必在每個容器中都具有相同的許可權。例如,c###dba 使用者可能有權在 hrpdb root 中建立會話,但不能在 salespdb 中建立會話。因為具有適當許可權的公共使用者可以在容器之間切換,所以 root 中的公共使用者可以管理 pdb

•應用程式公共使用者在其自己的應用程式容器之外的任何容器中都沒有建立會話許可權。

因此,應用程式公共使用者被限制在其自己的應用程式容器中。例如,在saas-sales 應用程式中建立的應用程式公共使用者只能連線到 saas-sales 應用程式容器中的應用程式 ROOT pdb

•使用者建立的 CDB 公共使用者的名稱必須遵循其他資料庫使用者的命名規則。此外,名稱必須以 COMMON_USER_PREFIX 初始化引數指定的字元開頭,預設為 c## C## Oracle 提供的公用使用者名稱和使用者建立的應用程式公用使用者名稱不受此限制。

本地使用者名稱不能以字元c## C## 開頭。

•每個公共使用者在建立它的容器(系統容器或特定應用程式容器)中的所有 pdb 中都有唯一的名稱。

CDB 公共使用者在 CDB ROOT 中定義,但必須能夠連線到具有相同標識的每個 PDB 。應用程式公共使用者駐留在應用程式 ROOT 中,可以使用相同的標識連線到其容器中的每個應用程式 PDB

2.2.2.2 CDB 中的本地使用者

本地使用者是不常見的資料庫使用者,只能在單個PDB 中操作。

本地使用者有以下特點:

•一個本地使用者特定於一個 PDB ,並且可能在這個 PDB 中擁有一個模式。

在圖2-6 中, hrpdb 上的本地使用者 hr 擁有 hr 模式。在 salespdb ,本地使用者 rep 擁有 rep 模式,而本地使用者 hr 擁有 hr 模式。

•本地使用者可以管理一個 PDB ,包括開啟和關閉它。

具有SYSDBA 特權的普通使用者可以將 SYSDBA 特權授予本地使用者。在本例中,特權使用者保持本地。

•一個 PDB 中的本地使用者無法登入到另一個 PDB CDB 根目錄。

例如,當本地使用者hr 連線到 hrpdb 時, hr 如果不使用資料庫連結,就無法訪問駐留在 salespdb 資料庫中的 sh 模式中的物件。以同樣的方式,當本地使用者 sh 連線到 salespdb PDB 時,如果不使用資料庫連結, sh 無法訪問駐留在 hrpdb 中的 hr 模式中的物件。

•本地使用者的名字不能以字元 c## C## 開頭。

•本地使用者的名稱只能在其 PDB 中是唯一的。

使用者名稱和包含該使用者模式的PDB 確定一個惟一的本地使用者。圖 2-6 顯示了 hrpdb 上存在一個名為 rep 的本地使用者和模式。 salespdb PDB 上存在一個完全獨立的本地使用者和模式 rep

下表描述了圖2-6 中涉及 CDB 的場景。每行描述在前一行的操作之後發生的操作。公共使用者系統在兩個 pdb 中建立本地使用者。

2-3 CDB 中的本地使用者

操作:

SQL >   CONNECT   SYSTEM @ hrpdb

Enter password :   ********  

Connected.

描述:

system 使用服務名稱 hrpdb 連線到 hrpdb 容器。

操作:

SQL >   CREATE   USER  rep IDENTIFIED   BY   password ;

User  created.

SQL >   GRANT   CREATE   SESSION   TO  rep ;

Grant  succeeded.

描述:

SYSTEM 建立一個本地使用者,並將此 PDB 中的建立會話特權授予該使用者。使用者是本地的,因為公共使用者只能由連線到 root 的公共使用者建立。

操作:

SQL >   CONNECT  rep @ salespdb

Enter password :   *******  

ERROR :

ORA - 01017 :  invalid username / password ;  logon denied

描述:

rep 使用者是 hrpdb 的本地使用者,嘗試連線到 salespdb 。因為 rep 不存在於 PDB salespdb 中,所以嘗試失敗。

操作:

SQL >   CONNECT   SYSTEM @ salespdb

Enter password :   ********  

Connected.

描述:

SYSTEM 使用服務名稱 salespdb 連線到 salespdb 容器。

操作:

SQL >   CREATE   USER  rep IDENTIFIED   BY   password ;

User  created.

SQL >   GRANT   CREATE   SESSION   TO  rep ;

Grant  succeeded.

描述:

system salespdb 中建立一個本地使用者代表,並將此 PDB 中的建立會話特權授予該使用者。因為本地使用者的名稱只能在其 PDB 中是唯一的,所以一個名為 rep 的使用者可以同時存在於 salespdb hrpdb 中。

操作:

SQL >   CONNECT  rep @ salespdb

Enter password :   *******

Connected.

描述:

rep 使用者成功登入到 salespdb

2.2.3 CDB 中公共和本地角色概述

使用者建立的角色可以是本地角色,也可以是公共角色。公共角色對CDB 本身或特定的應用程式容器都是公共的。

Oracle 提供的每個角色都是通用的,例如,預定義的 DBA 角色。在 Oracle 提供的指令碼中,授予 Oracle 提供的使用者和角色的每個許可權或角色通常都被授予,只有一個例外: system 特權在本地授予公共角色。

2.2.3.1 CDB 中公共角色

公共角色存在於CDB root 或應用程式 root 中,並應用於 root 容器 (CDB 或應用程式容器 ) 中的每個 PDB

公共角色對於跨容器操作非常有用,可以確保公共使用者在每個PDB 中都有一個角色。每個常見的角色是以下型別之一 :

oracle-supplied

所有oracle 提供的角色,例如 DBA PUBLIC ,對於 CDB 都是通用的。

•使用者建立的

通過執行CREATE ROLE ... CONTAINER=ALL 建立一個公共角色在 CDB root 或應用程式 root 中,這決定了角色所在的容器。應用標準命名約定。此外, CDB 公共角色的名稱必須以 COMMON_USER_PREFIX 初始化引數指定的字元開頭,預設情況下是 c## C##

角色的範圍是定義它的root 的範圍。如果在 CDB$ROOT 中定義角色,那麼它的作用域就是整個 CDB 。如果在應用程式根目錄中定義角色,則其作用域是應用程式容器。

2.2.3.2 CDB 中的本地角色

本地角色只存在於單個PDB 中,因此完全獨立於任何其他 PDB 中的本地角色。

本地角色只能包含該角色所在容器中應用的角色和特權。例如,如果您在hrpdb 中建立本地角色 pdbadmin ,那麼該角色的作用域將被限制為這個 PDB

在相同的CDB 中,或者在相同的應用程式容器中, PDBs 可能包含具有相同名稱的本地角色。例如,使用者建立的角色 pdbadmin 可能同時存在於 hrpdb salespdb 中。然而,這些角色是完全獨立的。

2.2.4 CDB 中的特權和角色授予概述

CDB 中的使用者帳戶可以授予和被授予角色和特權。然而, CDB 中的角色和特權是在本地或公共授予的。

本地授予的特權或角色只能在授予它的PDB 中操作。公共授予的特權或角色可在容器 ( 包括 CDB 或應用程式容器 ) 中的每個現有和將來的 PDB 中執行。

使用者和角色可以是公共的,也可以是本地的。然而,特權本身既不是公共,也不是本地的。如果使用者使用CONTAINER=CURRENT 子句在本地授予特權,則被授予者擁有隻能在當前容器中執行的特權。如果使用者連線到 CDB ROOT 或應用程式 ROOT ,並且該使用者通常使用 CONTAINER=ALL 子句授予特權,則被授予者在當前容器中任何現有的或將來的 PDB 中都有此特權。

2.2.4.1 CDB 的特權和角色授予原則

CDB 中,每一個授予行為,無論是區域性的還是公共的,都發生在一個容器中。容器可以是 CDB root 、應用程式 root PDB

如果當前容器是CDB root ,那麼授予通常意味著授予 CDB 中的所有容器。但是,如果當前容器是應用程式 root ,那麼授予通常意味著授予當前應用程式容器中的所有 pdb

授予的基本原則如下:

•公共 phenomena 和本地 phenomena 都可以在本地發生。

•只有公共的 phenomena 才能被公共授予或被認可。

本地使用者、角色和特權被限制到特定的PDB 。因此,本地使用者一般不會授予角色和特權,而本地角色和特權一般也不會被授予。

以下各節描述上述原則的含義。

2.2.4.2.1 如何授予一個許可權或本地角色

要在本地授予角色或特權,可以使用grant 語句和 CONTAINER=CURRENT 子句,這是預設的。

具體來說,只有在符合下列條件時,才會在本地授予角色或特權:

•授予人擁有授予指定角色或特權的必要特權。

對於系統角色和特權,授予者必須具有授予的角色或特權的管理選項。對於物件特權,授予者必須具有授予特權的GRANT 選項。

•該授權僅適用於一個容器。

預設情況下,GRANT 語句包括 CONTAINER=CURRENT 子句,它指示特權或角色是在本地授予的。

2-4 在本地授予特權

在本例中,SYSTEM c##hr_admin 都是普通使用者。該示例連線到 hrpdb as SYSTEM( 該系統具有管理員特權 ) ,然後在本地將 employees 表上的 read 特權授予 c##hr_admin 。此授權僅適用於 hrpdb 中的 c##hr_admin ,不適用於任何其他 pdb

CONNECT   SYSTEM @ hrpdb

Enter password :   password  

Connected.

GRANT   READ   ON  employees TO  c##hr_admin CONTAINER = CURRENT ;

2.2.4.2.2 本地授予的角色和特權

使用者或角色可以在本地被授予特權(CONTAINER=CURRENT) 。例如,在 hrpdb 中,本地授予本地或公共使用者的 READ ANY TABLE 特權僅適用於此 PDB 中的此使用者。

使用者或角色可以在本地被授予一個角色(CONTAINER=CURRENT) 。如表 2-4 所示,一個通用角色可能會獲得本地授予的特權。例如 ,

常見角色c##dba 可以被授予在 hrpdb 中本地讀取任何表的特權。如果 c##cdb 通用角色具有本地特權,那麼這些特權僅適用於授予該角色的容器。在本例中,具有 c##cdba 角色的普通使用者沒有在 hrpdb 中本地授予此角色的特權,因此無權在 hrpdb 之外的任何 PDB 中行使此特權。

2.2.4.3 CDB 中公共授予的角色和特權

可以公共授予特權和公共角色。

只有在grantees grantors 都是公共的情況下,才可以授予使用者帳戶或角色角色和特權。如果角色被公共授予,那麼角色本身必須是公共的。下表說明了常見公共授權的可能性。

2.2.4.3.1 如何公共授權

CONTAINER=ALL 子句指定授予公共許可權或角色。

當符合下列條件時,會授予公共角色或特權:

•授予人是公共使用者。

執行授權的使用者要麼是CDB 本身的公共使用者,要麼是特定應用程式容器的公共使用者。

grantee 是一個公共使用者或公共角色。

授權的接收者要麼是CDB 本身的公共物件,要麼是特定應用程式容器的公共物件。

•授予人擁有授予指定角色或特權的必要特權。

對於系統角色和特權,授予者必須具有授予的角色或特權的管理選項。對於物件特權,授予者必須具有授予特權的GRANT 選項。

•授予適用於發生授予的容器內的所有 pdb( 無論是 CDB 還是應用容器 )

GRANT 語句包含一個 CONTAINER=ALL 子句,指定授予公共特權或角色。

•如果正在授予一個角色,那麼它必須是公共的,如果正在授予一個物件特權,那麼授予特權的物件必須是公共的。

2-5 授予一個公共許可權

在本例中,SYSTEM c##hr_admin 都是公共使用者。系統連線到 CDB root ,然後將 CREATE ANY TABLE 特權授予 c##hr_admin 。在這種情況下, c##hr_admin 現在可以在 CDB 中的任何 PDB 中建立表。

CONNECT   SYSTEM @ root

Enter password :   password  

Connected.

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

2.2.4.3.2 授予公共的角色和許可權

一個公用的使用者帳戶或角色可以被授予一個公用的許可權(CONTAINER=ALL)

CDB root 或應用程式 root 的上下文中,這個特權被授予當前容器中所有現有和未來的 pdb 中的這個公共使用者帳戶或角色。例如,如果系統連線到 CDB root ,並將一個 SELECT ANY TABLE 特權授予 CDB 的公共使用者帳戶 c##dba ,那麼 c##dba 使用者在 CDB 中的所有 pdb 中都有這個特權。通常授予的角色或特權不能在本地撤銷。

一個使用者或角色可以接收一個公共的角色。正如表2-5 中所提到的,一個公共角色可以獲得本地授予的特權。因此,一個普通使用者可以被授予一個普通角色,這個角色可能包含本地授予的特權。

例如,常見的角色c##admin 可能被授予 SELECT ANY TABLE 特權,這是 hrpdb 的本地特權。在公用角色中本地授予的特權僅適用於授予該特權的容器。因此,具有 c##admin 角色的公共使用者無權在 salespdb 或除 hrpdb 之外的任何 PDB 中行使包含 hrpdb 的特權。

2.2.4.4 CDB 授予 PUBLIC 角色

CDB 中, PUBIC 是一個公共的角色。在 PDB 中,本地授予 PUBLIC 的特權只允許所有本地和公共使用者帳戶在此 PDB 中行使這些特權。

授予Oracle 提供的使用者和角色的每個許可權和角色通常都被授予,但授予 PUBLIC 的系統許可權除外,後者是在本地授予的。此異常存在,因為您可能希望撤銷 Oracle 資料庫中預設包含的某些授予,例如在 SYS.UTL_ 檔案包上執行。

假設hrpdb 中存在本地使用者帳戶 hr 。此使用者在本地將 hr.employees 的選擇許可權授予 PUBLIC hrpdb 中的公共使用者和本地使用者可以行使授予 PUBLIC 的特權。 salespdb 或任何其他 PDB 中的使用者帳戶無權查詢 hrpdb 中的 hr.employees

公共授予的特權允許所有本地使用者在其各自的PDB 中行使授予的特權,並允許所有公共使用者在其有權訪問的 PDB 中行使此特權。 Oracle 建議使用者通常不要將特權和角色授予 PUBLIC

2.2.4.5 許可權和角色的授予 : 場景

在這個場景中,系統建立了公共使用者c##dba ,並嘗試給這個使用者特權來查詢 hrpdb 中的 hr 模式中的表。

該場景顯示CONTAINER 子句如何影響角色和許可權的授予。第一列顯示 CDB$ROOT 中的操作。第二列顯示 hrpdb 中的操作。

2-6 CDB 中的角色和許可權授予

t

CDB$ROOT 中操作:

SQL >   CONNECT   SYSTEM @ root

Enter password :   *******  

Connected .

解釋:公共使用者system 連線 root 容器

t2

CDB$ROOT 中操作:

SQL >   CREATE   USER  c##dba IDENTIFIED   BY   password  CONTAINER = ALL ;

解釋: SYSTEM 建立公共使用者 c##dba 。子句 CONTAINER=ALL 使使用者成為公共使用者。

t3

CDB$ROOT 中操作:

SQL >   GRANT   CREATE   SESSION   TO  c##dba ;

解釋: SYSTEM CREATE SESSION 系統許可權授予 c##dba 。由於缺少子句 CONTAINER=ALL ,因此此特權在本地授予,因此僅適用於 root (即當前容器)。

t4

CDB$ROOT 中操作:

SQL >   CREATE   ROLE  c##admin CONTAINER = ALL ;

解釋:SYSTEM 建立一個名為 c##admin 的公共角色。子句 CONTAINER=ALL 使角色成為公共角色。

t5

CDB$ROOT 中操作:

SQL >   GRANT   SELECT   ANY   TABLE   TO  c##admin ;  

Grant  succeeded.

解釋: SYSTEM “SELECT ANY TABLE” 許可權授予 c##admin 角色。 CONTAINER=ALL 子句的缺失使特權成為 root 的本地特權。因此,這個公共角色包含一個只能在 root 中使用的特權。

T6

CDB$ROOT 中操作:

SQL >   GRANT  c##admin TO  c##dba ;  

SQL >   EXIT ;

解釋:SYSTEM c##admin 角色授予 c##dba 。因為 CONTAINER=ALL 子句不存在,所以該角色僅應用於當前容器,即使它是一個公共角色。如果 c##dba 連線到 PDB ,則 c##dba 不具有此角色。

T7:

hrpdb 操作:

SQL >   CONNECT  c##dba @ hrpdb

Enter password :   *******  

ERROR :   ORA - 01045 :   user  c##dba lacks CREATE   SESSION   privilege ;  

logon denied

解釋:

c##dba 無法連線到 hrpdb ,因為 t3 處的授權是 root 的本地授權。

T8:

hrpdb 操作:

SQL >   CONNECT   SYSTEM @ hrpdb

Enter password :   *******

Connected.

解釋:

SYSTEM 連線 hrpdb

T9:

hrpdb 操作:

SQL> GRANT CONNECT, RESOURCE TO c##dba;

Grant succeeded.

SQL> EXIT

解釋:

SYSTEM CONNECT RESOURCE 角色授予公共使用者 c##dba 。因為缺少子句 CONTAINER=ALL ,所以該授權是 hrpdb 的本地授權。

T10:

hrpdb 操作:

SQL >   CONNECT  c##dba @ hrpdb

Enter password :   *******  

Connected.

解釋:

公共用c##dba 連線 hrpdb

T11:

hrpdb 操作:

SQL >   SELECT   COUNT (*)   FROM  hr.employees ;

select   *   from  hr.employees

*

ERROR   at  line 1 :

ORA - 00942 :   table   or   view  does not  exist

解釋:

hr.employees 的查詢仍然返回一個錯誤,因為 c##dba hrpdb 中的表沒有查詢許可權。在 t5 本地授予的 SELECT ANY TABLE 特權僅限於 root ,因此不適用於 hrpdb

T12:

CDB$ROOT 操作:

SQL >   CONNECT   SYSTEM @ root

Enter password :   *******  

Connected.

解釋:公共使用者system 連線 root 容器

T13:

CDB$ROOT 操作:

SQL> GRANT SELECT ANY TABLE TO c##admin CONTAINER=ALL;

Grant succeeded.

解釋:

SYSTEM “SELECT ANY TABLE” 許可權授予 c##admin 角色。 CONTAINER=ALL 的存在意味著授予公共特權。

T14

hrpdb 操作:

SQL> SELECT COUNT(*) FROM hr.employees;

select * from hr.employees

*

ERROR at line 1:

ORA-00942: table or view does not exist

解釋:

hr.employees 的查詢仍然返回錯誤。原因是在 t6 時,只將 c##admin 公共 角色授予 root 中的c##dba

T15:

CDB$ROOT 操作:

SQL >   GRANT  c##admin TO  c##dba CONTAINER = ALL ;

Grant  succeeded.

解釋:

SYSTEM 將名為 c##admin 的公共角色授予 c##dba ,指定 CONTAINER=ALL 。現在使用者 c##dba 在所有容器中都有角色,而不僅僅是 root 容器。

T17:

hrpdb 操作:

SQL> SELECT COUNT(*) FROM hr.employees;

COUNT(*)

----------

107

解釋:查詢成功

2.2.5 CDB 中公共和本地物件的概述

公共物件在CDB root 或應用程式 root 中定義,可以使用後設資料連結或物件連結進行引用。本地物件是指不是公共物件的所有物件。

資料庫提供的公共物件是在CDB$ROOT 中定義的,不能更改。 Oracle 資料庫不支援在 CDB$ROOT 中建立公共物件。

您可以將大多數模式物件( 如表、檢視、 PL/SQL Java 程式單元、序列等 ) 建立為應用程式 root 中的公共物件。如果物件存在於應用程式 root 中,則將其稱為應用程式公共物件。

本地使用者可以擁有一個公共物件。此外,普通使用者可以擁有一個本地物件,但僅當該物件不是資料連結或後設資料連結的,也不是後設資料連結或資料連結時。

2.2.6 公共審計配置概述

對於混合模式和統一審計,公共審計配置是可見的,並在所有pdb 中強制執行。

審計配置可以是本地的,也可以是公共的。適用於其他本地或公共phenomena( 如使用者和角色 ) 的範圍規則都適用於審計配置。

注意:

審計初始化引數存在於CDB 級別,而不是每個 PDB 中。

PDBs 支援以下審計選項 :

物件審計

物件審計是指對特定物件的審計配置。只有公共物件可以成為公共審計配置的一部分。本地審計配置不能包含公共物件。

審計政策

審計策略可以是本地的,也可以是公共的:

—— 審計政策

本地審計策略應用於單個PDB 。您只能在這個 PDB 中對本地和公共使用者執行本地審計策略。試圖在所有容器上強制執行本地審計策略會導致錯誤。

在所有情況下,實施本地審計策略都是本地審計框架的一部分。

常見的審計政策

一個公共的審計策略適用於所有的容器。此策略只能包含操作、系統特權、公共角色和公共物件。您只能將公共審計策略應用於公使用者。試圖跨所有容器為本地使用者強制執行公共審計策略將導致錯誤。

一個公共的審計配置儲存在root SYS 模式中。本地審計配置儲存在應用它的 PDB SYS 模式中。

審計跟蹤儲存在相關pdb SYS AUDSYS 模式中。 PDBs 的作業系統和 XML 審計跟蹤儲存在 AUDIT_FILE_DEST 初始化引數指定的目錄的子目錄中。

2.2.7 PDB 鎖定配置檔案概述

PDB 鎖定配置檔案是一組命名的功能,用於控制連線到 PDB 的使用者可用的操作。例如, PDB 鎖定配置檔案可以禁用 ALTER SYSTEM 語句附帶的特權。

pdb 共享一個標識時,存在提升特權的可能性。例如,身份可以在網路級別上共享,也可以在 pdb 訪問公共物件或通過資料庫連結連線時共享。為了提高安全性, CDB 管理員可能希望對訪問進行分割槽,從而限制使用者可以在 PDB 中執行的操作。

用例可能是在高、中、低階別建立鎖定配置檔案。高階別可以極大地限制訪問,而低階別可以啟用訪問。

您可以限制以下型別的訪問:

•Network access

例如,限制對UTL HTTP UTL MAIL 的訪問。

公共使用者和公共物件訪問

例如,限制PDB 中的本地使用者可以通過公共使用者代理或訪問公共架構中的物件的操作。

作業系統訪問

例如,限制對UTL_FILE DBMS_FILE_TRANSFER PL/SQL packages 的訪問。

連線

例如,可以限制公共使用者連線到PDB ,也可以限制具有 SYSOPER 管理許可權的本地使用者連線到以受限模式開啟的 PDB

管理功能

例如,可以限制ALTER SYSTEM ALTER SESSION ALTER DATABASE 的使用。

資料庫選項

例如,可以使用鎖定配置檔案禁用對資料庫選項(如Oracle 分割槽或 Oracle 資料庫高階佇列)的訪問。

登入到CDB ROOT 或應用程式 ROOT 時,通過發出 create lockdown profile 語句建立鎖定配置檔案,該語句支援以下可選子句:

通過使用現有配置檔案中的值,從靜態配置檔案建立新的鎖定配置檔案。對現有配置檔案的任何後續更改都不會影響新配置檔案。

•INCLUDING dynamic_base_profile 使用現有配置檔案中的值建立新的鎖定配置檔案,但此新鎖定配置檔案繼承構成基本配置檔案的 DISABLE 語句規則以及對基本配置檔案的任何後續更改。

發出語句的使用者必須在當前容器中具有建立鎖定配置檔案系統許可權。您可以使用ALTER LOCKDOWN PROFILE 語句新增和刪除限制。使用者必須在 CDB 根或應用程式根中發出 ALTER 語句,並且必須在當前容器中具有 have ALTER LOCKDOWN PROFILE system 許可權。

使用PDB_lockdown 初始化引數指定鎖定配置檔案。此引數確定 PDB 鎖定配置檔案是否應用於給定的 PDB 。可以在以下級別設定此引數:

•PDB

配置檔案僅適用於設定它的PDB

•Application container

配置檔案應用於應用程式容器中的所有應用程式PDB 。只能由具有應用程式公用 SYSDBA 或公用 ALTER SYSTEM 許可權的應用程式公用使用者或具有公用 SYSDBA 或公用 ALTER SYSTEM 許可權的 CDB 公用使用者修改該值。

•CDB

配置檔案適用於所有PDB 。具有公共 SYSDBA 或公共 ALTER SYSTEM 許可權的公共使用者可以覆蓋特定 PDB CDB 範圍設定。

如果PDB 中的 PDB_LOCKDOWN 引數設定為與此 PDB 的容器( CDB 或應用程式容器)不同的鎖定配置檔案的名稱,則一組規則將控制限制之間的互動。

示例2-6 建立 PDB 鎖定配置檔案

在本例中,您以具有CREATE LOCKDOWN PROFILE 許可權的普通使用者身份連線到 CDB 根目錄。建立一個名為 medium 的配置檔案,該配置檔案禁用除 ALTER SYSTEM FLUSH SHARED POOL 之外的所有 ALTER SYSTEM 語句:

CREATE LOCKDOWN PROFILE medium;

ALTER LOCKDOWN PROFILE medium DISABLE STATEMENT=('ALTER SYSTEM');

ALTER LOCKDOWN PROFILE medium ENABLE STATEMENT=('ALTER SYSTEM') CLAUSE=('FLUSH SHARED POOL');

歡迎關注我的微信公眾號"IT小Chen",共同學習,共同成長!!!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29785807/viewspace-2682581/,如需轉載,請註明出處,否則將追究法律責任。

相關文章