客先のシステムで使用しているOracle11gのあるテーブルを
別システムからも参照したいということで
更新はできない閲覧権限ユーザを作成することになりました。
別ユーザを作成した場合、スキーマも別になってしまうため
下記のような参照となってしまいます。
「masterA」テーブル作成ユーザ・・・aaa
閲覧権限を与えた別ユーザ・・・bbb
bbbが「masterA」を参照するには下記のように、
スキーマ名.テーブル名で参照する必要がある。
SELECT * FROM aaa.masterA;
別ユーザからもスキーマ名なしで参照できるようシノニムを作成し
下記の手順で閲覧権限ユーザを作成しました。
1.シノニムをつくる
CREATE PUBLIC SYNONYM masterA FOR aaa.masterA;
2.テーブルにpublicでselect権限を付与する
GRANT SELECT ON masterA TO PUBLIC;
3.ユーザを作成する
CREATE USER bbb(ユーザ名)
IDENTIFIED BY パスワード
DEFAULT TABLESPACE ユーザ領域名
TEMPORARY TABLESPACE 一時領域名;
4.ユーザに権限を付与する
GRANT CONNECT, RESOURCE TO bbb;
⇒接続とcreate系のロール(RESOURCE)を付与する
GRANT SELECT ANY TABLE TO bbb;
⇒select権限を付与する