2.7.2 ロールの運用手順
次の3つのロールを作成してUSER1,USER2,USER3の権限を設定する場合の,ロールの運用手順を,図「ロールの概要」に基づいて説明します。
-
業務A用テーブル(TA1,TA2)にアクセスできる権限を持つロール(ロール名:ROLEA)
-
業務B用テーブル(TB1,TB2)にアクセスできる権限を持つロール(ロール名:ROLEB)
-
業務A用テーブル,業務B用テーブルのどちらもアクセスできる権限を持つロール(ロール名:ROLEAB)
ロールの運用手順(使用するSQL文,及び操作)を次に示します。
|
運用手順 |
使用するSQL文概要 |
|
|---|---|---|
|
定義系SQLによるロールの定義 |
表・インデクスなどリソース定義 |
定義系SQL |
|
ロールの定義 |
CREATE ROLE |
|
|
ロールへのアクセス権限付与 |
GRANT アクセス権限 |
|
|
ユーザへのロール利用権限付与 |
GRANT ロール名 TO ユーザ名 |
|
|
ロールへのロール利用権限付与 |
GRANT ロール名 TO ロール名 |
|
|
ロールの使用 |
使用するロールの設定,現在ロールの無効化 |
SET ROLE |
|
ロールが持つアクセス権限の変更 |
ロールからのアクセス権限取り消し |
REVOKE アクセス権限 |
|
ロールへのアクセス権限付与 |
GRANT アクセス権限 |
|
|
ロール利用権限の取り消し |
ユーザからのロール利用権限取り消し |
REVOKE ロール名 FROM ユーザ |
|
ロールからのロール利用権限取り消し |
REVOKE ロール名 FROM ロール名 |
|
|
ロールの削除 |
ロールの削除 |
DROP ROLE |
- 〈この項の構成〉
(1) 表・インデクスなどのリソース定義
ロールでアクセス権限を管理する表・インデクスなどリソースを定義します。
(2) ロールの定義
実行者 HiRDB管理者又はユーザ権限を管理する人(DBA権限保持者)
定義系SQLのCREATE ROLE文で,次に示すロールを作成します。
-
表TA1及び表TA2へのSELECT権限を持ったロールROLEA
-
表TB1及び表TB2へのSELECT権限を持ったロールROLEB
-
表TA1及び表TA2へのSELECT権限を持ったロールROLEA,並びに表TB1及び表TB2へのSELECT権限を持ったロールROLEBの両方のアクセス権限を持ったロールROLEAB
- 例題1
-
ロールROLEAを定義します。
CREATE ROLE ROLEA
- 例題2
-
ロールROLEBを定義します。
CREATE ROLE ROLEB
- 例題3
-
ロールROLEABを定義します。
CREATE ROLE ROLEAB
(3) ロールへのアクセス権限付与
実行者 表の所有者
ロールを作成した後に,定義系SQLのGRANT文でロールにアクセス権限を付与します。
- 例題1
-
実行者(認可識別子:USER001)が所有している表(TA1,TA2)に対して,ロール(ROLEA)にSELECT権限を与えます。
GRANT SELECT ON USER001.TA1 TO ROLEA GRANT SELECT ON USER001.TA2 TO ROLEA
- 例題2
-
実行者(認可識別子:USER002)が所有している表(TB1,TB2)に対して,ロール(ROLEB)にUPDATE権限を与えます。
GRANT UPDATE ON USER002.TB1 TO ROLEB GRANT UPDATE ON USER002.TB2 TO ROLEB
(4) ユーザへのロール利用権限付与
実行者 ロールの作成者
ロールを作成してアクセス権限を付与した後に,定義系SQLのGRANT文でユーザにロールの利用権限を付与します。
- 例題1
-
ロール(ROLEA)のロール利用権限をユーザ(USER001)に与えます。
GRANT ROLEA TO USER001
- 例題2
-
ロール(ROLEB)のロール利用権限をユーザ(USER002)に与えます。
GRANT ROLEB TO USER002
(5) ロールへのロール利用権限付与
実行者 ロールの作成者
ロールを作成してアクセス権限を付与した後に,ロールに対して定義系SQLのGRANT文でロールの利用権限を付与します。また,付与したロール(ROLEAB)の利用権限を,ユーザ(USER003)に付与します。
- 例題
-
ロール(ROLEA,ROLEB)のロール利用権限をロール(ROLEAB)に与えます。
GRANT ROLEA,ROLEB TO ROLEAB
ロール(ROLEAB)のロール利用権限をユーザ(USER003)に与えます。
GRANT ROLEAB TO USER003
(6) 使用するロールの設定
ロールを使用する場合,使用するロールを現在ロールに設定するとロールが持つ権限を使用できます。現在ロールの設定をしないとロール利用権限を持っていてもロールが持つ権限を使用できません。
また,複数のロールのロール利用権限を持っている場合は,SET ROLE文を実行することで現在ロールを変更できます。なお,トランザクション実行中は,現在ロールを変更できません。
次の方法で,使用する現在ロールを設定します。なお,複数のロールを一度に使用することはできません。
実行者 ロール利用権限保持者
制御系SQLのSET ROLE文で次に示すロールを設定します。
-
表TA1及び表TA2へのSELECT権限を持ったロールROLEAを現在ロールに設定します。
- 例題
-
ロールROLEAを現在ロールに設定します。
SET ROLE ROLEA
(7) 現在ロールの無効化
実行者 ロール利用権限保持者
制御系SQLのSET ROLE文(NONE指定)で設定されている現在ロールを無効化します。
-
SET ROLE文(NONE指定)で設定した現在ロール(ROLEA)を無効化します。
例題
現在ロール(ROLEA)を無効化します。
SET ROLE NONE
(8) ロールからのアクセス権限取り消し
実行者 表の所有者
定義系SQLのREVOKE文で,ロールからアクセス権限を取り消します。
- 例題
-
表TA1,TA2のSELECT権限をロール(ROLEA)から取り消します。
REVOKE SELECT ON USER001.TA1 FROM ROLEA REVOKE SELECT ON USER001.TA2 FROM ROLEA
(9) ロールへのアクセス権限付与
実行者 表の所有者
定義系SQLのGRANT文で,ロールにアクセス権限を付与します。
- 例題1
-
実行者(認可識別子:USER001)が所有している表(TA1)に対して,ロール(ROLEA)にDELETE権限を与えます。
GRANT DELETE ON USER001.TA1 TO ROLEA
- 例題2
-
実行者(認可識別子:USER001)が所有している表(TA2)に対して,ロール(ROLEA)に全アクセス権限を与えます。
GRANT ALL ON USER001.TA2 TO ROLEA
(10) ユーザからのロール利用権限取り消し
実行者 ロールの作成者
定義系SQLのREVOKE文で,ユーザに付与されたロール利用権限を取り消します。
- 例題
-
ユーザ(USER001)に付与された,ロール(ROLEA)のロール利用権限を取り消します。
REVOKE ROLEA FROM USER001
(11) ロールからのロール利用権限取り消し
実行者 ロールの作成者
定義系SQLのREVOKE文で,ロールに付与されたロール利用権限を取り消します。
- 例題
-
ロール(ROLEAB)に付与された,ロール(ROLEA,ROLEB)のロール利用権限を取り消します。
REVOKE ROLEA,ROLEB FROM ROLEAB
(12) ロールの削除
ロールを定義系SQLのDROP ROLE文で削除します。
なお,ロールが持つアクセス権限の取り消しやロール利用権限の取り消しを事前に行っていない場合は,関連するリソース(アクセス権限,ロール利用権限)を同時に削除します。
実行者 ロールの作成者
ロールを,定義系SQLのDROP ROLE文で削除します。
- 例題
-
ロール(ROLEA)を削除します。
DROP ROLE ROLEA