環境
・Oracle Database 23c
※DBエディションやOSによって差異はなし
やれること
23cより前までは、テーブルごとにSELECT権限を付与する必要がありました。
23cでは、1つのSQLで一括付与できます。
また権限付与したあとに作られたテーブルであっても自動付与されます。
構文
GRANT select any table
ON schema <テーブル所有ユーザ名> TO <権限付与先ユーザ名>;
実行例
(1) テーブル所有者(objuser)のテーブル確認
table11,table12,table13が存在することを確認します。
table14はありません。
SQL> connect objuser/Password_1_2_3@db23
Connected.
SQL> select * from table11;
ID
----------
11
SQL> select * from table12;
ID
----------
12
SQL> select * from table13;
ID
----------
13
SQL> select * from objuser.table14;
select * from objuser.table14
*
ERROR at line 1:
ORA-00942: table or view does not exist
Help: https://docs.oracle.com/error-help/db/ora-00942/
(2) SELECTユーザ(seluser)から参照できないことを確認
ALL_TABLESビューを参照し、参照できないことを確認します。
念のため、table11をSELECTしてみます。
SQL> connect seluser/Password_1_2_3@db23
Connected.
SQL> select table_name from all_tables where owner='objuser';
no rows selected
SQL> select * from objuser.table11;
select * from objuser.table11
*
ERROR at line 1:
ORA-00942: table or view does not exist
Help: https://docs.oracle.com/error-help/db/ora-00942/
(3) SELECT権限の一括付与
objuserが所有するテーブルに対するSELECT権限を一括付与します
SQL> connect objuser/Password_1_2_3@db23
Connected.
SQL> grant select any table on schema objuser to seluser;
Grant succeeded.
(4) SELECTユーザ(seluser)から参照できるを確認
ALL_TABLESビューを参照し、参照できるようになったことを確認します。
念のため、テーブルのSELECTも行います。
table14はまだ存在しないため参照できません。
SQL> connect seluser/Password_1_2_3@db23
Connected.
SQL> select table_name from all_tables where owner='objuser';
TABLE_NAME
---------
TABLE11
TABLE12
TABLE13
SQL> select * from objuser.table11;
ID
----------
11
SQL> select * from objuser.table12;
ID
----------
12
SQL> select * from objuser.table13;
ID
----------
13
SQL> select * from objuser.table14;
select * from objuser.table14
*
ERROR at line 1:
ORA-00942: table or view does not exist
Help: https://docs.oracle.com/error-help/db/ora-00942/
(5) テーブル所有者(objuser)に新しいテーブルを作成します。
table14を作成します。
table14に対するSELECT権限の付与操作はここでは行いません。
SQL> connect objuser/Password_1_2_3@db23
Connected.
SQL> create table table14 (id number);
Table created.
SQL> insert into table14 values(14);
1 row created.
SQL> commit;
Commit complete.
(6) 新しく作成されたテーブルもSELECTユーザ(seluser)から参照できるを確認
table14に対するSELECT権限の付与操作を行いませんでしたが
スキーマに対して一括設定されているため、table14も参照できるようになりました。
SQL> connect seluser/Password_1_2_3@db23
Connected.
SQL> select table_name from all_tables where owner='objuser';
TABLE_NAME
--------------------------------------------------------------------------------
TABLE11
TABLE12
TABLE13
TABLE14
SQL> select * from objuser.table14;
ID
----------
14
SQL>