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