Add Adapter Service Reference Visual Studio プラグインを使用する場合、資格情報を保護するにはどうすればよいですか?
アダプター サービス参照の追加プラグインを使用して WCF クライアントを作成する場合は、SQL Server データベースのユーザー名とパスワードを指定する必要があります。 [アダプターの構成] ダイアログ ボックスの [セキュリティ] タブから資格情報を入力する必要があります。 SQL アダプターには、接続 URI の一部としてユーザー名とパスワードを指定するオプションは用意されていません。 これにより、次の内容が保証されます。
資格情報は、[アダプター サービス参照プラグインの追加] ダイアログ ボックスの [URI の構成] フィールドには表示されず、コンピューター画面にアクセスできるユーザーは誰でも読み取ることができます。
資格情報は、アダプター サービス参照プラグインが生成する構成ファイルには表示されません。
アダプター サービス参照プラグインの追加を使用して WCF クライアントを生成する方法の詳細については、SQL Server データベースのユーザー名とパスワードを入力する方法など、「SQL アダプターを使用して Visual Studio で SQL Server 操作のメタデータを取得する」を参照してください。
コードで資格情報を設定するためのベスト プラクティスとは
WCF には ClientCredentials クラスが用意されており 、 ChannelFactory などのクライアント通信オブジェクトがサービスで自身を認証するために使用する資格情報を構成するのに役立ちます。 ClientCredentials クラスを使用すると、WCF がそのオブジェクトのチャネル スタックで指定されている認証メカニズムを確実に受け取り、クライアントとサービス間の交換に適用します。
SQL アダプターは使用中のアプリケーションでインプロセスでホストされるため、 ClientCredentials クラスを使用して、使用するアプリケーションが使用するクライアント通信オブジェクトに資格情報を設定することは必須ではありません。 ただし、これを行うことをお勧めします。
SQL アダプターでは、プログラムで資格情報を渡すために ClientCredentials クラスを使用する必要があります。 ACCEPTCredentialsInUri バインド プロパティは、URI に資格情報を渡さないようにするために、SQL アダプターによって無視されます。
次の例では、 Credentials プロパティを使用して 、ChannelFactory 上の SQL Server データベースの資格情報を設定する方法を示します。
// Create binding and endpoint
SqlAdapterBinding binding = new SqlAdapterBinding();
EndpointAddress address = new EndpointAddress("mssql://mysqlserver//mydatabase?");
// Create the channel factory
ChannelFactory<IRequestChannel> factory = new ChannelFactory<IRequestChannel>(binding, endpointAddress))
// Set user name and password
factory.Credentials.UserName.UserName = "myuser";
factory.Credentials.UserName.Password = "mypassword";
// Open the channel factory
factory.Open();
次の例は 、ClientCredentials クラスを使用して、WCF クライアント上の SQL Server データベースの資格情報を設定する方法を示しています。
// Initialize a new client for the SELECT operation on the Employee table
SqlAdapterBinding binding = new SqlAdapterBinding();
EndpointAddress address = new EndpointAddress("mssql://mysqlserver//mydatabase?");
TableOp_dbo_EmployeeClient client = new TableOp_dbo_EmployeeClient(binding,address);
// Set user name and password
client.ClientCredentials.UserName.UserName = "myuser";
client.ClientCredentials.UserName.Password = "mypassword";
// Open the client
client.Open();
プロセス境界を越えてより安全なデータ交換を提供するにはどうすればよいですか?
SQL アダプターは、それを使用するアプリケーションまたはサービスでインプロセスでホストされます。 アダプターはコンシューマーと一緒にインプロセスでホストされるため、コンシューマーと SQL アダプターの間で交換されるメッセージにセキュリティを提供する必要はありません。 ただし、使用しているアプリケーションまたはサービスが、プロセス境界を越えて機密性の高いデータベース情報を含むメッセージを別のサービスまたはクライアントに送信する場合は、環境内でこのデータを適切に保護するための対策を講じる必要があります。 Windows Communication Foundation (WCF) には、クライアントとサービス間で送信されるメッセージをセキュリティで保護するための多くのオプションが用意されています。 WCF のクライアントとサービスの間で送信されるメッセージをセキュリティで保護する方法の詳細については、「 サービスとクライアントのセキュリティ保護」を参照してください。 WCF で提供されるセキュリティ機能の詳細については、「 Windows Communication Foundation セキュリティ」を参照してください。