Programación segura con el adaptador de Oracle Database
¿Cómo se protegen las credenciales al usar el complemento Agregar referencia de servicio de adaptador de Visual Studio?
Al usar el complemento Agregar referencia de servicio de adaptador para crear un cliente WCF, debe proporcionar un nombre de usuario y una contraseña para la base de datos de Oracle. Solo debe hacerlo desde la pestaña Seguridad del cuadro de diálogo Configurar adaptador . Al escribir las credenciales de Oracle en la pestaña Seguridad en lugar de directamente en el campo Configurar un URI , asegúrese de lo siguiente:
Las credenciales no se mostrarán en el campo URI del cuadro de diálogo Agregar complemento de referencia del servicio de 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 de servicio de adaptador.
Para obtener más información sobre cómo generar un cliente WCF mediante el complemento Agregar referencia de servicio de adaptador, incluido cómo escribir un nombre de usuario y una contraseña para la base de datos de Oracle, vea Obtener metadatos para las operaciones de Oracle Database en Visual Studio.
¿Cuáles 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 base de datos de Oracle 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 Oracle Database fomenta el uso de la clase ClientCredentials . Esta propiedad especifica si el adaptador aceptará el nombre de usuario y la contraseña de la base de datos de Oracle en el URI de conexión. AcceptCredentialsInUri tiene como valor predeterminado false, lo que significa que el adaptador producirá una excepción si el URI de conexión contiene credenciales. Puede establecer AcceptCredentialsInUri en true para proporcionar credenciales en el URI de conexión.
En el ejemplo siguiente se muestra cómo usar la propiedad Credentials para establecer las credenciales de la base de datos de Oracle en un ChannelFactory.
// 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();
En el ejemplo siguiente se muestra cómo usar la clase ClientCredentials para establecer credenciales para la base de datos de Oracle en un cliente WCF.
// 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();
¿Cómo puedo proporcionar un intercambio de datos más seguro a través de los límites del proceso?
El adaptador de Oracle Database 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 Oracle Database. 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, consulta Seguridad de Windows Communication Foundation.
Consulte también
Proteger las aplicaciones de base de datos de Oracle
Procedimientos recomendados