Oracleの小さなデータウェアハウスを管理しています。ユーザーdwhmanagerにSELECT ANY TABLE権限が付与されました。
GRANT SELECT ANY TABLE TO dwhmanager WITH ADMIN OPTION;
アイデアは、データウェアハウスの開発者にいくつかのスキーマのテーブルへのアクセスを許可する機能を持つことでした。
例:
GRANT SELECT ON DWHFINANCE.SALES TO johndeveloper;
しかし、私は悪名高いORA-01031:不十分な特権
ただし、 "johndeveloper"にSELECT ANY TABLE特権を与えることもできます。これにより、彼はデータウェアハウスの任意のテーブルを選択できますが、それは多すぎるため、私の意図ではありません。
それで、他のスキーマの個々のテーブルに権限を与える権限を与えるために、メインDBAに私に付与するように依頼する必要があるのはどの権限ですか?
Adminオプションで許可された特定のテーブルへのselect
アクセス権が必要です
GRANT SELECT ON <<table name>>
TO dwhManager
WITH ADMIN OPTION;
これは、テーブルごとに実行する必要があります。あなたは動的SQLを使ってループでそれを行うことができます
BEGIN
FOR t IN (SELECT *
FROM dba_tables
WHERE owner = <<schema owner>>)
LOOP
EXECUTE IMMEDIATE 'GRANT SELECT ON ' ||
t.owner || '.' || t.table_name ||
' TO dwhManager WITH ADMIN OPTION';
END LOOP;
END;
新しいテーブルを作成するたびに、新しい付与を行う必要があります。
あなたはおそらくオブジェクト権限を付与したいでしょう
DBAとして:
GRANT GRANT ANY OBJECT PRIVILEGE TO dwhmanager;
AS dwhmanager:
grant select on DWHFINANCE.SALES TO johndeveloper;
プレスト!
私にとっては、WITH ADMIN OPTIONなしで機能し、テーブルとスキーマの名前に二重引用符が付いていました
set serveroutput on format Word_wrapped;
BEGIN
FOR t IN (SELECT *
FROM dba_tables
WHERE owner = 'EIDPKI')
LOOP
DBMS_OUTPUT.put_line('GRANT SELECT ON "' || t.owner || '"."' || t.table_name || '" TO OTC_READONLY');
EXECUTE IMMEDIATE 'GRANT SELECT ON "' || t.owner || '"."' || t.table_name || '" TO YourUser';
END LOOP;
END;