0
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

expdpで指定するディレクトリの権限でちょっとはまった話(初心者向け)

こんにちは。hrkii123と申します。

このエントリはJPOUGアドベントカレンダー2019の18日目の記事です。

Qiita初投稿がJPOUGアドベントカレンダー2019となりました。

JPOUGアドベントカレンダー2019
https://adventar.org/calendars/4154

はじめに

今回はdatapumpのexpdpユーティリティではまったお話です。

とある日のこと。開発チームごとにOSユーザ、DBユーザ、OSディレクトリ等を分け、チーム間で互いにデータを参照できないようにするという要件のなかDB周りの設計を行っていました。
その中で、datapumpでエクスポートするOSディレクトリもチームごとに用意し、お互いのダンプファイルを参照できないようにしてほしいと注文が入りました。

私はそんなのOSディレクトリのパーミッションで簡単に制御できるじゃーんって思ってました。
(そう簡単にはいかなかった。)

で、いろいろ試した検証内容をまとめました。

概要図

datapumpでuser_Aスキーマを/var/work/Adirへエクスポートします。
エクスポート後、Aadminユーザのみ/var/work/Adir配下のダンプファイルへアクセス可能で、Badminユーザはアクセスできないようにします。
アクセスの可否はOSディレクトリのパーミッション設定で行います。また、図では記載していませんが、DBは12.1のRAC環境を使いました。(たまたま仮想マシンがあったので..)

無題のプレゼンテーション (3).png

検証用にDBユーザ”user_A”とディレクトリオブジェクト”dirA”を作成しておきます。
DBユーザ”user_A”には必要な権限を付与しておきます。

create user user_A identified by welcome1;
CREATE DIRECTORY dirA AS '/var/work/Adir';
grant create session,resource,unlimited tablespace to user_A;
grant read, write on directory dirA to user_A;

さて、この状態でexpdpを実行できるでしょうか。

/u01/app/oracle/product/12.1.0/dbhome_1/bin/expdp user_A/welcome1@testdb directory=dirA dumpfile=expdp_A.log schemas=user_A

下記出力の通り、エラーとなりました。

ORA-39002: invalid operation
ORA-39070: Unable to open the log file.
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation

上記のエラーはOSディレクトリのパーミッションが適切ではないときに出力されます。

ディレクトリオブジェクトで指定しているOSディレクトリは所有者Aadmin、所有グループAadminとなっております。datapumpの仕様でエクスポートされるダンプファイルは所有者oracle、所有グループasmadminとなります。つまりdatapumpの実行ではoracleユーザとasmadminグループからのアクセスが許可できている必要があります。OSディレクトリのパーミッションが777であれば何も気にする必要はないですが、今回の場合ではoracleユーザはAadminグループに属していないため、OSディレクトリへのアクセスができません。

対処として、今回はoracleユーザとgridユーザのセカンダリグループにAadminを追加することにします。

id oracle
uid=54321(oracle) gid=54321(oinstall)groups=54321(oinstall),54322(dba),1101(oper),1102(backupdba),1103(dgdba),1104(kmdba),1201(asmdba),54323(Aadmin)

id grid
uid=1100(grid) gid=54321(oinstall)groups=54321(oinstall),1200(asmadmin),1201(asmdba),1202(asmoper),54323(Aadmin)

今度は成功するでしょうか。

ORA-39002: invalid operation
ORA-39070: Unable to open the log file.
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation

また出ました。このエラー!!
OSディレクトリへのアクセスはできるはずなのに、、

ちなみにOSディレクトリのパーミッションを777に変更すると、正常に動作します。

$ /u01/app/oracle/product/12.1.0/dbhome_1/bin/expdp user_A/welcome1@testdb directory=dirA 
dumpfile=expdp_A.log schemas=user_A

Export: Release 12.1.0.2.0 - Production on Sun Dec 15 03:53:01 2019

Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Advanced Analytics and Real Application Testing options
Starting "USER_A"."SYS_EXPORT_SCHEMA_01":  user_A/********@testdb directory=dirA dumpfile=expdp_A.log schemas=user_A
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 0 KB
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type SCHEMA_EXPORT/STATISTICS/MARKER
Master table "USER_A"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for USER_A.SYS_EXPORT_SCHEMA_01 is:
  /var/work/Adir/expdp_A.log
Job "USER_A"."SYS_EXPORT_SCHEMA_01" successfully completed at Sun Dec 15 03:53:42 2019 elapsed 0 00:00:38

[oracle@node1 ~]$

結局どうやったか

RAC環境でoracle,gridユーザのセカンダリグループを追加する際にはクラスタウェアへ認識させる必要があります!グループ追加後にクラスタウェアを再起動することで認識されます。
pmonのプロセスを確認することでユーザのグループが追加されたことをクラスタウェアが認識しているかを確認することができます。

CRS再起動後

ps -ef | grep pmon
    grid     14417     1  0 05:37 ?        00:00:00 asm_pmon_+ASM1
    oracle   15136     1  0 05:37 ?        00:00:00 ora_pmon_ctestdb1
    grid     15143     1  0 05:37 ?        00:00:00 mdb_pmon_-MGMTDB
    oracle   30528 27106  0 06:06 pts/1    00:00:00 grep pmon

cat /proc/14417/status |grep Groups

    Groups: 1200 1201 1202 54321 54323 ★54323(Aadmin)が認識されている

cat /proc/15136/status |grep Groups

  Groups: 1101 1102 1103 1104 1201 54321 54322 54323 ★54323(Aadmin)が認識されている

これでようやくexpdpが可能となりました。

$ /u01/app/oracle/product/12.1.0/dbhome_1/bin/expdp user_A/welcome1@testdb directory=dirA dumpfile=expdp_A.log schemas=user_A

Export: Release 12.1.0.2.0 - Production on Sun Dec 15 05:58:12 2019

Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Advanced Analytics and Real Application Testing options
Starting "USER_A"."SYS_EXPORT_SCHEMA_01":  user_A/********@testdb directory=dirA dumpfile=expdp_A.log schemas=user_A
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 0 KB
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type SCHEMA_EXPORT/STATISTICS/MARKER
Master table "USER_A"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for USER_A.SYS_EXPORT_SCHEMA_01 is:
  /var/work/Adir/expdp_A.log
Job "USER_A"."SYS_EXPORT_SCHEMA_01" successfully completed at Sun Dec 15 05:58:36 2019 elapsed 0 00:00:23

実現したかったアクセス制御もできております。

$ id
uid=54323(Badmin) gid=54324(Badmin) groups=54324(Badmin)
$ cd /var/work/Adir/
-bash: cd: /var/work/Adir/: Permission denied
$ ls -l /var/work/Adir/
ls: cannot open directory /var/work/Adir/: Permission denied

以上になります。

JPOUGアドベントカレンダー2019の19日目の記事もお楽しみに~

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
0
Help us understand the problem. What are the problem?