web-dev-qa-db-ja.com

複数のテーブルにSELECTを付与するOracle

3つのテーブルtable1、table2、table3があります。これらのテーブルをユーザーuser1に付与(たとえば選択)します。

私は以下を付与できることを知っています:

grant select on table1 to user1;
grant select on table2 to user1;
grant select on table3 to user1;

1つのクエリのみを使用して、3つのテーブルをuser1に付与できますか?

ありがとう

13
Sergio Martinez

いいえ。 ドキュメントが示すように のように、一度に1つのオブジェクトにのみアクセスを許可できます。

16
Chris Saxon

動的クエリを使用して、pl-sqlまたはsqlplusで次のスクリプトを実行するだけで実行できます。

select 'grant select on user_name_owner.'||table_name|| 'to user_name1 ;' from dba_tables t where t.owner='user_name_owner'

そして、結果を実行します。

8
m_abr

私の提案は...を使用してOracleでロールを作成する

create role <role_name>;

次に、そのロールに特権を割り当てます

grant select on <table_name> to <role_name>;

次に、以下を使用して、そのロールを介して任意のユーザーにその特権グループを割り当てます。

grant  <role_name> to <user_name>...;
5
Thiyagu ATR

テーブルとビューの両方に付与したい場合:

SELECT DISTINCT
    || OWNER
    || '.'
    || TABLE_NAME
    || ' to db_user;'
FROM
    ALL_TAB_COLS 
WHERE
    TABLE_NAME LIKE 'TABLE_NAME_%';

ビューだけを試す場合:

SELECT
    'grant select on '
    || OWNER
    || '.'
    || VIEW_NAME
    || ' to REPORT_DW;'
FROM
    ALL_VIEWS
WHERE
    VIEW_NAME LIKE 'VIEW_NAME_%';

結果をコピーして実行します。

0
Aba

これは私のOracleデータベースでうまくいきました:

SELECT   'GRANT SELECT, insert, update, delete ON mySchema.' || TABLE_NAME || ' to myUser;'
FROM     user_tables
where table_name like 'myTblPrefix%'

次に、結果をコピーしてエディターに貼り付け、スクリプトのように実行します。

追加のコピー/貼り付け手順が必要ない場合は、スクリプトを記述し、「即時実行」を使用して生成されたSQLを実行することもできます。

0
mang