いつでも初心

自分が初学時に困った技術ネタを中心に。

GRANT ~ WITH ADMIN OPTIONの実験

【環境】
 ・Oracle Database 19c Enterprise Edition Release 19.0.0.0.0


GRANT文はユーザー(またはロール)に権限を付与することができますが、
WITH ADMIN OPTIONを付け外しした際にどのような動きをするのか、
ちょっと試してみました。
なお基本説明は極力省きますので、記述が足りない部分は公式ドキュメントや
他の方のブログなどで確認してください。

ユーザーの準備

ユーザー内容
gruser_x何も権限を持っていないユーザー
gruser_y何も権限を持っていないユーザー

SQL> sho user
ユーザーは"SYS"です。
SQL> CREATE USER gruser_x IDENTIFIED BY tiger;

ユーザーが作成されました。

SQL> CREATE USER gruser_y IDENTIFIED BY tiger;

ユーザーが作成されました。

システム権限の付与

確認に使用するシステム権限は「create session」とします。
WITH ADMIN OPTION付きのGRANTを試してみましょう。

SQL> sho user
ユーザーは"SYS"です。
SQL> GRANT create session TO gruser_x WITH ADMIN OPTION;

権限付与が成功しました。

gruser_xにcreate session権限が付与されたため、gruser_xは
データベースに接続できます。
加えてWITH ADMIN OPTION 付きであるため、gruser_xはgruser_yに対して
create session権限を付与することができます。

SQL> CONN gruser_x/tiger@pdb1
接続されました。
SQL> GRANT create session TO gruser_y;

権限付与が成功しました。


ちなみにWITH ADMIN OPTIONがないと、他ユーザーへ付与できません。

SQL> CONN gruser_x/tiger@pdb1
接続されました。
SQL> GRANT create session TO gruser_y;
GRANT create session TO gruser_y
*
行1でエラーが発生しました。:
ORA-01031: 権限が不足しています

システム権限の剥奪

gruser_xは他ユーザーへ権限を付与できたわけですが、
もし付与権限を剥奪されたら、gruser_yに付与した権限はどうなるのでしょう?

SQL> sho user
ユーザーは"SYS"です。
SQL> REVOKE create session FROM gruser_x;

取消しが成功しました。
SQL> conn gruser_y/tiger@pdb1
接続されました。

gruser_xの権限が剥奪されても、gruser_yには影響ないようです。


【関連記事】
tmts.hatenablog.jp