1 /同義語と基になるオブジェクトの特権はどのように関連していますか?同義語の権利がある場合、彼は自動的にテーブルの権利を持ち、その逆も同様ですか?
Oracle 言う
シノニムに対するオブジェクト特権を付与すると、実際には基になるオブジェクトに対する特権が付与され、シノニムはGRANTステートメント内のオブジェクトのエイリアスとしてのみ機能します。
これは、同義語の特権で十分であることを意味します。これにより、テーブル特権がバイパスされます。
別のソース は、テーブルへのアクセス権で十分であり、同義語特権には意味がないことを示しています。
シノニムに対する特権または基になるテーブルのいずれかで十分であることを意味しますか?
2 /動作はプライベートシノニムとパブリックシノニムで同じですか。ユーザーが「表示/アクセス」するための同義語の特権を付与する例は実際には見たことがありません。プライベートシノニムの特権をユーザーに付与するにはどうすればよいですか?
Oracleのドキュメントとあなたが参照したメッセージはどちらもまったく同じことを言っています。シノニムでは特権は付与されません。シノニムに特権を付与しようとすると、データベースは実際にはシノニムによって参照されるオブジェクトに付与を実行します。したがって、シノニムによって参照されるオブジェクトに対して実際の付与が行われるため、シノニムがパブリックであるかプライベートであるかは関係ありません。
幸運を祈ります。
何が起こるかを示しましょう:
-- Logged in as user BOB2
CREATE TABLE RPJ_TEST (N NUMBER);
SELECT *
FROM DBA_TAB_PRIVS
WHERE TABLE_NAME = 'RPJ_TEST';
-- the above statement returns no rows
CREATE SYNONYM RPJ_TEST_SYN -- create synonym
FOR RPJ_TEST;
SELECT *
FROM DBA_TAB_PRIVS
WHERE TABLE_NAME = 'RPJ_TEST';
-- the above statement returns no rows
GRANT SELECT ON RPJ_TEST TO BOB; -- grant on table
SELECT *
FROM DBA_TAB_PRIVS
WHERE TABLE_NAME = 'RPJ_TEST';
-- the above statement returns
GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRANTABLE HIERARCHY
BOB BOB2 RPJ_TEST BOB2 SELECT NO NO
GRANT UPDATE ON RPJ_TEST_SYN TO BOB2; -- grant "on synonym" actually performs grant on table
SELECT *
FROM DBA_TAB_PRIVS
WHERE TABLE_NAME = 'RPJ_TEST';
GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRANTABLE HIERARCHY
BOB BOB2 RPJ_TEST BOB2 SELECT NO NO
BOB BOB2 RPJ_TEST BOB2 UPDATE NO NO
シノニムRPJ_TEST_SYNでの付与後、シノニムによって参照されるテーブルで付与される特権が変更されていることに注意してください。
Oracle Docから「パブリックシノニムはPUBLICという名前の特別なユーザーグループによって所有され、データベース内のすべてのユーザーがアクセスできます。プライベートシノニムは特定のユーザーのスキーマに含まれ、ユーザーと基礎となる被付与者のみが使用できます。オブジェクト。」
スキーマBのテーブルXにパブリックシノニムPUBSがある場合、ユーザーAはユーザーBのテーブルXにアクセスできます。スキーマBのテーブルYにプライベートシノニムPVTSがある場合、ユーザーAは、上記のように明示的にアクセスが許可されない限り、ユーザーBのテーブルYにアクセスできません。
チェック OracleDoc