oracle 12cR2新特性-PDB lockdown profile
版權宣告:本文為Buddy Yuan原創文章,未經允許不得轉載。原文地址:ofollow,noindex" target="_blank">oracle 12cR2新特性-PDB lockdown profile
在12c多租戶架構當中,PDB不僅僅共享了主機環境外,它還共享了作業系統,網路和公共物件。考慮到一些特權會允許資料庫使用者執行跨PDB操作,PDB可能會暴露某一些漏洞。特別是在公有云和私有云的環境中,多租戶隔離是安全性的關鍵要求。因此,在Oracle 12cR2推出了lockwodn profile進行控制,並在Oracle 18c裡面進一步得到了增強。
鎖定配置檔案可以限制pdb中使用者執行某些操作:
1.管理功能,限制某些SQL語句,如alter system和alter session、alter database;
2.執行訪問網路的程式,例如utl_smtp和utl_http
3.訪問普通使用者的物件;
4.與OS互動,比如UTL_FILE、DBMS_FILE_TRANSFER包
5.在cdb中執行不受限制的跨pdb連線;
6.生成awr快照;
7.部分或者整體使用java;
8.使用某些資料庫選項,例如高階佇列和分割槽表;
那麼我們先來測試下這個功能,測試功能需要了解以下注意點:
1.建立、啟用、禁用和刪除lockdown檔案的過程相對簡單,使用者需要具備create lockdown profile、alter lockdown profile、drop lockdown profile的許可權。如果要啟用lockdown profile(在CDB或者是PDB級別),還需要該使用者有ALTER SYSTEM或者是SYSDBA的許可權。
2.單個lockdown profile檔案可以在其中定於多個規則。
3.一個pdb一次只能啟用一個lockdown profile配置檔案。
4.lockdown profile檔案強制執行的限制是PDB範圍的,它們會影響到每個使用者,包括sys和systsm.
5.如果在cdb$root中啟用了lockdown profile配置檔案,則會影響所有的pdb,如果在pdb中啟用,則只會影響pdb。
接下來我們就來測試一下這個功能
1.首先建立lockdown profile
SQL> show con_name CON_NAME ------------------------------ CDB$ROOT SQL> create lockdown profile default_pdb_lockdown; Lockdown Profile created.
2.接下來增加一些限制,限制前面說過有幾種,我們來一一介紹。
2.1.鎖定資料庫選項。在Oracle 12cR2中,只有兩個選項(DATABASE QUEUING,PARTITIONING)可以在lockdown配置檔案中啟用或禁用。
alter lockdown profile default_pdb_lockdown disable option=('PARTITIONING'); alter lockdown profile default_pdb_lockdown disable option=('DATABASE QUEUING'); alter lockdown profile default_pdb_lockdown disable option all; alter lockdown profile default_pdb_lockdown disable option all except = ('DATABASE QUEUING','PARTITIONING');
這裡幾個選項的意思如option all,就是禁用所有資料庫選項,option all except就是禁用所有選項除了DATABASE QUEUING,PARTITIONING;
如果要啟用,就把disable關鍵字修改成enable。
alter lockdown profile default_pdb_lockdown enable option all;
2.2鎖定資料庫功能。可以參考官方文件 中的Table 11-1 PDB Lockdown Profile Features介紹的。可以指定一組功能(Feature Bundle),也可以指定Feature。
alter lockdown profile default_pdb_lockdown disable feature=('OS_ACCESS'); alter lockdown profile default_pdb_lockdown disable feature=('UTL_HTTP','UTL_SMTP');
2.3.鎖定語句
目前4個ALTER語句(ALTER DATABASE,ALTER PLUGGABLE DATABASE,ALTER SESSION,ALTER SYSTEM)可以被pdb lockdown profile鎖定。
alter lockdown profile default_pdb_lockdown disable statement=('ALTER DATABASE','ALTER PLUGGABLE DATABASE'); alter lockdown profile default_pdb_lockdown disable statement all except=('ALTER DATABASE','ALTER PLUGGABLE DATABASE');
當然限制的範圍可以使用CLAUSE,OPTION,MINVALUE,MAXVALUE。
以下語句禁用ALTER SYSTEM SUSPEND和ALTER SYSTEM RESUME語句;
alter lockdown profile default_pdb_lockdown disable statement=('ALTER SYSTEM') clause = ('SUSPEND', 'RESUME');
以下語句禁用所有ALTER PLUGGABLE DATABASE語句,除了DEFAULT TABLESPACE和DEFAULT TEMPORARY TABLESPACE;
alter lockdown profile default_pdb_lockdown disable statement=('ALTER PLUGGABLE DATABASE') clause all except =('DEFAULT TABLESPACE','DEFAULT TEMPORARY TABLESPACE');
以下語句禁用ALTER SESSION語句設定COMMIT_WAIT或CURSOR_SHARING
alter lockdown profile default_pdb_lockdown disable statement=('ALTER SESSION') clause=('SET') option=('COMMIT_WAIT','CURSOR_SHARING');
以下語句禁用ALTER SYSTEM語句設定或修改CPU_COUNT小於8;
alter lockdown profile default_pdb_lockdown disable statement=('ALTER SYSTEM') clause=('SET') option = ('CPU_COUNT') minvalue = '8';
以下語句禁用ALTER SYSTEM語句設定或修改CPU_COUNT大於2;
alter lockdown profile default_pdb_lockdown disable statement=('ALTER SYSTEM') clause=('SET') option = ('CPU_COUNT') maxvalue = '2';
以下語句禁用ALTER SYSTEM語句設定或修改CPU_COUNT小於2和大於8;
alter lockdown profile default_pdb_lockdown disable statement=('ALTER SYSTEM') clause=('SET') option = ('CPU_COUNT') minvalue = '2' maxvalue = '8';
3.限制策略需要好好的考慮好,不然就會經常出現alter session set container都出現許可權錯誤的問題,因為有一些遞迴SQL呼叫就會出現問題。如下所示:
SQL> alter session set container=ORCLPDB1; ERROR: ORA-01031: insufficient privileges SQL> show pdbs; ERROR: ORA-00604: error occurred at recursive SQL level 2 ORA-01031: insufficient privileges
這裡我簡單測試,做了以下幾個限制。
SQL> alter lockdown profile default_pdb_lockdown disable option=('PARTITIONING'); Lockdown Profile altered. SQL> alter lockdown profile default_pdb_lockdown disable option=('DATABASE QUEUING'); Lockdown Profile altered. SQL> alter lockdown profile default_pdb_lockdown disable feature=('OS_ACCESS'); Lockdown Profile altered. SQL> alter lockdown profile default_pdb_lockdown disable feature=('UTL_HTTP','UTL_SMTP'); Lockdown Profile altered. SQL> alter lockdown profile default_pdb_lockdown disable statement=('alter system') clause=('set') option all; Lockdown Profile altered.
4.啟用lockdown profile。我們在CDB中設定引數PDB_LOCKDOWN,那麼所有PDB的都會使用這個lockdown profile。
SQL> ALTER SYSTEM SET PDB_LOCKDOWN = default_pdb_lockdown; System altered.
我們可以通過查詢DBA_LOCKDOWN_PROFILES檢視,檢視我們已經設定的限制規則。
SQL> select profile_name,rule_type,rule,clause,clause_option,status,users from DBA_LOCKDOWN_PROFILES where PROFILE_NAME='DEFAULT_PDB_LOCKDOWN'; PROFILE_NAME RULE_TYPE RULE CLAUSE CLAUSE_OPTION STATUS USERS -------------------- -------------------- ------------------------- ------------------------------ ------------------------- ------- ------ DEFAULT_PDB_LOCKDOWN FEATURE OS_ACCESS DISABLE ALL DEFAULT_PDB_LOCKDOWN FEATURE UTL_HTTP DISABLE ALL DEFAULT_PDB_LOCKDOWN FEATURE UTL_SMTP DISABLE ALL DEFAULT_PDB_LOCKDOWN OPTION DATABASE QUEUING DISABLE ALL DEFAULT_PDB_LOCKDOWN OPTION PARTITIONING DISABLE ALL DEFAULT_PDB_LOCKDOWN STATEMENT ALTER SYSTEM SET DISABLE ALL
5.執行測試,接下來我們進入到PDB裡面,執行相關的SQL測試下限制是否生效了。
SQL> alter session set container=ORCLPDB1; Session altered. SQL> show parameter pdb_lockdown NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ pdb_lockdown string DEFAULT_PDB_LOCKDOWN
可以看到是沒有許可權使用ALTER SYSTEM的,建立分割槽表會報ORA-00439: feature not enabled: Partitioning
SQL> alter system set cursor_sharing=EXACT; alter system set cursor_sharing=EXACT * ERROR at line 1: ORA-01031: insufficient privileges SQL> create table t1 (c1 number) partition by hash (c1); create table t1 (c1 number) partition by hash (c1) * ERROR at line 1: ORA-00439: feature not enabled: Partitioning
再次回到CDB,在CDB下執行這些語句,可以看到功能是不受限制的。
SQL> alter session set container=cdb$root; Session altered. SQL> create table t1 (c1 number) partition by hash (c1); Table created.
所以,我們可以看到,lockdown profile是限制PDB中某些操作的安全機制。它可以限制ALTER SYSTEM等強大的許可權。也可以禁止使用一些訪問網路或者是作業系統層面的強大的函式和包,當然還可以控制使用一些資料庫的選項。這麼做的好處是提升了安全性,做好了租戶隔離。在公有云和私有云的租戶環境是非常有用的功能。