SQL 어댑터를 사용한 보안 프로그래밍
어댑터 서비스 추가 참조 Visual Studio 플러그 인을 사용할 때 자격 증명을 보호하려면 어떻게 해야 하나요?
어댑터 서비스 참조 플러그 인 추가를 사용하여 WCF 클라이언트를 만드는 경우 SQL Server 데이터베이스에 대한 사용자 이름과 암호를 제공해야 할 수 있습니다. 어댑터 구성 대화 상자의 보안 탭에서 자격 증명을 입력해야 합니다. SQL 어댑터는 연결 URI의 일부로 사용자 이름과 암호를 지정하는 옵션을 제공하지 않습니다. 이렇게 하면 다음이 보장됩니다.
자격 증명은 컴퓨터 화면에 액세스할 수 있는 모든 사용자가 읽을 수 있는 어댑터 서비스 참조 플러그 인 추가 대화 상자의 URI 구성 필드에 표시되지 않습니다.
어댑터 서비스 참조 플러그 인 추가에서 생성하는 구성 파일에 자격 증명이 표시되지 않습니다.
SQL Server 데이터베이스의 사용자 이름 및 암호를 입력하는 방법을 포함하여 어댑터 서비스 참조 플러그 인 추가를 사용하여 WCF 클라이언트를 생성하는 방법에 대한 자세한 내용은 SQL 어댑터를 사용하여 Visual Studio에서 SQL Server 작업에 대한 메타데이터 가져오기를 참조하세요.
코드에서 자격 증명을 설정하기 위한 모범 사례는 무엇인가요?
WCF는 ClientCredentials 클래스를 제공하여 ChannelFactory와 같은 클라이언트 통신 개체가 서비스로 자신을 인증하는 데 사용하는 자격 증명을 구성하는 데 도움이 됩니다. ClientCredentials 클래스를 사용하면 WCF가 해당 개체의 채널 스택에 지정된 모든 인증 메커니즘을 가져와서 클라이언트와 서비스 간의 교환에 적용하도록 합니다.
SQL 어댑터는 사용 중인 애플리케이션에서 In-Process로 호스트되므로 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 어댑터는 해당 어댑터를 사용하는 애플리케이션 또는 서비스와 함께 In Process에서 호스트됩니다. 어댑터는 소비자와 함께 In-Process로 호스트되므로 소비자와 SQL 어댑터 간에 교환되는 메시지에 대한 보안을 제공할 필요가 없습니다. 그러나 소비하는 애플리케이션 또는 서비스가 프로세스 경계를 넘어 중요한 데이터베이스 정보가 포함된 메시지를 다른 서비스 또는 클라이언트로 보내는 경우 사용자 환경에서 이 데이터에 대한 적절한 보호를 제공하기 위한 조치를 취해야 합니다. WCF(Windows Communication Foundation)는 클라이언트와 서비스 간에 전송되는 메시지를 보호하는 데 도움이 되는 많은 옵션을 제공합니다. WCF에서 클라이언트와 서비스 간에 전송되는 메시지를 보호하는 방법에 대한 자세한 내용은 서비스 및 클라이언트 보안을 참조하세요. WCF에서 제공하는 보안 기능에 대한 자세한 내용은 Windows Communication Foundation 보안을 참조하세요.