対象サービスを完全ダイアログ セキュリティ用に構成する方法 (Transact-SQL)

SQL Server では、発信側サービスをホストするデータベース内のリモート サービス バインドが存在するサービスとの任意のメッセージ交換に、ダイアログ セキュリティが使用されます。対象サービスをホストするデータベースに、ダイアログを作成したユーザーに対応するユーザーが含まれている場合、そのダイアログでは完全セキュリティが使用されます。

対象サービスでダイアログ セキュリティが使用されるようにするには、発信側サービスがログインするためのユーザーを作成します。各発信側サービスごとにユーザーを作成し、発信側ユーザーの証明書をインストールします。対象サービスではリモート サービス バインドを使用しないことに注意してください。

対象サービスを完全ダイアログ セキュリティ用に構成するには

  1. ログインのないユーザーを作成します。

  2. ユーザーの証明書を作成します。

    注意注意

    証明書は、マスタ キーで暗号化する必要があります。詳細については、「CREATE MASTER KEY (Transact-SQL)」を参照してください。

  3. 作成したユーザーを、対象サービスの所有者にします。

  4. 証明書をファイルにバックアップします。

    セキュリティに関する注意セキュリティに関する注意

    このユーザーの証明書のみをバックアップします。証明書に関連付けられた秘密キーは、バックアップまたは配布しないでください。

  5. 対象サービスのユーザーに対象サービスが使用するキューからメッセージを受信する権限を与えます。

  6. 発信側サービスの証明書および名前を、リモート データベースの管理者に通知します。

    注意注意

    SQL Server で完全ダイアログ セキュリティを使用するには、証明書がリモート データベースにインストールされている必要があります。また、証明書のユーザーは、対象サービスのリモート サービス バインドで指定されているユーザーでなければなりません。

  7. 信頼されたソースからリモート データベース内のユーザーの証明書を取得します。この場合、証明書は、暗号化された電子メールを使用して送信されるか、フロッピー ディスクなどの物理メディアで受け渡されるのが一般的です。

    セキュリティに関する注意セキュリティに関する注意

    信頼できる発行元の証明書以外はインストールしないでください。

  8. ログインのないユーザーを作成します。

  9. 発信側サービスの証明書をインストールします。前の手順で作成したユーザーがこの証明書を所有します。

  10. 発信側サービスの証明書のために、ログインのないユーザーを作成します。

  11. 発信側のユーザーに対して、対象サービスにメッセージを送信する権限を与えます。

使用例

USE AdventureWorks ;
GO

--------------------------------------------------------------------
-- The first part of the script configures security for the local user.
-- The script creates a user in this database, creates a certificate
-- for the user, writes the certificate to the file system, and
-- grants permissions to the user. Since this service is a target
-- service, no remote service binding is necessary.


-- Create a user without a login. For convenience,
-- the name of the user is based on the name of the
-- the remote service.

CREATE USER [SupplierOrdersUser]
    WITHOUT LOGIN;
GO

-- Create a certificate for the initiating service
-- to use to send messages to the target service.

CREATE CERTIFICATE [SupplierOrdersCertificate]
    AUTHORIZATION [SupplierOrdersUser]
    WITH SUBJECT = 'Certificate for the SupplierOrders service user.';
GO

-- Dump the certificate. Provide the certificate file
-- to the administrator for the database that hosts
-- the other service.

BACKUP CERTIFICATE [SupplierOrdersCertificate]
   TO FILE = 'C:\Certificates\SupplierOrders.cer';
GO
-- Make this user the owner of the target service.

ALTER AUTHORIZATION ON SERVICE::SupplierOrders TO [SupplierOrdersUser];
GO

-- Grant receive on the orders queue to the local user.

GRANT RECEIVE ON SupplierOrdersQueue
    TO [SupplierOrdersUser];
GO

---------------------------------------------------------------
-- The second part of the script configures security in this
-- database for the remote service. This consists of creating
-- a user in this database, loading the certificate for the remote
-- service, and granting permissions for the user.


-- Create a user without a login.

CREATE USER [OrderPartsUser]
    WITHOUT LOGIN;
GO

-- Install a certificate for the initiating user.
-- The certificate is provided by the owner of the
-- initiating service.

CREATE CERTIFICATE [OrderPartsCertificate]
    AUTHORIZATION [OrderPartsUser]
    FROM FILE='C:\Certificates\OrderParts.cer';
GO

-- Grant send on the target service to the user for the
-- initating service.

GRANT SEND ON SERVICE::[SupplierOrders]
    TO [OrderPartsUser];
GO