Prácticas recomendadas de seguridad con bases de datos independientesSecurity Best Practices with Contained Databases

ESTE TEMA SE APLICA A:síSQL Server (a partir de 2012)síAzure SQL DatabasenoAzure SQL Data Warehouse noAlmacenamiento de datos paralelos THIS TOPIC APPLIES TO:yesSQL Server (starting with 2012)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Las bases de datos independientes tienen algunas amenazas únicas que los administradores de Motor de base de datos de SQL ServerSQL Server Database Engine deben comprender y mitigar.Contained databases have some unique threats that should be understood and mitigated by Motor de base de datos de SQL ServerSQL Server Database Engine administrators. La mayoría de ellas están relacionadas con el proceso de autenticación de USER WITH PASSWORD , que traslada el límite de autenticación del nivel de Motor de base de datosDatabase Engine al de base de datos.Most of the threats are related to the USER WITH PASSWORD authentication process, which moves the authentication boundary from the Motor de base de datosDatabase Engine level to the database level.

Los usuarios de una base de datos independiente que dispongan del permiso ALTER ANY USER , como los miembros de los roles fijos de base de datos db_owner y db_securityadmin , pueden conceder acceso a la base de datos sin el conocimiento ni el permiso del administrador de SQL ServerSQL Server .Users in a contained database that have the ALTER ANY USER permission, such as members of the db_owner and db_securityadmin fixed database roles, can grant access to the database without the knowledge or permission or the SQL ServerSQL Server administrator. La concesión de acceso a usuarios en una base de datos independiente incrementa el área expuesta al ataque potencial en toda la instancia de SQL ServerSQL Server .Granting users access to a contained database increases the potential attack surface area against the whole SQL ServerSQL Server instance. Los administradores deben comprender esta delegación de control de acceso y ser sumamente cuidadosos cuando conceden el permiso ALTER ANY USER a los usuarios de base de datos independiente.Administrators should understand this delegation of access control, and be very careful about granting users in the contained database the ALTER ANY USER permission. Todos los propietarios de bases de datos tienen el permiso ALTER ANY USER .All database owners have the ALTER ANY USER permission. SQL ServerSQL Server deben auditar periódicamente a los usuarios de una base de datos independiente. administrators should periodically audit the users in a contained database.

Acceder a otras bases de datos mediante la cuenta InvitadoAccessing Other Databases Using the guest Account

Los propietarios y los usuarios de bases de datos con el permiso ALTER ANY USER pueden crear usuarios de bases de datos independientes.Database owners and database users with the ALTER ANY USER permission can create contained database users. Después de conectarse a una base de datos independiente en una instancia de SQL ServerSQL Server, un usuario de base de datos independiente puede obtener acceso a otras bases de datos en Motor de base de datosDatabase Engine, si en estas bases de datos se ha habilitado la cuenta Invitado .After connecting to a contained database on an instance of SQL ServerSQL Server, a contained database user can access other databases on the Motor de base de datosDatabase Engine, if the other databases have enabled the guest account.

Crear un usuario duplicado en otra base de datosCreating a Duplicate User in Another Database

Algunas aplicaciones pueden solicitar que un usuario tenga acceso a más de una base de datos.Some applications might require that a user to have access to more than one database. Se puede hacer creando usuarios de bases de datos independientes idénticos en cada base de datos.This can be done by creating identical contained database users in each database. Use la opción SID al crear el segundo usuario con contraseña.Use the SID option when creating the second user with password. En el ejemplo siguiente se crean dos usuarios idénticos en dos bases de datos.The following example creates two identical users in two databases.

USE DB1;  
GO  
CREATE USER Carlo WITH PASSWORD = '<strong password>';   
-- Return the SID of the user  
SELECT SID FROM sys.database_principals WHERE name = 'Carlo';  

-- Change to the second database  
USE DB2;  
GO  
CREATE USER Carlo WITH PASSWORD = '<same password>', SID = <SID from DB1>;  
GO  

Para ejecutar una consulta entre bases de datos, debe establecer la opción TRUSTWORTHY en la base de datos que realiza la llamada.To execute a cross-database query, you must set the TRUSTWORTHY option on the calling database. Por ejemplo, si el usuario (Carlo) definido anteriormente está en DB1, para ejecutar SELECT * FROM db2.dbo.Table1; el valor de TRUSTWORTHY debe estar activado para la base de datos DB1.For example if the user (Carlo) defined above is in DB1, to execute SELECT * FROM db2.dbo.Table1; then the TRUSTWORTHY setting must be on for database DB1. Ejecute el código siguiente para activar la configuración TRUSTWORTHY .Execute the following code to set the TRUSTWORTHY setting on.

ALTER DATABASE DB1 SET TRUSTWORTHY ON;  

Crear un usuario que duplica un inicio de sesiónCreating a User that Duplicates a Login

Si se crea un usuario de base de datos independiente con contraseña, con el mismo nombre que un inicio de sesión de SQL ServerSQL Server y si el inicio de sesión de SQL ServerSQL Server se conecta especificando la base de datos independiente como el catálogo inicial, el inicio de sesión de SQL ServerSQL Server no podrá conectarse.If a contained database user with password is created, using the same name as a SQL ServerSQL Server login, and if the SQL ServerSQL Server login connects specifying the contained database as the initial catalog, then the SQL ServerSQL Server login will be unable to connect. La conexión se evaluará como el usuario de base de datos independiente con entidad de seguridad con contraseña en la base de datos independiente en vez de como usuario basado en el inicio de sesión de SQL ServerSQL Server .The connection will be evaluated as the contained database user with password principal on the contained database instead of as a user based on the SQL ServerSQL Server login. Esto podría ocasionar una denegación de servicio intencional o accidental para el inicio de sesión de SQL ServerSQL Server .This could cause an intentional or accidental denial of service for the SQL ServerSQL Server login.

  • Como práctica recomendada, los miembros del rol fijo de servidor sysadmin siempre deben considerar realizar la conexión sin usar la opción de catálogo inicial.As a best practice, members of the sysadmin fixed server role should consider always connecting without using the initial catalog option. De esta forma, se conecta el inicio de sesión a la base de datos maestra y se evita que un propietario de base de datos use incorrectamente el intento de inicio de sesión.This connects the login to the master database and avoids any attempts by a database owner to misuse the login attempt. Después, el administrador puede cambiar a la base de datos independiente con la instrucción USE<baseDeDatos>.Then the administrator can change to the contained database by using the USE<database> statement. Además, puede establecer la base de datos predeterminada del inicio de sesión en la base de datos independiente, que completa el inicio de sesión en la base de datos maestray, a continuación, transfiere el inicio de sesión a la base de datos independiente.You can also set the default database of the login to the contained database, which completes the login to master, and then transfers the login to the contained database.

  • Como práctica recomendada, no cree usuarios de bases de datos independientes con contraseñas que tengan el mismo nombre que los inicios de sesión de SQL ServerSQL Server .As a best practice, do not create contained database users with passwords who have the same name as SQL ServerSQL Server logins.

  • Si existe el inicio de sesión duplicado, conéctese a la base de datos maestra sin especificar ningún catálogo inicial y, a continuación, ejecute el comando USE para cambiar a la base de datos independiente.If the duplicate login exists, connect to the master database without specifying an initial catalog, and then execute the USE command to change to the contained database.

  • Cuando estén presentes bases de datos independientes, los usuarios de base de datos que no sean bases de datos independientes deben conectarse al Motor de base de datosDatabase Engine sin usar ningún catálogo inicial ni especificar el nombre de una base de datos dependiente como el catálogo inicial.When contained databases are present, users of databases that are not contained databases should connect to the Motor de base de datosDatabase Engine without using an initial catalog or by specifying the database name of a non-contained database as the initial catalog. De esta forma, se evita la conexión a la base de datos independiente bajo un control menos directo por parte de los administradores de Motor de base de datosDatabase Engine .This avoids connecting to the contained database which is under less direct control by the Motor de base de datosDatabase Engine administrators.

Incrementar el acceso cambiando el estado de contención de una base de datosIncreasing Access by Changing the Containment Status of a Database

Los inicios de sesión con el permiso ALTER ANY DATABASE , como los miembros del rol fijo de servidor dbcreator , y los usuarios de una base de datos dependiente con el permiso CONTROL DATABASE , como los miembros del rol fijo de base de datos db_owner , pueden cambiar la configuración de contención de una base de datos.Logins that have the ALTER ANY DATABASE permission, such as members of the dbcreator fixed server role, and users in a non-contained database that have the CONTROL DATABASE permission, such as members of the db_owner fixed database role, can change the containment setting of a database. Si la configuración de contención de una base de datos se cambia de NONE a PARTIAL o FULL, se puede conceder acceso de usuario mediante la creación de usuarios de bases de datos independientes con contraseñas.If the containment setting of a database is changed from NONE to either PARTIAL or FULL, then user access can be granted by creating contained database users with passwords. De esta forma, se podría proporcionar acceso sin el conocimiento ni el consentimiento de los administradores de SQL ServerSQL Server.This could provide access without the knowledge or consent of the SQL ServerSQL Server administrators. Para evitar que las bases de datos sean independientes, establezca el valor de la opción autenticación de la base de datos independiente de Motor de base de datosDatabase Engine en 0.To prevent any databases from being contained, set the Motor de base de datosDatabase Enginecontained database authentication option to 0. Para evitar que se conecten los usuarios de bases de datos independientes con contraseñas en las bases de datos independientes seleccionadas, use desencadenadores de inicio de sesión para cancelar los intentos de inicios de sesión de los usuarios de bases de datos independientes con contraseñas.To prevent connections by contained database users with passwords on selected contained databases, use login triggers to cancel login attempts by contained database users with passwords.

Adjuntar una base de datos independienteAttaching a Contained Database

Si se adjunta una base de datos independiente, un administrador podría dar acceso a usuarios no deseados a la instancia de Motor de base de datosDatabase Engine.By attaching a contained database, an administrator could give unwanted users access to the instance of the Motor de base de datosDatabase Engine. Un administrador al que le preocupe este riesgo puede poner en línea la base de datos en el modo RESTRICTED_USER , que evita la autenticación de usuarios de bases de datos independientes con contraseñas.An administrator concerned about this risk can bring the database online in RESTRICTED_USER mode, which prevents authentication for contained database users with passwords. Solo las entidades de seguridad autorizadas mediante inicios de sesión podrán acceder a Motor de base de datosDatabase Engine.Only principals authorized through logins will be able to access the Motor de base de datosDatabase Engine.

Los usuarios se crean con los requisitos de contraseña en vigor en el momento de su creación y las contraseñas no se vuelven a comprobar cuando se adjunte una base de datos.Users are created using the password requirements in effect at the time that they are created and passwords are not rechecked when a database is attached. Si se adjunta una base de datos independiente que permitía contraseñas no seguras en un sistema con una directiva de contraseñas más estricta, un administrador podría permitir contraseñas que no cumplan la directiva de contraseñas actual en el Motor de base de datosDatabase Engineque se adjunta.By attaching a contained database which allowed weak passwords to a system with a stricter password policy, an administrator could permit passwords that do not meet the current password policy on the attaching Motor de base de datosDatabase Engine. Los administradores pueden evitar la conservación de contraseñas no seguras exigiendo que todas las contraseñas se restablezcan para la base de datos adjunta.Administrators can avoid retaining the weak passwords by requiring that all passwords be reset for the attached database.

Directivas de contraseñasPassword Policies

Se puede requerir que las contraseñas de una base de datos sean contraseñas seguras, pero no se pueden proteger mediante directivas de contraseñas sólidas.Passwords in a database can be required to be strong passwords, but cannot be protected by robust password policies. Use la autenticación de Windows siempre que sea posible para aprovechar las directivas de contraseñas más amplias disponibles de Windows.Use Windows Authentication whenever possible to take advantage of the more extensive password policies available from Windows.

Autenticación KerberosKerberos Authentication

Los usuarios de bases de datos independientes con contraseñas usan la autenticación Kerberos.Contained database users with passwords cannot use Kerberos Authentication. Siempre que sea posible, use la autenticación de Windows para aprovechar características de Windows como Kerberos.When possible, use Windows Authentication to take advantage of Windows features such as Kerberos.

Ataque por diccionario sin conexiónOffline Dictionary Attack

Los valores hash de contraseña de los usuarios de bases de datos independientes se almacenan en la base de datos independiente.The password hashes for contained database users with passwords are stored in the contained database. Cualquiera que tenga acceso a los archivos de la base de datos podría realizar un ataque por diccionario contra los usuarios de bases de datos independientes con contraseña de un sistema no auditado.Anyone with access to the database files could perform a dictionary attack against the contained database users with passwords on an unaudited system. Para mitigar esta amenaza, restrinja el acceso a los archivos de base de datos o solo permita conexiones a bases de datos independientes mediante la autenticación de Windows.To mitigate this threat, restrict access to the database files, or only permit connections to contained databases by using Windows Authentication.

Establecer secuencias de escape en una base de datos independienteEscaping a Contained Database

Si una base de datos es independiente parcialmente, los administradores de SQL ServerSQL Server deben auditar periódicamente las capacidades de los usuarios y de los módulos de bases de datos independientes.If a database is partially contained, SQL ServerSQL Server administrators should periodically audit the capabilities of the users and modules in contained databases.

Denegación de servicio mediante AUTO_CLOSEDenial of Service Through AUTO_CLOSE

No configure bases de datos independientes para que se cierren automáticamente.Do not configure contained databases to auto close. Si se cierra la base de datos, su apertura para autenticar un usuario consume recursos adicionales y podría contribuir a un ataque de denegación de servicio.If closed, opening the database to authenticate a user consumes additional resources and could contribute to a denial of service attack.

Vea tambiénSee Also

Bases de datos independientes Contained Databases
Migrar a una base de datos parcialmente independiente Migrate to a Partially Contained Database