Compartir a través de


Programación segura con el adaptador de SQL

¿Cómo se protegen las credenciales al usar el complemento Agregar referencia del servicio adaptador de Visual Studio?

Al usar el complemento Agregar referencia de servicio de adaptador para crear un cliente WCF, es posible que tenga que proporcionar un nombre de usuario y una contraseña para la base de datos de SQL Server. Debe escribir credenciales en la pestaña Seguridad del cuadro de diálogo Configurar adaptador . El adaptador de SQL no proporciona una opción para especificar el nombre de usuario y la contraseña como parte del URI de conexión. Esto garantiza lo siguiente:

  • Las credenciales no se mostrarán en el campo Configurar un URI del cuadro de diálogo Agregar complemento de referencia del servicio adaptador, donde cualquier persona con acceso a la pantalla del equipo puede leerlas.

  • Las credenciales no aparecerán en el archivo de configuración que genera el complemento Agregar referencia del servicio adaptador.

    Para obtener más información sobre cómo generar un cliente WCF mediante el complemento Agregar referencia del servicio adaptador, incluido cómo escribir un nombre de usuario y una contraseña para la base de datos de SQL Server, vea Obtener metadatos para SQL Server operaciones en Visual Studio mediante el adaptador de SQL.

¿Qué son los procedimientos recomendados para establecer credenciales en el código?

WCF proporciona la clase ClientCredentials para ayudarle a configurar las credenciales que un objeto de comunicación de cliente, como ChannelFactory, usa para autenticarse con un servicio. Mediante el uso de la clase ClientCredentials , asegúrese de que WCF toma los mecanismos de autenticación especificados en la pila de canales de ese objeto y los aplica al intercambio entre el cliente y el servicio.

Dado que el adaptador de SQL se hospeda en proceso con su aplicación de consumo, no es imperativo usar la clase ClientCredentials para establecer credenciales en los objetos de comunicación de cliente que usa la aplicación de consumo. Sin embargo, se considera una buena práctica hacerlo.

El adaptador de SQL requiere el uso de la clase ClientCredentials para pasar credenciales mediante programación. El adaptador de SQL omite la propiedad de enlace AcceptCredentialsInUri para evitar pasar credenciales en el URI.

En el ejemplo siguiente se muestra cómo usar la propiedad Credentials para establecer credenciales para la base de datos de SQL Server en channelFactory.

// 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();  

En el ejemplo siguiente se muestra cómo usar la clase ClientCredentials para establecer credenciales para la base de datos SQL Server en un cliente WCF.

// 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();  

¿Cómo puedo proporcionar un intercambio de datos más seguro a través de los límites del proceso?

El adaptador de SQL se hospeda en proceso con la aplicación o el servicio que lo consume. Dado que el adaptador está hospedado en proceso con el consumidor, no es necesario proporcionar seguridad en los mensajes intercambiados entre el consumidor y el adaptador de SQL. Sin embargo, si la aplicación o el servicio que consume envía mensajes que contienen información confidencial de la base de datos a través de un límite de proceso a otro servicio o cliente, debe tomar medidas para proporcionar una protección adecuada para estos datos en su entorno. Windows Communication Foundation (WCF) proporciona muchas opciones para ayudar a proteger los mensajes enviados entre clientes y servicios. Para obtener más información sobre cómo ayudar a proteger los mensajes enviados entre clientes y servicios en WCF, consulte Protección de servicios y clientes. Para obtener más información general sobre las características de seguridad que proporciona WCF, consulte Seguridad de Windows Communication Foundation.

Consulte también

Proteger las aplicaciones SQL
Procedimientos recomendados para proteger el adaptador de SQL