権限の再付与は、権限を付与する者が集中する問題を解決します。付与時に 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;