権限の再付与は、権限を付与する者が集中する問題を解決します。権限付与時に with admin/grant option を指定することで、ユーザーに対して当該権限を他のユーザーに再付与する権限も同時に付与できます。オブジェクトの権限を取り消す際には、そのユーザーが他のユーザーに再付与した対応する権限も同時に取り消さなければなりません。例えば、AがBに権限を付与し、BがCに権限を付与した場合、AがBの権限を取り消せば、Cの権限も取り消されます。システム権限を取り消す場合、再付与された権限は連鎖して取り消されません。
権限の再付与例
SYSユーザーでクラスタのOracleテナントにログインし、A、B、Cの3人のユーザーを作成します。それぞれにCREATE SESSIONシステム権限を付与し、AユーザーにはGRANT ANY PRIVILEGE権限を個別に付与します。obclient > CREATE USER A IDENTIFIED BY ******; obclient > CREATE USER B IDENTIFIED BY ******; obclient > CREATE USER C IDENTIFIED BY ******; obclient > GRANT CREATE SESSION TO A; obclient > GRANT CREATE SESSION TO B; obclient > GRANT CREATE SESSION TO C; obclient > GRANT GRANT ANY PRIVILEGE TO A;SYSユーザーでtestテーブルを作成します。obclient > CREATE TABLE test (id number(10),name varchar2(10)); Query OK, 0 rows affected (0.050 sec)Aユーザーに
SYSユーザーのtestテーブルをクエリする権限を付与します。obclient > GRANT SELECT ON sys.test TO A;Aユーザーにログインし、Bユーザーにtestテーブルをクエリする権限を付与します。
with grant optionを指定することで、Bユーザーも権限を付与できるようになります。obclient > GRANT SELECT ON sys.test TO B with grant option;Bユーザーに切り替えて、testテーブルをクエリできることを確認します。
obclient > SELECT * FROM sys.testBユーザーにログインし、testテーブルをクエリする権限をCユーザーに付与します。
obclient > GRANT SELECT ON sys.test TO C ;Bユーザーに権限を付与する際に
with grant optionパラメータを指定しなかった場合、BユーザーがCユーザーに同じ権限を再付与しようとすると、次のようなエラーが表示されます。obclient > GRANT SELECT on sys.test TO C ; OBE-01031: insufficient privilegesCユーザーに切り替えて、testテーブルをクエリできることを確認します。権限の再付与は成功しました。
obclient > SELECT * FROM sys.test;