最近、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)監修のもと掲載しています。
元記事は、こちら