記事
· 2024年3月3日 2m read

ユーザではなくロールに対してSQL権限を割り当てる方法

これは InterSystems FAQ サイトの記事です。

ユーザに権限を与えたい場合、「GRANT」コマンドや「GrantPrivilegeメソッド」を使用しますが、ロールに対しても権限を与えることができます。

例えば、特定スキーマにのみ何でもできるロールを作成し、それを特定のユーザに割り当てるようなことが可能となります。

こちらの記事では、その方法をご紹介します。


(1) GrantPrivilegeメソッドを使用して「スキーマXXX に何でもできるロール」を作成し、
(2) 該当ユーザに (1) のロールを割り当てる



★GRANT文を使う場合

GRANT <priv> ON SCHEMA <your schema> TO <role>


例:ロール testRole に、スキーマ XXX に対する、挿入/更新/参照/削除 の権限を付与します。

GRANT Insert,Update,Select,Delete ON SCHEMA XXX TO testRole
※その他、Alter, References, Execute, Use などの指定も可能です。

こちらは、まだ存在しないスキーマに対しても実行可能です。
XXXスキーマにテーブルが登録されれば、自動的にそのテーブルに対して指定した権限が有効になります。


★$SYSTEM.SQL.Security.GrantPrivilege() を使う場合

GrantPrivilegeメソッド

例) ロール testRole に、スキーマ XXX に対する、挿入/更新/参照/削除 の権限を付与します

set x= $SYSTEM.SQL.Security.GrantPrivilege("Insert,Update,Select,Delete","XXX","Schema","testRole")

※GrantPrivilegeメソッドは、指定されたユーザ (またはユーザのリスト) に特権を付与するメソッドとして周知されていますが、ロールに対して割り当てることも可能です。
※その他、Alter, References, Execute, Use などの指定も可能です。
※第1引数には、"*" (全指定) の設定も可能です。

まだ存在しないスキーマに対しても実行可能です。
XXXスキーマにテーブルが登録されれば、自動的にそのテーブルに対して指定した権限が有効になります。

また逆に、指定のロールから権限を奪うのは、同じ引数で、RevokePrivilegeメソッドを実行してください。

set x=$SYSTEM.SQL.Security.RevokePrivilege(...

付与する権限を変更したい場合は、第1引数を変更します。
たとえば "Insert,Update,Select" だけにすれば、挿入/更新/参照 だけが付与されます。

 

【注意】
CREATE TABLE、DROP TABLE については制限があります。
現バージョンでは、 CREATE TABLE (%CREATE_TABLE 権限) や DROP TABLE (%DROP_TABLE 権限) については、スキーマ単位で 有無の設定は出来ない仕様となっていますのでご注意ください。
CREATE TABLE、DROP TABLE については、ネームスペース単位での権限を与えることが可能です。

ディスカッション (0)0
続けるにはログインするか新規登録を行ってください