株式会社コーソル

コーソルDatabaseエンジニアのブログ

技術ブログ

Autonomous Databaseの制約とPDBロックダウンプロファイル

渡部です。Autonomous DatabaseはFull-Managedのデータベースサービスです。

Full-Managedにより、データベース管理作業が自動化されDBAの負荷を軽減できますが、その反面、実行可能な操作に大きな制限が課せられます。

イベント告知です。2019年04月24日(水) 18:30 ~ 21:00 Oracle Cloud Meetup 九州 #2
Oracle Cloud Autonomous Databaseについてお話させていただきます。詳細は以下をご覧くださいませ。

Autonomous Databaseの制限

主な制限には以下があります。

  • OSへのssh接続ができない
  • データベースへのSYSユーザー接続ができない
  • 表領域の追加ができない
  • セキュリティ設定の変更ができない

詳細については、以下を確認ください。

接続の制限については、実装方法は容易に理解できますが、
表領域の追加などのOracle Databaseでの機能制限については、どのように実装されているのでしょうか。

以下の記事で説明した通り、Autonomous Databaseの実体はPDBです。

勘の良いかたはこの時点でお気づきになるかもしれませんが、これらのOracle Databaseの機能制限はPDBロックダウンプロファイル機能を用いて実装されています。

adb_pdb_lockdown_profile_01.png

PDBロックダウンプロファイルとは

PDBロックダウンプロファイルとは、PDBで実行可能な操作を制限するOracle Databaseの機能です。
Oracle Database 12c R2で導入されました。

様々なデータベースをPDBとしてマルチテナント環境に統合した場合、PDBの構成変更に制約をかけたい場合があります。
それぞれのPDBでバラバラの構成を許すと、構成が複雑になり、ひいては管理コストの増加をもたらすためです。
また、セキュリティ上の問題や意図しないリソースの消費につながりかねない一部の操作を禁止したい場合もあります。

このような場合、PDBロックダウンプロファイルを構成して、PDBで実行可能な操作を制限します。

Autonomous Data Warehouseのロックダウンプロファイル設定を見てみる

まず、初期化パラメータ PDB_LOCKDOWN を見てみると、'DWCS'という値が設定されており、ロックダウンプロファイルが有効であること、ロックダウンプロファイル設定がDWCSであることがわかります。

SQL> show parameter PDB_LOCKDOWN
NAME                      TYPE        VALUE
------------------------- ----------- ------
_pdb_lockdown_ddl_clauses big integer 131066
pdb_lockdown              string      DWCS

次に、ビュー v$lockdown_rules を見てみると、機能(FEATURE)の制限は以下であることがわかります。

SQL> SELECT RULE, STATUS FROM v$lockdown_rules WHERE RULE_TYPE = 'FEATURE' AND status ='DISABLE';

RULE                                             STATUS
------------------------------------------------ -------
COMMON_SCHEMA_ACCESS                             DISABLE
CONNECTIONS                                      DISABLE
CTX_LOGGING                                      DISABLE
LOCAL_USER_PROTECTED_SCHEMA_ACCESS               DISABLE
NETWORK_ACCESS                                   DISABLE
OS_ACCESS                                        DISABLE
SYSTEM_DATA                                      DISABLE
XDB_DEPRECATED                                   DISABLE

8行が選択されました。

文(STATEMENT)の制限についてはは、句の指定がない制限と句の指定がある制限にわけて見てみます。
句の指定がない制限は、句の指定によらず、その文の実行をすべて制限します。"CREATE TABLESPACE"をはじめとする、多くの文の実行が禁止されていることがわかります。

SQL> SELECT RULE, count(*) FROM v$lockdown_rules
  2    WHERE RULE_TYPE = 'STATEMENT'
  3      AND CLAUSE IS NULL
  4    GROUP BY RULE order by 2 desc;

RULE                                               COUNT(*)
------------------------------------------------ ----------
CREATE TABLESPACE                                         1
DROP INDEXTYPE                                            1
CREATE INDEX                                              1
ADMINISTER KEY MANAGEMENT                                 1
ALTER SYSTEM                                              1
DROP MATERIALIZED VIEW LOG                                1
CREATE DATABASE LINK                                      1
ALTER PROFILE                                             1
CREATE PROFILE                                            1
ALTER SESSION                                             1
DROP INDEX                                                1
CREATE MATERIALIZED VIEW LOG                              1
ALTER TABLESPACE                                          1
ALTER DATABASE                                            1
CREATE INDEXTYPE                                          1
ALTER PLUGGABLE DATABASE                                  1
ALTER MATERIALIZED VIEW                                   1
DROP MATERIALIZED VIEW                                    1
DROP TABLESPACE                                           1
CREATE MATERIALIZED VIEW                                  1
ALTER INDEX                                               1
ALTER MATERIALIZED VIEW LOG                               1
ALTER INDEXTYPE                                           1

23行が選択されました。

句の指定がある制限は、句の指定があるパターンにマッチする場合、その文の実行を制限します。

SQL> SELECT RULE, count(*) FROM v$lockdown_rules
  2    WHERE RULE_TYPE = 'STATEMENT'
  3      AND CLAUSE IS NOT NULL
  4    GROUP BY RULE order by 2 desc;

RULE                                               COUNT(*)
------------------------------------------------ ----------
ALTER SYSTEM                                             58
ALTER SESSION                                            55
ALTER DATABASE                                            8
ALTER PLUGGABLE DATABASE                                  8

SQL> SELECT clause, clause_option, status FROM v$lockdown_rules
  2    WHERE RULE_TYPE = 'STATEMENT'
  3      AND RULE = 'ALTER SYSTEM'
  4    ORDER BY status;

CLAUSE           CLAUSE_OPTION                                    STATUS
---------------- ------------------------------------------------ -------
SET              RESULT_CACHE_MAX_RESULT                          DISABLE
SET              _MAX_IO_SIZE                                     DISABLE
SET              RESULT_CACHE_MODE                                DISABLE
SET              _PARALLEL_CLUSTER_CACHE_POLICY                   DISABLE
                                                                  DISABLE
SET              _CLOUD_SERVICE_TYPE                              DISABLE
SET              _OPTIMIZER_GATHER_STATS_ON_LOAD_ALL              DISABLE
SET              _PDB_LOCKDOWN_DDL_CLAUSES                        DISABLE
SET              _DEFAULT_PCT_FREE                                DISABLE
SET              _OPTIMIZER_GATHER_STATS_ON_LOAD_HIST             DISABLE
SET              "_PDB_MAX_DIAG_SIZE"                             DISABLE
SET              "_PDB_MAX_AUDIT_SIZE"                            DISABLE
SET              DB_FILES                                         DISABLE
SET              MAX_IDLE_BLOCKER_TIME                            DISABLE
SET              _DATAPUMP_GATHER_STATS_ON_LOAD                   DISABLE
SET              _OPTIMIZER_ANSWERING_QUERY_USING_STATS           DISABLE
SET              RESOURCE_MANAGER_PLAN                            DISABLE
SET              _ENABLE_PARALLEL_DML                             DISABLE
SET              _LDR_IO_SIZE                                     DISABLE
SET              _DATAPUMP_INHERIT_SVCNAME                        DISABLE
SET              _PX_XTGRANULE_SIZE                               DISABLE
SET              _OPTIMIZER_ALLOW_ALL_ACCESS_PATHS                DISABLE
SET              PARALLEL_MIN_DEGREE                              DISABLE
SET              "_PDB_INHERIT_CFD"                               DISABLE
SET              _CELL_OFFLOAD_VECTOR_GROUPBY                     DISABLE
SET              PARALLEL_DEGREE_POLICY                           DISABLE
SET              NLS_TIMESTAMP_FORMAT                             ENABLE
SET              MAX_IDLE_TIME                                    ENABLE
SET              NLS_NCHAR_CONV_EXCP                              ENABLE
SET              OPTIMIZER_IGNORE_HINTS                           ENABLE
SET                                                               ENABLE
KILL SESSION                                                      ENABLE
SET              APPROX_FOR_AGGREGATION                           ENABLE
SET              NLS_NUMERIC_CHARACTERS                           ENABLE
SET              NLS_CALENDAR                                     ENABLE
SET              PLSQL_CCFLAGS                                    ENABLE
SET              NLS_ISO_CURRENCY                                 ENABLE
SET              NLS_TIME_TZ_FORMAT                               ENABLE
SET              OPTIMIZER_IGNORE_PARALLEL_HINTS                  ENABLE
SET              NLS_DUAL_CURRENCY                                ENABLE
SET              NLS_SORT                                         ENABLE
SET              NLS_LANGUAGE                                     ENABLE
SET              PLSQL_WARNINGS                                   ENABLE
SET              FIXED_DATE                                       ENABLE
SET              NLS_DATE_FORMAT                                  ENABLE
SET              APPROX_FOR_COUNT_DISTINCT                        ENABLE
SET              NLS_TIME_FORMAT                                  ENABLE
SET              NLS_CURRENCY                                     ENABLE
SET              PLSQL_OPTIMIZE_LEVEL                             ENABLE
SET              NLS_COMP                                         ENABLE
SET              PLSCOPE_SETTINGS                                 ENABLE
SET              AWR_PDB_AUTOFLUSH_ENABLED                        ENABLE
SET              NLS_TIMESTAMP_TZ_FORMAT                          ENABLE
SET              PLSQL_DEBUG                                      ENABLE
SET              NLS_DATE_LANGUAGE                                ENABLE
SET              DDL_LOCK_TIMEOUT                                 ENABLE
SET              APPROX_FOR_PERCENTILE                            ENABLE
SET              NLS_LENGTH_SEMANTICS                             ENABLE
SET              NLS_TERRITORY                                    ENABLE

59行が選択されました。

ALTER SYSTEMについて句の指定がある制限を見てみると、以下のことがわかります。

  • 設定を許す初期化パラメータについては、status='ENABLE'で明示的にALTER SYSTEM SETの実行を許している。
  • 設定を許さない初期化パラメータについては、status='DISABLE'で明示的にALTER SYSTEM SETの実行を禁止している。
  • ALTER SYSTEM KILL SESSIONについては、(ALTER SYSTEMの中では例外的に)実行を許している。

イベント告知です。2019年04月24日(水) 18:30 ~ 21:00 Oracle Cloud Meetup 九州 #2
Oracle Cloud Autonomous Databaseについてお話させていただきます。詳細は以下をご覧くださいませ。

プロフィール

On7tWW6m1Ul4

渡部 亮太

・Oracle ACE
・AWS Certified Solutions Architect - Associate
・ORACLE MASTER Platinum Oracle Database 11g, 12c 他多数

カテゴリー

アーカイブ