Escenarios de seguridad de aplicaciones en SQL Server (ADO.NET)
No hay una única forma correcta de crear una aplicación cliente segura de SQL Server. Cada aplicación tiene unas necesidades, un entorno de implementación y un grupo de usuarios específicos. Una aplicación que es razonablemente segura en el momento en que se implementa puede volverse menos segura con el tiempo. Es imposible predecir con ninguna seguridad qué amenazas pueden surgir en el futuro.
SQL Server, como producto, ha ido evolucionando a lo largo de muchas versiones para incorporar las últimas características de seguridad que permiten a los desarrolladores crear aplicaciones de base de datos seguras. Sin embargo, la seguridad no debe darse por sentada; es necesario realizar una supervisión y actualizaciones continuas.
Amenazas comunes
Los desarrolladores han de saber cuáles son las amenazas a la seguridad, las herramientas con las que cuentan para enfrentarse a ellas y cómo evitar las vulnerabilidades de seguridad provocadas por los propios usuarios. Se puede pensar en la seguridad como en una cadena, en la que si se rompe un vínculo, se pone en peligro la fortaleza de toda ella. En la siguiente lista se incluyen algunas de las amenazas a la seguridad más comunes, que se comentan en mayor detalle en los temas de este apartado.
Inyección de SQL
La inyección de SQL es el proceso por el cual un usuario malintencionado escribe instrucciones de Transact-SQL en lugar de entradas válidas. Si la entrada se pasa directamente al servidor sin haber sido validada y la aplicación ejecuta el código inyectado por error, el ataque podría dañar o destruir datos. Para frustrar los ataques por inyección de SQL Server, puede utilizar procedimientos almacenados y comandos parametrizados, evitar el SQL dinámico y restringir los permisos de todos los usuarios.
Elevación de privilegios
Los ataques por elevación de privilegios se producen cuando un usuario es capaz de asumir los privilegios de una cuenta de confianza, como un propietario o un administrador. Trabaje siempre en cuentas de usuario con los privilegios mínimos y asigne sólo los permisos necesarios. Evite utilizar cuentas administrativas o de propietario para ejecutar código. De esta forma se limita el daño que se podría sufrir en caso de que un ataque tenga éxito. Cuando realice tareas que requieran permisos adicionales, utilice la firma de procedimientos o la suplantación únicamente mientras dure la tarea. En SQL Server 2005, ya puede firmar procedimientos almacenados con certificados o usar la suplantación para asignar permisos temporalmente.
Sondeos y observación inteligente
Un ataque por sondeo puede utilizar mensajes de error generados por una aplicación para buscar puntos vulnerables en la seguridad. Implemente el control de errores en todo el código de procedimiento para evitar que se devuelva la información de error al usuario final.
Autenticación
Cuando se utilizan inicios de sesión de SQL Server, se pueden producir ataques por inyección a la cadena de conexión si durante la ejecución se genera una cadena de conexión basada en los datos introducidos por el usuario. Si en la cadena de conexión no se comprueba la validez de los pares de palabras clave, un agresor puede insertar caracteres de más y así podría tener acceso a datos confidenciales o a otros recursos del servidor. Utilice la autenticación de Windows siempre que sea posible. Si tiene que utilizar inicios de sesión de SQL Server, use el SqlConnectionStringBuilder para crear y validar cadenas de conexión durante la ejecución.
Contraseñas
Muchos ataques tienen éxito porque un intruso es capaz de obtener o adivinar la contraseña de un usuario con muchos privilegios. Las contraseñas constituyen su primera línea de defensa contra los intrusos, así que establecer contraseñas seguras es esencial para la seguridad del sistema. Con SQL Server 2005, ya puede crear y aplicar directivas de uso de contraseñas para la autenticación en modo mixto.
Asigne siempre una contraseña segura a la cuenta de sa, incluso cuando utilice la autenticación de Windows.
En esta sección
Administrar permisos con procedimientos almacenados en SQL Server (ADO.NET)
Describe cómo utilizar procedimientos almacenados para administrar permisos y controlar el acceso a los datos. El uso de procedimientos almacenados es una forma efectiva de responder a muchas amenazas a la seguridad.Escribir SQL dinámico seguro en SQL Server (ADO.NET)
Describe técnicas para escribir SQL dinámico seguro usando procedimientos almacenados.Firmar procedimientos almacenados en SQL Server (ADO.NET)
Describe cómo firmar un procedimiento almacenado con un certificado para que los usuarios puedan trabajar con datos a los que no tienen acceso directo. Esto permite que los procedimientos almacenados realicen operaciones que el autor de la llamada no tiene permisos para realizar directamente.Personalizar permisos con suplantación en SQL Server (ADO.NET)
Describe cómo usar la cláusula EXECUTE AS para suplantar a otro usuario. La suplantación cambia el contexto de ejecución del autor de la llamada al usuario especificado.Conceder permisos por filas en SQL Server (ADO.NET)
Describe cómo implementar permisos a nivel de fila con el fin de restringir el acceso a los datos.Crear roles de aplicación en SQL Server (ADO.NET)
Describe las características y la funcionalidad de los roles de las aplicaciones.Habilitar el acceso entre bases de datos en SQL Server (ADO.NET)
Describe cómo habilitar el acceso entre bases de datos sin poner en peligro la seguridad.
Vea también
Otros recursos
Seguridad en SQL Server (ADO.NET)