※ 本記事は2017年1月30日に公開されたものです。
Oracle Databaseでは論理バックアップを取得するためにエクスポート/インポートの仕組みを提供しています。ユーザーが自分のスキーマのオブジェクトをエクスポートする際にはダンプファイルを出力するディレクトリへの書込み権限以外データにアクセスする権限を特に追加する必要はありませんが、他スキーマのオブジェクトを含めてエクスポートを実行する際に、EXP_FULL_DATABASEロールを付与することがあると思います。
実はこのEXP_FULL_DATABASEロールには強力な権限が付与されているため注意が必要です。
SQL> select privilege from dba_sys_privs where grantee='EXP_FULL_DATABASE'; PRIVILEGE ---------------------------------------- CREATE TABLE RESUMABLE EXECUTE ANY PROCEDURE EXEMPT REDACTION POLICY ADMINISTER SQL MANAGEMENT OBJECT BACKUP ANY TABLE READ ANY FILE GROUP ADMINISTER RESOURCE MANAGER EXECUTE ANY TYPE SELECT ANY SEQUENCE SELECT ANY TABLE CREATE SESSION 12行が選択されました。
全てのユーザーの表を参照できるSELECT ANY TABLEシステム権限に加えて、全てのユーザーのストアドプロシージャを実行できるEXECUTE ANY PROCEDURE、さらにはData RedactionのセキュリティポリシーをバイパスできるEXEMPT REDACTION POLICYが付与されます。
同様にIMP_FULL_DATABASEにも、さらに強力な権限が付与されています。
SQL> select privilege from dba_sys_privs where grantee='IMP_FULL_DATABASE'; PRIVILEGE ---------------------------------------- GRANT ANY OBJECT PRIVILEGE DROP ANY DIMENSION CREATE ANY LIBRARY DROP ANY DIRECTORY DROP ANY MATERIALIZED VIEW DROP PROFILE DROP ANY PROCEDURE DROP PUBLIC DATABASE LINK DROP ANY CLUSTER ALTER ANY TABLE AUDIT SYSTEM RESUMABLE GLOBAL QUERY REWRITE ALTER ANY TYPE ALTER PROFILE EXECUTE ANY PROCEDURE CREATE ANY CLUSTER DROP ROLLBACK SEGMENT BECOME USER DROP TABLESPACE DROP ANY OPERATOR CREATE ANY OPERATOR ANALYZE ANY ALTER ANY PROCEDURE CREATE ANY SEQUENCE COMMENT ANY TABLE ADMINISTER SQL MANAGEMENT OBJECT CREATE ANY SQL PROFILE DROP ANY SQL PROFILE ALTER ANY TRIGGER AUDIT ANY CREATE ROLE DROP ANY SYNONYM DROP ANY INDEX ALTER USER MANAGE ANY QUEUE EXECUTE ANY OPERATOR DROP ANY TRIGGER DROP ANY SEQUENCE DELETE ANY TABLE UPDATE ANY TABLE INSERT ANY TABLE DROP ANY TABLE CREATE ANY TABLE ADMINISTER RESOURCE MANAGER CREATE ANY DIMENSION DROP ANY INDEXTYPE DROP ANY LIBRARY EXECUTE ANY TYPE DROP ANY TYPE CREATE ANY DIRECTORY GRANT ANY PRIVILEGE ALTER RESOURCE COST CREATE PROFILE CREATE ANY PROCEDURE CREATE ANY SYNONYM CREATE ROLLBACK SEGMENT CREATE TABLESPACE DROP ANY CONTEXT CREATE ANY TYPE CREATE ANY TRIGGER ALTER DATABASE CREATE PUBLIC SYNONYM CREATE ANY INDEX SELECT ANY TABLE CREATE USER CREATE SESSION ADMINISTER DATABASE TRIGGER DROP ANY OUTLINE CREATE ANY CONTEXT CREATE ANY INDEXTYPE CREATE ANY MATERIALIZED VIEW GRANT ANY ROLE DROP ANY ROLE CREATE PUBLIC DATABASE LINK CREATE DATABASE LINK DROP ANY VIEW CREATE ANY VIEW DROP PUBLIC SYNONYM DROP USER 80行が選択されました。
ユーザーの作成・削除といったアカウント管理から、全てのスキーマへの表の作成・削除・参照・更新・削除といったほぼデータベース管理者に近いデータ操作権限が割り当てられてしまいます。
もちろん業務上これらの操作が必要であればロールは割り振らなくてはいけないのですが、必要な時に付与し作業が終わったら剥奪する、付与したユーザーの操作を監査する、エクスポート/インポートバッチ専用ユーザーに付与しバッチの中に処理をコーディングし運用ツールからバッチを呼び出す形で定形処理しかできないようにするなど、このロールを付与されたユーザーが自由にアドホックな処理ができないような仕組みを作るような工夫をするように考慮して下さい。
