最近、OracleRDS周りの対応をしているのですが、1つのRDSに複数ユーザー(スキーマ)を入れる場合のもので、スキーマ間でテーブルを参照したり制約を付けている場合があります。
※滅多にないケースなので少し苦労しました。
これは、通常のOracleならSYSDBA権限を付けてしまえばできるのですが、RDSでは付けることができてもDBA権限までなのですが、それだけではだめでした。
例として、下記があるとします。
Aユーザー(スキーマ)
Bユーザー(スキーマ)
BユーザーからAユーザーのテーブルを絡む制約をalterなどすると以下のエラーが発生します。
まず、ORA-00942です。
表またはビューが存在しません。
sqlplusで通常通りbユーザーでログインするとAユーザーのテーブルを参照できるのですが。
select count(*) from a.hoge
そこで、参照したいテーブルにセレクトの権限を付けてみました。
GRANT SELECT on a.hoge TO b;
下記のようなエラーに変わりました。
ORA-01031: 権限が不足しています。
今度は、REFERENCES(参照整合性制約)を付けてみました。
GRANT SELECT,REFERENCES on a.hoge TO b;
これにより、無事エラーが発生しなくなりました。
参考
http://www.shift-the-oracle.com/oerrs/ora-00942.html
http://www.shift-the-oracle.com/privilege/
http://oracle.na7.info/4_2_role.html
こちらの記事はなかの人(kenjionsoku)監修のもと掲載しています。
元記事は、こちら