다음을 통해 공유


Oracle 데이터베이스 어댑터를 사용한 보안 프로그래밍

어댑터 서비스 추가 참조 Visual Studio 플러그 인을 사용할 때 자격 증명을 보호하려면 어떻게 해야 하나요?

어댑터 서비스 참조 플러그 인 추가를 사용하여 WCF 클라이언트를 만드는 경우 Oracle 데이터베이스에 대한 사용자 이름과 암호를 제공해야 합니다. 어댑터 구성 대화 상자의 보안 탭에서만 이 작업을 수행해야 합니다. URI 구성 필드에 직접 입력하는 대신 보안 탭에서 Oracle 자격 증명을 입력하면 다음을 확인합니다.

  • 자격 증명은 컴퓨터 화면에 액세스할 수 있는 모든 사용자가 읽을 수 있는 어댑터 서비스 참조 플러그 인 추가 대화 상자의 Uri 필드에 표시되지 않습니다.

  • 어댑터 서비스 참조 플러그 인 추가에서 생성하는 구성 파일에 자격 증명이 표시되지 않습니다.

    Oracle 데이터베이스의 사용자 이름 및 암호를 입력하는 방법을 포함하여 어댑터 서비스 참조 플러그 인 추가를 사용하여 WCF 클라이언트를 생성하는 방법에 대한 자세한 내용은 Visual Studio에서 Oracle 데이터베이스 작업에 대한 메타데이터 가져오기를 참조하세요.

코드에서 자격 증명을 설정하기 위한 모범 사례는 무엇인가요?

WCF는 ChannelFactory와 같은 클라이언트 통신 개체가 서비스에서 인증하는 데 사용하는 자격 증명을 구성하는 데 도움이 되는 ClientCredentials 클래스를 제공합니다. ClientCredentials 클래스를 사용하면 WCF가 해당 개체의 채널 스택에 지정된 모든 인증 메커니즘을 가져와서 클라이언트와 서비스 간의 교환에 적용하도록 합니다.

Oracle Database 어댑터는 사용 중인 애플리케이션에서 In-process로 호스트되므로 ClientCredentials 클래스를 사용하여 사용하는 애플리케이션에서 사용하는 클라이언트 통신 개체에 자격 증명을 설정하는 것은 필수적이지 않습니다. 그러나 그렇게하는 것이 좋은 관행으로 간주됩니다.

Oracle Database 어댑터는 ClientCredentials 클래스를 사용하도록 권장합니다. 이 속성은 어댑터가 연결 URI에서 Oracle 데이터베이스의 사용자 이름과 암호를 허용할지 여부를 지정합니다. AcceptCredentialsInUri 는 기본적으로 false로 설정됩니다. 즉, 연결 URI에 자격 증명이 포함된 경우 어댑터가 예외를 throw합니다. AcceptCredentialsInUri를true로 설정하여 연결 URI에 자격 증명을 제공할 수 있습니다.

다음 예제에서는 Credentials 속성을 사용하여 ChannelFactory에서 Oracle 데이터베이스에 대한 자격 증명을 설정하는 방법을 보여 줍니다.

// Create binding and endpoint  
OracleDBBinding binding = new OracleDBBinding();  
EndpointAddress endpointAddress = new EndpointAddress("oracleDB://Adapter");  
  
// Create the channel factory   
ChannelFactory<IRequestChannel> factory = new ChannelFactory<IRequestChannel>(binding, endpointAddress))  
  
// Set user name and password  
factory.Credentials.UserName.UserName = "SCOTT";  
factory.Credentials.UserName.Password = "TIGER";  
  
// Open the channel factory  
factory.Open();  

다음 예제에서는 ClientCredentials 클래스를 사용하여 WCF 클라이언트에서 Oracle 데이터베이스에 대한 자격 증명을 설정하는 방법을 보여 줍니다.

// Initialize a new client for the SQLEXECUTE operation from configuration   
SQLEXECUTEClient sqlExecuteClient = new SQLEXECUTEClient("OracleDBBinding_SQLEXECUTE");  
  
// Set user name and password  
sqlExecuteClient.ClientCredentials.UserName.UserName = "SCOTT";  
sqlExecuteClient.ClientCredentials.UserName.Password = "TIGER";  
  
// Open the client  
sqlExecuteClient.Open();  

프로세스 경계를 넘어 보다 안전한 데이터 교환을 어떻게 제공할 수 있나요?

Oracle 데이터베이스 어댑터는 사용 중인 애플리케이션 또는 서비스와 함께 In-Process에 호스트됩니다. 어댑터는 소비자와 함께 in-process에 호스트되므로 소비자와 Oracle 데이터베이스 어댑터 간에 교환되는 메시지에 대한 보안을 제공할 필요가 없습니다. 그러나 소비하는 애플리케이션 또는 서비스가 프로세스 경계를 넘어 중요한 데이터베이스 정보가 포함된 메시지를 다른 서비스 또는 클라이언트로 보내는 경우 사용자 환경에서 이 데이터에 대한 적절한 보호를 제공하기 위한 조치를 취해야 합니다. WCF(Windows Communication Foundation)는 클라이언트와 서비스 간에 전송되는 메시지를 보호하는 데 도움이 되는 다양한 옵션을 제공합니다. WCF에서 클라이언트와 서비스 간에 전송된 메시지를 보호하는 데 도움이 되는 방법에 대한 자세한 내용은 서비스 및 클라이언트 보안을 참조하세요. WCF에서 제공하는 보안 기능에 대한 자세한 내용은 Windows Communication Foundation 보안을 참조하세요.

참고 항목

Oracle Database 애플리케이션 보안
최선의 구현 방법