2

単一の SqlServer インスタンス内に 2 つのデータベースがあります。ServiceBroker サービスを使用して、あるデータベースから別のデータベースにメッセージを送信する必要があります。私の場合、セキュリティリスクのためにこれはオプションではないため、データベースでTRUSTWORTHYを「ON」に設定せずにどのように行うことができますか?

4

1 に答える 1

6

証明書を使用してダイアログ セキュリティを設定する必要があります。ダイアログ セキュリティの証明書を参照してください

  • 関連する両方のDBでDBマスターキーを作成します
  • イニシエータ サービス オーナー (dbo の可能性が高い) の証明書を作成してエクスポートする

    USE <initiatordb>;
    CREATE CERTIFICATE [<initiatorservicename>] AUTHORIZATION [<initiatorserviceowner>] WITH SUBJECT = '<initiatorservicename>';
    BACKUP CERTIFICATE [<initiatorservicename>] TO FILE = 'c:\temp\<initiatorservicename>.cer';

  • ターゲット サービスに対して、同じことを行います。

    USE <targetdb>;
    CREATE CERTIFICATE [<targetservicename>] AUTHORIZATION [<targetserviceowner>] WITH SUBJECT = '<targetservicename>';
    BACKUP CERTIFICATE [<targetservicename>] TO FILE = 'c:\temp\<targetservicename>.cer';

  • イニシエータ サービス所有者の証明書をターゲット DB にインポートし、プロキシ ユーザーを作成して、SEND 権限を付与します。

    USE <targetdb>;
    CREATE USER [<initiatorserviceproxyuser>] WITHOUT LOGIN;
    CREATE CERTIFICATE [<initiatorservicename>] AUTHORIZATION [<initiatorserviceproxyuser>] FROM FILE='c:\temp\<initiatorservicename>.cer'
    GRANT SEND ON SERVICE::[<targetservicename>] TO [<initiatorserviceproxyuser>];

  • ターゲット サービス オーナーの証明書をイニシエーター DB にインポートし、そのプロキシ ユーザーを作成して、リモート サービス バインディングをマップします。

    USE <initiatordb>;
    CREATE USER [<targetserviceproxyuser>] WITHOUT LOGIN;
    CREATE CERTIFICATE [<targetservicename>] AUTHORIZATION [<targetserviceproxyuser>] FROM FILE='c:\temp\<targetservicename>.cer'
    CREATE REMOTE SERVICE BINDING [<targetservicename>] WITH SERVICE_NAME = '<targetservicename>', USER = [<targetserviceproxyuser>];

これはすべてメモリから入力したもので、構文が正しいことを願っています。

于 2012-09-20T08:59:01.387 に答える