これは InterSystems FAQ サイトの記事です。
管理ポータル > [システム管理] > [セキュリティ] 以下の設定は、%SYSネームスペースにあるSecurityパッケージ以下クラスが提供するメソッドを利用することでプログラムから作成することができます。
ユーザ設定については、Security.UsersクラスのCreate()メソッドを使えば作成できますが、ユーザを作成するだけでは適切な権限が付与されずに目的のデータにアクセスできない状況もあります。
例)testAユーザ作成
%SYS>set st=##class(Security.Users).Create("testA",,"testA","これはテストユーザです","USER")
%SYS>write st
1
上記メソッドで作成した結果は以下の通りです。(ロール付与無し、テーブルに対する権限の割り当てもなしの状態)

以降の解説では、以下のシナリオをもとにした設定を行っていきます。
シナリオ:アプリケーション開発者用ロールとユーザを作成する
1) アプリケーション開発者のtestAは、USERネームスペースにログインするアプリケーション開発者です(=%DevelopmentリソースのUse許可を与えます)。
2) このユーザはUSERネームスペース内で自由にテーブルの作成・参照・更新が行えるよう適切な特権を持つように定義します。
1) のアプリケーション開発者testAの作成は、以下の通りです。
未作成の場合は以下実行します。(現時点ではロールは何も付与していません。)
- 第1引数:ユーザ名
- 第2引数:ロール(複数ある場合はカンマ区切りで指定)
- 第3引数:パスワード
- 第4引数:ユーザのフルネーム
- 第5引数:開始ネームスペース(ログイン後にアクセスするネームスペース)
%SYS>set st=##class(Security.Users).Create("testA",,"testA","これはテストユーザです","USER")
%SYS>write st
1
2)で触れられているテーブルの特権はユーザに直接付与することもできますが、ロールにも付与できます。
アプリケーション開発者であるtestA 以外にも開発者が増えたとき簡単に同じ設定をユーザに追加できるよう、%DevelopmentリソースのUse許可、%DB_USERロール、テーブルに対する操作が行える特権を追加したロール:MyAppDeveloper を作成します。
%SYSネームスペースで実行します。
set st=##class(Security.Roles).Create("MyAppDeveloper","アプリケーション開発者用ロール","%Development:U","%DB_USER")
Security.RolesクラスのCreate()メソッドに指定する引数は以下の通りです。
第1引数:ロール名
第2引数:ロールの説明
第3引数:リソースの割り当て(未指定もOK)
第4引数:割り当てるロール(複数ある場合はカンマ区切りで指定)
管理ポータルでは以下のように表示されます。
管理ポータル > [システム管理] > [セキュリティ] > [ロール] > [MyAppDeveloper]ロールの「Assigned To」タブ選択


このロールにUSERネームスペースの全てのSQL管理者特権を付与します。
set p=##class(Security.SQLAdminPrivilegeSet).%New()
set p.AlterTable=1
set p.AlterView=1
set p.BuildIndex=1
set p.CancelQuery=1
set p.CreateFunction=1
set p.CreateMethod=1
set p.CreateProcedure=1
set p.CreateTable=1
set p.CreateTrigger=1
set p.CreateView=1
set p.DropFunction=1
set p.DropProcedure=1
set p.DropQuery=1
set p.DropTable=1
set p.DropTrigger=1
set p.DropView=1
set p.Namespace="USER"
set p.Grantee="MyAppDeveloper"
set st=p.%Save()
ロールMyAppDeveloperの[SQL Admin Privileges]


最後に、アプリケーション開発者testAに作成したロール:MyAppDeveloperを付与します。(AddRoles()メソッドを使用します。)
%SYS>set st=##class(Security.Users).AddRoles("testA","MyAppDeveloper")
%SYS>write st
1
これで設定完了です。
確認のため、管理ポータルをログアウトし、testAユーザでログインします(パスワードはtestAです)
USERネームスペースにアクセスすることを確認し、管理ポータル > [システムエクスプローラ] > [SQL] で任意のSQL文を実行します。(CREATE TABLEなどが実行できることを確認します)