前回のおさらい

こんにちは。

前回はロックダウン・プロファイルの有効化/無効方法を紹介しました。
本ビジネスブログの右側のカテゴリー[Oracle Database管理] > [マルチテナント] から確認できます。

今回はプロファイルの設定方法をご紹介します。

検証環境の紹介

検証環境は、前回の環境をそのまま使用します。
念のため、環境情報を転記します。

DBバージョン 18.3.0.0.0 for Linux x86-64
構成 Restart Singleインスタンス
CDB名 ORCL
PDB名 PDBORCL
PDBORCL2

前回のラストでロックダウン・プロファイルを無効化した続きから開始します。

プロファイルの設定方法

まずは、前回も確認した、TEST_PROFILEの設定内容を確認してみましょう。
 

$ sqlplus / as sysdba

SQL*Plus: Release 18.0.0.0.0 - Production on 土 11月 24 17:35:00 2018

Version 18.3.0.0.0

Copyright (c) 1982, 2018, Oracle.  All rights reserved.

Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production

Version 18.3.0.0.0

に接続されました。

SQL> select profile_name, rule_type, status, rule, clause, clause_option

from dba_lockdown_profiles where profile_name = 'TEST_PROFILE' order by 2,3,6;

PROFILE_NAME RULE_TYPE STATUS  RULE                 CLAUSE   CLAUSE_OPTION

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

TEST_PROFILE STATEMENT DISABLE ALTER SYSTEM         SET      PDB_LOCKDOWN

TEST_PROFILE STATEMENT DISABLE ALTER SESSION        SET      PDB_LOCKDOWN

TEST_PROFILE STATEMENT DISABLE ALTER SYSTEM         SET      SGA_TARGET

TEST_PROFILE STATEMENT DISABLE ALTER SESSION        SET      SGA_TARGET>

SQL>

 
PDB_LOCKDOWN初期化パラメータとSGA_TARGET初期化パラメータの変更が、ALTER SYSTEMとALTER SESSIONの両方で禁止されています。
このSELECT結果から、PDBの操作を、RULECLAUSECLAUSE_OPTIONの3つのパラメータで実現していることがわかります。

また、ロックダウン・プロファイルは、FEATURESOPTIONSSTATEMENTの3通りの制限が存在します。
それぞれ、特定のデータベースの機能、特定のデータベース・オプションの機能、特定のSQL文の発行を制限します。

詳細は、以下のマニュアルに記載があります。

Oracle Database SQL言語リファレンス 18cバージョン 18.1 (E93948-02)
※12cで使用する場合は、12cのSQL言語リファレンスを参照してください。

簡単に紹介すると、以下のようにプロファイルを設定します。
※{ A | B }はAとBの選択、[C]はCに指定する機能が必要な場合のみ記載、を表します。

FEATURES

ALTER LOCKDOWN PROFILE <プロファイル名> <DISABLE/ENABLE>

 FEATURE {= (‘<機能名のリスト※1>’) |

ALL [EXCEPT = (‘<機能名のリスト※1>’)]};

※1 制限可能な機能の一覧と指定する機能名は上記マニュアルを確認してください。
ALLを指定した場合はすべての機能を対象とします。また、EXCEPTはALLに対して指定した機能を除外します。
機能名がRULEとなります。

OPTIONS

ALTER LOCKDOWN PROFILE <プロファイル名> <DISABLE/ENABLE>

 OPTION { = (‘<オプションのリスト※2>’) |

= (‘<オプション名※2>’)  <追加オプション※3> |

ALL [EXCEPT = (‘<オプションのリスト※2>’)]};

※2 オプション名については、v$OPTIONを確認してください。
ALLを指定した場合はすべての機能を対象とします。
また、EXCEPTはALLに対して指定した機能を除外します。オプション名がRULEとなります。
※3 追加オプションは指定するオプションによって異なります。

STATEMENTS

ALTER LOCKDOWN PROFILE <プロファイル名> <DISABLE/ENABLE>

 STATEMENT { = (‘<SQL_STATEMENT※4>’) |

= (‘<SQL_STATEMENT ※4>’) <追加ステートメント※5> |

ALL [EXCEPT = (‘< SQL_STATEMENT ※4>’)]};

※4 SQL_STATEMENTはALTER SYSTEM、ALTER SESSION、ALTER PLUGGABLE DATABASE、ALTER DATABASEの何れか指定します。これがRULEとなります。

※5 追加ステートメントは以下の構文となります。
CLAUSE {= (‘<CLAUSE_STATEMENT※6>’) |
= (‘<CLAUSE_STATEMENT※6>’) OPTION=<追加ステートメント※7> |
ALL [EXCEPT = (‘< CLAUSE_STATEMENT ※6’)]};

※6 SQL文の特定の句を指定します。SQL文の単一の句を明確に指定する必要があります。
たとえば、ALTER SYSTEMに対するARCHIVEで始まる句はARCHIVE LOGのみのため、ARCHIVEと指定すれば十分ですが、FLASHから始まる句は複数あるため、FLUSH SHARD_POOLなどと指定する必要があります。
CLAUSEに反映されます。

※7 SQLの特定の句に対して、追加のオプションを指定します。たとえば、ALTER SYSTEM文のSET句に対して、パラメータ名を指定できます。CLAUSE_OPTIONに反映されます。
 

・・・・・・?

 

 

 

 

全然簡単じゃないですね。FEATURES、OPTIONS、STATEMENTSそれぞれについて一言でいうと、FEATURESとOPTIONSは制限したい機能の名前を指定します。
STATEMENTは制限したいSQL文を、単一の文と特定できる最小のキーワードで指定します。
 

STATEMENTSだけ難しい・・・。

 

 

 

 

とりあえず、RULEにはSQL言語リファレンスの目次になっているところまでを指定します。
CLUSEには、SQL言語リファレンスで、セマンティクスとされている単語までを指定します。
セマンティクスでオプションとされているものはOPTIONに指定します。
※上記の例でいうARCHIVE LOGはセマンティクスでは「LOG」を含みますが、セマンティクスの範囲内であれば、単語の指定が長くてもエラーにはなりません。

また、プロファイルの設定には、ALTER LOCKDOWN PROFILEシステム権限が必要です。

プロファイルを設定する場合は、マニュアルを参照しながらALTER LOCKDOWN PROFILE文を作成し、検証環境を用意し、目的の操作を確実に制限できていることを確認するようにしてください。

また、前回も触れましたが、特別な理由がない限り、ALTER SYSTEM SET PDB_LOCKDOWNとALTER SESSION SET PDB_LOCKDOWNは制限するようにしてください。
※PDB内からALTER LOCKDOWN PROFILE文は実行できないため、こちらは設定不要です。

まとめ

今回はDB統合やクラウド化の際に、PDB間でのルールの統一を簡略化するロックダウン・プロファイルについて紹介させていただきました。

プロファイルの作成が難しいですが、検証環境を用意し、設計段階で確実に動作することを事前に確認しておけば、運用時の負荷を大幅に低減してくれる機能となります。

当社ではマルチテナント環境の導入実績も複数ございますので、今回紹介させていただいた機能に限らず、何かご不明な点や、ご興味を持たれたことがございましたら、お気軽にお問い合わせくださいませ。

投稿者プロフィール

技術チーム
技術チーム
DBひとりでできるもんを盛り上げるべく、技術チームが立ち上がり早6年。ひとりでできるもんと言いつつ、技術者が読んでプッとなるような、極めてピンポイントでマニアックな技術ネタを執筆しています!