SQL アダプターでの安全なプログラミング
アダプター サービスの追加リファレンス 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 Security」を参照してください。