oracle 12c 多租戶體系結構概念之資料字典、服務、使用者、角色與許可權

panpong發表於2019-03-13

1.     CDB 中的資料字典體系結構

從使用者和應用程式的角度來看, CDB 中每個容器中的資料字典是獨立的,就像在非 CDB 中一樣。

Figure 18-3 Data Dictionary Architecture in a CDB

 

    在 CDB 中,資料字典後設資料只在 root 中儲存,不儲存在 pdb 中( non-CDB 中是混合儲存的)。而物件資料是儲存在 pdb 中的。在 pdb 中如何訪問 root 中的後設資料和物件呢?依靠兩個內部機制: metadata links object links

         如果要訪問類似 dba_objects 效能檢視,其後設資料只儲存在 root 中,此時就需要使用 metadata links 機制實現讀取。另外,還有一些物件也只儲存在 root 中,例如 awr 資料, DBA_HIST_ACTIVE_SESS_HISTORY DBA_HIST_BASELINE   等,如果要查詢其資料則需要使用 object link 機制實現。 Oracle 資料庫自動建立和管理 metadata links object links ,使用者不能新增、修改或刪除這些連結。

1)      CDB 中的容器資料物件

CDB 中,每個 DBA_ 檢視,都存在一個對應的 CDB_ 檢視。 CDB_ 檢視的 owner 就是對應的 DBA_ 檢視的 owner 。下圖顯示了 dictionary 檢視的不同類別之間的關係。

Figure 18-4 Dictionary View Relationships in a CDB

2.    CDB 中的 service

當您建立 PDB 時,資料庫將自動在 CDB 中建立並啟動服務。服務有一個屬性,顯示在 DBA_SERVICES.PDB 列中,該列將 PDB 標識為服務的初始當前容器。服務的名稱與 PDB 相同。 PDB 名稱必須是有效的服務名稱,並且在 CDB 中必須是惟一的。例如,在圖 18-5 中,名為 hrpdb PDB 有一個名為 hrpdb 的預設服務。不能刪除預設服務。

您可以為每個 PDB 建立額外的服務。每個附加服務都將其 PDB 表示為初始當前容器。在圖 18-5 中, erppdb hrpdb 存在非預設服務。使用在非 cdb 中使用的相同技術建立、維護和刪除其他服務。

SQL> SELECT NAME, PDB FROM V$SERVICES ORDER BY PDB, NAME;

NAME             PDB

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

SYS$BACKGROUND   CDB$ROOT

SYS$USERS        CDB$ROOT

db12c            CDB$ROOT

db12cXDB         CDB$ROOT

db12cbk          CDB$ROOT

srvtest1         CDB$ROOT

pdb1             PDB1

srvpdb1          PDB1

pdb2             PDB2

pdb3             PDB3

srvpdb3          PDB3

 

11 rows selected.



SQL> SELECT SYS_CONTEXT('USERENV', 'CON_NAME') AS CUR_CONTAINER FROM DUAL;


CUR_CONTAINER

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

CDB$ROOT


#切換容器方法

SQL> ALTER SESSION SET CONTAINER = hrpdb;


 #RAC環境建立,修改,刪除service

srvctl add service -db db12c -service pdb1 -pdb pdb1

srvctl modify service -db mycdb -service salesrep -pdb hrpdb

srvctl remove service -db mycdb -service salesrep


#單例項環境下建立與刪除service,使用  DBMS_SERVICE不能修改service

BEGIN

  DBMS_SERVICE.CREATE_SERVICE(

    service_name => 'salesrep',

    network_name => 'salesrep.example.com');

END;

/

BEGIN

  DBMS_SERVICE.DELETE_SERVICE(

    service_name => 'salesrep');

END;

/


3.    CDB 中的使用者: common user local user                      

Common user

Common user root 和各 PDB 中都有相同的 ID ,能連線(有 create session 許可權) root 和所有 pdb 執行操作。 Common user 要麼由 oracle 提供(如 sys ,system ),要麼由使用者建立(使用者名稱必須以 C## c## 開頭)。

 

Local User

Local User 不是共用的資料庫使用者,只能在單個 PDB 中操作。

Local User 具有以下特點 :

l   Local User 是特定於某個 PDB 的,可能在這個 PDB 中擁有一個 schema

l   Local User 可以管理 PDB ,包括開啟和關閉它。具有 SYSDBA 許可權的 Common User 可以將 SYSDBA 許可權授予 Local User 。在這種情況下,許可權使用者仍然是本地的。

l   一個 PDB 中的 Local User 不能登入到另一個 PDB CDB$ROOT

l   Local User 的名稱不能以字元 c## c## 開頭。

l   Local User 的名稱只能在其 PDB 中是唯一的。


 


4.    CDB 中的角色: common role local role

使用者建立的 common role 也必須以 C## or c## 開頭;

每個 oracle 提供的角色都是通用的。在 oracle 提供的指令碼中,授予 oracle 提供的使用者和角色的每個許可權或角色都是通用的,只有一個例外 : 系統許可權在本地授予公共角色 PUBLIC( 參見“在 CDB 中授予 PUBLIC ) 。使用者建立的角色要麼是本地的,要麼是通用的。

 

當符合以下條件時,使用者只能對公共角色執行公共操作,例如,向該角色授予公共許可權 :

•使用者是當前容器為 root Common User

•使用者通常擁有 SET CONTAINER 許可權,這意味著該許可權適用於所有容器。

•使用者有許可權控制執行指定操作的能力,該許可權已被普遍授予 ( 參見“ CDB 中普遍授予的角色和許可權” )

 

例如,要建立公共角色, Common User 必須具有通常授予的 create 角色和 SET 容器許可權。在 CREATE ROLE 語句中, CONTAINER=ALL 子句指定角色是公共的。

5.    CDB 中的授予許可權與角色

就像在非 CDB 中一樣, CDB 中的使用者可以授予角色和許可權。 CDB 中的一個關鍵區別是 Local 授予和 Common 授予的角色和許可權之間的區別。 Local 授予的許可權或角色只能在授予它的容器中執行。 Common 授予的許可權或角色可以在每個現有的和未來的容器中執行。

使用者和角色可以是 Common 的,也可以是 Local 的。然而,許可權本身既不是 Common 的,也不是 Local 的。如果使用者使用 CONTAINER=CURRENT 子句在 Local 授予許可權,那麼被授予者具有隻能在當前容器中執行的許可權。如果使用者使用 CONTAINER=ALL 子句授予許可權,那麼被授予者擁有在任何現有和將來的容器中都可以執行的許可權。

 

The basic principles of granting are as follows:

  • Both common and local phenomena may grant and be granted      locally.
  • Only common phenomena may grant or be granted commonly.

Table 18-5 Local Grants

Phenomenon

May Grant Locally

May Be Granted Locally

May Receive a Role or Privilege Granted Locally

Common User

Yes

N/A

Yes

Local User

Yes

N/A

Yes

Common Role

N/A

Yes Foot 1

Yes

Local Role

N/A

Yes Foot 2

Yes

Privilege

N/A

Yes

N/A

Footnote 1

Privileges in this role are available to the grantee only in the container in which the role was granted, regardless of whether the privileges were granted to the role locally or commonly.

Footnote 2

Privileges in this role are available to the grantee only in the container in which the role was granted and created.


Table 18-6 Common Grants

Phenomenon

May Grant Commonly

May Be Granted Commonly

May Receive Roles and Privileges Granted Commonly

Common User Account

Yes

N/A

Yes

Local User Account

No

N/A

No

Common Role

N/A

Yes Foot 3

Yes

Local Role

N/A

No

No

Privilege

N/A

Yes

N/A

Footnote 3

Privileges that were granted commonly to a common role are available to the grantee across all containers. In addition, any privilege granted locally to a common role is available to the grantee only in the container in which that privilege was granted to the common role.

 

CDB 中, PUBLIC 是一個 common 角色。在 PDB 中, Local 授予 PUBLIC 的許可權只允許所有 Local common user 帳戶在此 PDB 中使用這些許可權。

授予 Oracle-supplied 的使用者和角色的每個許可權和角色都是 Common ,但是授予 PUBLIC 的系統許可權是 Local 授予的。存在此例外是因為您可能希望撤銷 Oracle 資料庫中預設包含的某些許可權,例如 SYS.UTL_FILE 包的 EXECUTE  許可權。

Oracle 建議使用者不要將許可權和角色 Common 的授予 PUBLIC


6.    CDB 中的通用審計配置( Common Audit Configurations

         對於混合模式和統一審計, Common Audit Configurations 是可見的,並跨所有 PDBs 強制執行。

審計配置要麼是本地的,要麼是通用的。適用於其他本地或常見現象 ( 如使用者和角色 ) 的範圍規則都適用於審計配置

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

 

PDB 支援的審計選項:

l   Object auditing

l   Audit policies Local audit policies Common audit policies

common audit configuration 儲存在 root sys 使用者下; local audit configuration 儲存在 PDB sys 使用者下;

Audit trails 儲存在相關 PDB sys 或者 audsys 使用者下; PDB OS XML audit trails 儲存在初始化引數 AUDIT_FILE_DEST 指定的目錄下;

 

Figure 18-8 Architecture of a CDB

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

相關文章