Oracleのロールにはデフォルトロールと非デフォルトロールがあり、デフォルトロールは通常使用できますが、非デフォルトロールは明示的に有効化しない限りは使用できません。
SQL> CREATE ROLE test_role1;
ロールが作成されました。
SQL> GRANT create session TO test_role1;
権限付与が成功しました。
SQL> CREATE ROLE test_role2;
ロールが作成されました。
SQL> GRANT select ON hr.regions TO test_role2;
権限付与が成功しました。
create session権限を持つ、test_role1ロール
オブジェクト権限を持つ、test_role2ロール
この2つのロールを作成しました。
SQL> GRANT test_role1 TO suzuki;
権限付与が成功しました。
SQL> GRANT test_role2 TO suzuki;
権限付与が成功しました。
作成した2つのロールをsuzukiユーザーに付与しました。
この状態では、test_role1、test_role2ともに利用できます。
SQL> ALTER USER suzuki DEFAULT ROLE test_role1;
ユーザーが変更されました。
ただし、デフォルトロールを明示的に指定すると、残りのロールは非デフォルトロールになり、利用できなくなります。
SQL> CONNECT suzuki/oracle
接続されました。
SQL> SELECT * FROM hr.regions;
SELECT * FROM hr.regions
*
行1でエラーが発生しました。:
ORA-00942: 表またはビューが存在しません。
オブジェクト権限である、test_role2が有効でないことを確認しています。
SQL> SET ROLE test_role2;
ロールが設定されました。
非デフォルトロールを有効化するにはSET ROLE~を指定します。
SQL> SELECT * FROM hr.regions;
REGION_ID REGION_NAME
---------- ---------------------------------------------------------------------------
1 EURO
2 AsiaB
3 Asia
4 Middle East and Africa
非デフォルトロールが有効化され、参照できなかった表が参照できるようになりました。
SQL> CREATE ROLE test_role1;
ロールが作成されました。
SQL> GRANT create session TO test_role1;
権限付与が成功しました。
SQL> CREATE ROLE test_role2;
ロールが作成されました。
SQL> GRANT select ON hr.regions TO test_role2;
権限付与が成功しました。
create session権限を持つ、test_role1ロール
オブジェクト権限を持つ、test_role2ロール
この2つのロールを作成しました。
SQL> GRANT test_role1 TO suzuki;
権限付与が成功しました。
SQL> GRANT test_role2 TO suzuki;
権限付与が成功しました。
作成した2つのロールをsuzukiユーザーに付与しました。
この状態では、test_role1、test_role2ともに利用できます。
SQL> ALTER USER suzuki DEFAULT ROLE test_role1;
ユーザーが変更されました。
ただし、デフォルトロールを明示的に指定すると、残りのロールは非デフォルトロールになり、利用できなくなります。
SQL> CONNECT suzuki/oracle
接続されました。
SQL> SELECT * FROM hr.regions;
SELECT * FROM hr.regions
*
行1でエラーが発生しました。:
ORA-00942: 表またはビューが存在しません。
オブジェクト権限である、test_role2が有効でないことを確認しています。
SQL> SET ROLE test_role2;
ロールが設定されました。
非デフォルトロールを有効化するにはSET ROLE~を指定します。
SQL> SELECT * FROM hr.regions;
REGION_ID REGION_NAME
---------- ---------------------------------------------------------------------------
1 EURO
2 AsiaB
3 Asia
4 Middle East and Africa
非デフォルトロールが有効化され、参照できなかった表が参照できるようになりました。

コメント