ビジネス ルール フレームワークのセキュリティ
ビジネス ルール エンジンは、ホスト アプリケーションのセキュリティ コンテキストで動作します。 実行中のルール エンジン インスタンスの ID は、 Policy.Execute メソッドを呼び出すスレッド コンテキストの ID です。
既定のセキュリティ構成
Microsoft BizTalk Serverをインストールすると、既定で 2 つの Microsoft Windows グループが作成されます。1 つは管理者用、もう 1 つはユーザー用です。"BizTalk Server Administrators" と "BizTalk Application Users" です。これら 2 つの Windows グループは、それぞれ RE_ADMIN_USERS と RE_HOST_USERS SQL ロールのメンバーである BTS_ADMIN_USERS と BTS_HOST_USERS SQL ロールのメンバーです。
既定の SQL ロールは、ルール ストアが作成されるたびに作成されます(BTS_ADMIN_USERS、BTS_HOST_USERS、RE_ADMIN_USERS、RE_HOST_USERS)。
既定の Windows グループ | SQL ロール |
---|---|
BizTalk Server 管理者 | RE_ADMIN_USERS |
BizTalk Application Users | RE_HOST_USERS |
RE_ADMIN_USERS ロールのユーザーだけが、展開とエンティティ アクセスの保護に関する構成テーブルを更新するストアド プロシージャを実行できます。 つまり、ルール エンジンの管理者によってのみ、展開、展開解除、および保護の構成が行われます。 RE_HOST_USERS ロールのユーザーは、SQL ルール ストアの他のストアド プロシージャを実行できます。
ルール エンジンのインストールの順序に関係なく、データベース アクセスがまだ許可されていない場合に、ルール エンジン構成のプロセスは、ルール エンジン更新サービスのアカウント メンバーシップに RE_HOST_USERS SQL ロールを与えます。 ただし、BizTalk を最初にインストールした後にルール エンジンをインストールすると、ホストの作成が既に行われているため、ホスト固有のユーザー グループは、ルール エンジン データベースの BTS_HOST_USERS SQL ロールに追加されません。 この手順は手動で実行する必要があります。
アイテム レベルのセキュリティ
ビジネス ルール エンジンでは、既定のセキュリティ構成に加えて、成果物 (ポリシーとボキャブラリ レベル) でセキュリティを提供することもできます。
各ポリシーのバージョンまたは各ボキャブラリのバージョンには、関連する 1 つ以上の認証グループがあります。 認証グループは、Microsoft Windows ユーザー、SQL ユーザー、SQL ロール、および Windows グループの名前付きのリストです。それぞれ特定のアクセス レベルを持っています。
新しいポリシーまたはボキャブラリがルール ストアに作成されると、既定で、ポリシーまたはボキャブラリを作成したユーザーとルール エンジン管理者だけが、読み取り/実行および変更/削除の処理を行うことができます。 ルール エンジン管理者は、読み取り/実行、変更/削除、完全なアクセス許可、またはアクセス許可なしなど、さまざまな操作を実行するアクセス レベルまたは権限を持つユーザー (プロセスがユーザー資格情報で動作する) を構成できます。
既定では、アイテム固有のセキュリティは無効です。 アイテム レベルのセキュリティは、現在、ユーザー インターフェイスを通じては設定できません。 ただし、ビジネス ルール エンジン管理者の資格情報を使用して、プログラムによって設定できます。 次のコードは、新しい認証を作成してグループをルール セットに関連付ける方法を示しています。
RuleSet rs;
string RSName;
// Create new user
AuthorizationGroupEntry newuser = new AuthorizationGroupEntry(UserName, UID);
AuthorizationGroupEntryCollection AGEC = new AuthorizationGroupEntryCollection();
AGEC.Add(newuser);
// Define new authorization group collection
AuthorizationGroupCollection AGC = new AuthorizationGroupCollection();
// Create new authorization group
AuthorizationGroup AG = new AuthorizationGroup(GroupName, AccessPermit, AGEC);
//add the authorization group to the authorization group collection
AGC.Add(AG);
//saving the authorization group collection to the rule store
m_sqlRS.SaveAuthorizationGroups(AGC);
rs = m_sqlRS.GetRuleSet(rsInfo[0]);
RSName = rs.Name;
// Associate authorization group to the ruleset
m_sqlRS.SetRuleSetAuthorizations(RSName, AGC);
// Get ruleset by name from SQL rule store
RuleSetInfoCollection rsInfo = m_sqlRS.GetRuleSets("myRuleSet", RuleStore.Filter.All);
Note
アイテム レベル 1 のセキュリティを使用すると、パフォーマンスが低下することがあります。ルール エンジンのインスタンスを返す前に、ポリシーが実行ごとにデータベース検索を行い、アプリケーションのアクセス レベルを評価する必要があるためです。