1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[23c SQL新機能] テーブルごとのアクセス権付与がすごく便利に!

Last updated at Posted at 2023-10-06

環境

・Oracle Database 23c
 ※DBエディションやOSによって差異はなし

やれること

23cより前までは、テーブルごとにSELECT権限を付与する必要がありました。
23cでは、1つのSQLで一括付与できます。
また権限付与したあとに作られたテーブルであっても自動付与されます。

image.png

構文

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>
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?