ユーザではなくロールに対してSQL権限を割り当てる方法
これは InterSystems FAQ サイトの記事です。
ユーザに権限を与えたい場合、「GRANT」コマンドや「GrantPrivilegeメソッド」を使用しますが、ロールに対しても権限を与えることができます。
例えば、特定スキーマにのみ何でもできるロールを作成し、それを特定のユーザに割り当てるようなことが可能となります。
こちらの記事では、その方法をご紹介します。
(1) GrantPrivilegeメソッドを使用して「スキーマXXX に何でもできるロール」を作成し、
(2) 該当ユーザに (1) のロールを割り当てる
★GRANT文を使う場合
GRANT <priv> ONSCHEMA <your schema> TO <role>
例:ロール testRole に、スキーマ XXX に対する、挿入/更新/参照/削除 の権限を付与します。
GRANTInsert,Update,Select,DeleteONSCHEMA XXX TO testRole
※その他、Alter, References, Execute, Use などの指定も可能です。こちらは、まだ存在しないスキーマに対しても実行可能です。
XXXスキーマにテーブルが登録されれば、自動的にそのテーブルに対して指定した権限が有効になります。
★$SYSTEM.SQL.Security.GrantPrivilege() を使う場合
例) ロール testRole に、スキーマ XXX に対する、挿入/更新/参照/削除 の権限を付与します
setx= $SYSTEM.SQL.Security.GrantPrivilege("Insert,Update,Select,Delete","XXX","Schema","testRole")※GrantPrivilegeメソッドは、指定されたユーザ (またはユーザのリスト) に特権を付与するメソッドとして周知されていますが、ロールに対して割り当てることも可能です。
※その他、Alter, References, Execute, Use などの指定も可能です。
※第1引数には、"*" (全指定) の設定も可能です。
まだ存在しないスキーマに対しても実行可能です。
XXXスキーマにテーブルが登録されれば、自動的にそのテーブルに対して指定した権限が有効になります。
また逆に、指定のロールから権限を奪うのは、同じ引数で、RevokePrivilegeメソッドを実行してください。
setx=$SYSTEM.SQL.Security.RevokePrivilege(...付与する権限を変更したい場合は、第1引数を変更します。
たとえば "Insert,Update,Select" だけにすれば、挿入/更新/参照 だけが付与されます。
【注意】
CREATE TABLE、DROP TABLE については制限があります。
現バージョンでは、 CREATE TABLE (%CREATE_TABLE 権限) や DROP TABLE (%DROP_TABLE 権限) については、スキーマ単位で 有無の設定は出来ない仕様となっていますのでご注意ください。
CREATE TABLE、DROP TABLE については、ネームスペース単位での権限を与えることが可能です。