Usuarios de base de datos independiente: hacer que la base de datos sea portátilContained Database Users - Making Your Database Portable

SE APLICA A: síSQL Server síAzure SQL Database síAzure SQL Data Warehouse noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse noParallel Data Warehouse

Use los usuarios de base de datos independiente para autenticar conexiones SQL ServerSQL Server y SQL DatabaseSQL Database en el nivel de base de datos.Use contained database users to authenticate SQL ServerSQL Server and SQL DatabaseSQL Database connections at the database level. Una base de datos independiente es una base de datos que está aislada de otras bases de datos y de la instancia de SQL ServerSQL Server/ SQL DatabaseSQL Database (y de la base de datos maestra) que hospeda la base de datos.A contained database is a database that is isolated from other databases and from the instance of SQL ServerSQL Server/ SQL DatabaseSQL Database (and the master database) that hosts the database. SQL ServerSQL Server admite usuarios de base de datos independientes para la autenticación de Windows y SQL ServerSQL Server .supports contained database users for both Windows and SQL ServerSQL Server authentication. Al usar SQL DatabaseSQL Database, se combinan las reglas de usuarios de la base de datos independiente con las de firewall de nivel de base de datos.When using SQL DatabaseSQL Database, combine contained database users with database level firewall rules. En este tema se revisan las diferencias y ventajas de utilizar el modelo de base de datos independiente en comparación con el modelo de inicio de sesión o usuario tradicionales y las reglas de firewall de Windows o de nivel de servidor.This topic reviews the differences and benefits of using the contained database model compared to traditional login/user model and Windows or server-level firewall rules. Es posible que la lógica de escenarios específicos, de manejabilidad o de software empresarial todavía pueda necesitar el uso de reglas de inicio de sesión o usuario tradicionales y de firewall de nivel de servidor.Specific scenarios, manageability or application business logic may still require use of traditional login/user model and server-level firewall rules.

Nota

Como MicrosoftMicrosoft desarrolla el servicio SQL DatabaseSQL Database y avanza hacia contrato de nivel de servicio superiores garantizados, es posible que se le pida que cambie a las normas de modelo de usuario de base de datos independiente y las de firewall de ámbito de base de datos para lograr el contrato de nivel de servicio de mayor disponibilidad y mayores tasas de inicio de sesión máximas para una base de datos determinada.As MicrosoftMicrosoft evolves the SQL DatabaseSQL Database service and moves towards higher guaranteed SLAs you may be required to switch to the contained database user model and database-scoped firewall rules to attain the higher availability SLA and higher max login rates for a given database. MicrosoftMicrosoft le recomienda que considere la posibilidad de realizar dichos cambios hoy mismo.encourage you to consider such changes today.

Inicio de sesión tradicional y modelo de usuarioTraditional Login and User Model

En el modelo tradicional de conexión, los usuarios de Windows o los miembros de los grupos de Windows se conectan a la Motor de base de datosDatabase Engine al proporcionar las credenciales de usuario o grupo autenticadas por Windows.In the traditional connection model, Windows users or members of Windows groups connect to the Motor de base de datosDatabase Engine by providing user or group credentials authenticated by Windows. O bien, puede proporcionar un nombre y la contraseña y conectarse mediante autenticación de SQL ServerSQL Server .Or you can provide both a name and password and connects by using SQL ServerSQL Server authentication. En ambos casos, la base de datos maestra debe tener un inicio de sesión que coincida con las credenciales de conexión.In both cases, the master database must have a login that matches the connecting credentials. Después de que la Motor de base de datosDatabase Engine confirme las credenciales de autenticación de Windows o autentica las credenciales de autenticación de SQL ServerSQL Server , la conexión normalmente intenta conectarse a una base de datos de usuario.After the Motor de base de datosDatabase Engine confirms the Windows authentication credentials or authenticates the SQL ServerSQL Server authentication credentials, the connection typically attempts to connect to a user database. Para conectarse a una base de datos de usuario, el inicio de sesión se debe poder asignar (es decir, asociar) a un usuario de base de datos en la base de datos de usuario.To connect to a user database, the login must be able to be mapped to (that is, associated with) a database user in the user database. También es posible que la cadena de conexión especifique la conexión a una base de datos que es opcional en SQL ServerSQL Server pero obligatoria en SQL DatabaseSQL Database.The connection string may also specify connecting to a specific database which is optional in SQL ServerSQL Server but required in SQL DatabaseSQL Database.

El principio importante es que tanto el inicio de sesión (en la base de datos maestra) como el usuario (en la base de datos de usuario) deben existir y estar relacionados entre sí.The important principal is that both the login (in the master database) and the user (in the user database) must exist and be related to each other. Esto significa que la conexión a la base de datos de usuario tiene una dependencia en el inicio de sesión en la base de datos maestra y esto limita la capacidad de la base de datos de moverse a un servidor host de SQL ServerSQL Server o Base de datos SQL de AzureAzure SQL Database diferente.This means that the connection to the user database has a dependency upon the login in the master database, and this limits the ability of the database to be moved to a different hosting SQL ServerSQL Server or Base de datos SQL de AzureAzure SQL Database server. Además, si por cualquier motivo no hay una conexión a la base de datos maestra disponible (por ejemplo, una conmutación por error está en curso), aumentará el tiempo total de conexión o es posible que se agote el tiempo de espera de la conexión. En consecuencia, esto puede reducir la escalabilidad de la conexión.And if, for any reason, a connection to the master database is not available (for example, a failover is in progress), the overall connection time will be increased or connection might time out. Consequently this may reduce connection scalability.

Modelo de usuario de base de datos independienteContained Database User Model

En el modelo de usuario de base de datos independiente, el inicio de sesión en la base de datos maestra no está presente.In the contained database user model, the login in the master database is not present. En su lugar, el proceso de autenticación se produce en la base de datos de usuario y el usuario de base de datos de la base de datos de usuario no tiene asociado ningún inicio de sesión en la base de datos maestra.Instead, the authentication process occurs at the user database, and the database user in the user database does not have an associated login in the master database. El modelo de usuario de base de datos independiente admite tanto la autenticación de Windows como la autenticación de SQL ServerSQL Server , y se puede usar tanto en SQL ServerSQL Server como en SQL DatabaseSQL Database.The contained database user model supports both Windows authentication and SQL ServerSQL Server authentication, and can be used in both SQL ServerSQL Server and SQL DatabaseSQL Database. Para conectarse como un usuario de base de datos independiente, la cadena de conexión siempre debe contener un parámetro para la base de datos de usuario de modo que la Motor de base de datosDatabase Engine sepa qué base de datos es responsable de la administración del proceso de autenticación.To connect as a contained database user, the connection string must always contain a parameter for the user database so that the Motor de base de datosDatabase Engine knows which database is responsible for managing the authentication process. La actividad del usuario de base de datos independiente se limita a la autenticación de base de datos, por lo que al conectarse como un usuario de base de datos independiente, la cuenta de usuario de base de datos debe crearse independientemente en cada base de datos que el usuario necesitará.The activity of the contained database user is limited to the authenticating database, so when connecting as a contained database user, the database user account must be independently created in each database that the user will need. Para cambiar las bases de datos, los usuarios de SQL DatabaseSQL Database deben crear una nueva conexión.To change databases, SQL DatabaseSQL Database users must create a new connection. Los usuarios de base de datos independiente de SQL ServerSQL Server pueden cambiar bases de datos si hay un usuario idéntico en otra base de datos.Contained database users in SQL ServerSQL Server can change databases if an identical user is present in another database.

Azure: SQL DatabaseSQL Database y Almacenamiento de datos SQLSQL Data Warehouse admiten las identidades de Azure Active Directory como usuarios de base de datos independiente.Azure: SQL DatabaseSQL Database and Almacenamiento de datos SQLSQL Data Warehouse support Azure Active Directory identities as contained database users. SQL DatabaseSQL Database admite usuarios de base de datos independientes que usan autenticación de SQL ServerSQL Server , pero Almacenamiento de datos SQLSQL Data Warehouse no.supports contained database users using SQL ServerSQL Server authentication, but Almacenamiento de datos SQLSQL Data Warehouse does not. Para más información, consulte Conexión a Base de datos SQL mediante autenticación de Azure Active Directory.For more information, see Connecting to SQL Database By Using Azure Active Directory Authentication. Al utilizar la autenticación de Active Directory de Azure, las conexiones de SSMS se pueden realizar mediante autenticación universal de Active Directory.When using Azure Active Directory authentication, connections from SSMS can be made using Active Directory Universal Authentication. Los administradores pueden configurar la autenticación universal para requerir Multi-Factor Authentication, que comprueba la identidad mediante una llamada de teléfono, un mensaje de texto, una tarjeta inteligente con pin o una notificación de aplicación móvil.Administrators can configure Universal Authentication to require Multi-Factor Authentication, which verifies identity by using a phone call, text message, smart card with pin, or mobile app notification. Para más información, consulte Compatibilidad de SSMS con Azure AD MFA con SQL Database y SQL Data Warehouse.For more information, see SSMS support for Azure AD MFA with SQL Database and SQL Data Warehouse.

Para SQL DatabaseSQL Database y Almacenamiento de datos SQLSQL Data Warehouse, dado que el nombre de la base de datos siempre se requiere en la cadena de conexión, no se necesitan cambios en la cadena de conexión cuando se cambia desde el modelo tradicional al modelo de usuario de base de datos independiente.For SQL DatabaseSQL Database and Almacenamiento de datos SQLSQL Data Warehouse, since the database name is always required in the connection string, no changes are required to the connection string when switching from the traditional model to the contained database user model. Para las conexiones de SQL ServerSQL Server , el nombre de la base de datos debe agregarse a la cadena de conexión si no está ya presente.For SQL ServerSQL Server connections, the name of the database must be added to the connection string, if it is not already present.

Importante

Cuando se usa el modelo tradicional, los roles de nivel de servidor y los permisos de nivel de servidor pueden limitar el acceso a todas las bases de datos.When using the traditional model, the server level roles and server level permissions can limit access to all databases. Al usar el modelo de base de datos independiente, los propietarios de la base de datos y los usuarios de la base de datos con el permiso ALTER ANY USER pueden conceder acceso a la base de datos.When using the contained database model, database owners and database users with the ALTER ANY USER permission can grant access to the database. Esto reduce el control de acceso de inicios de sesión de servidor con privilegios altos y amplía el control de acceso para incluir los usuarios de la base de datos con privilegios altos.This reduces the access control of high privileged server logins and expands the access control to include high privileged database users.

FirewallsFirewalls

SQL ServerSQL Server

Las reglas de Firewall de Windows se aplican a todas las conexiones y tienen el mismo efecto en los inicios de sesión (conexiones de modelo tradicional) y los usuarios de la base de datos independiente.Windows firewall rules apply to all connections and have the same effects on logins (traditional model connections) and contained database users. Para obtener más información sobre el Firewall de Windows, consulte Configure a Windows Firewall for Database Engine Access.For more information about the Windows firewall, see Configure a Windows Firewall for Database Engine Access.

SQL DatabaseSQL Database FirewallsFirewalls

SQL DatabaseSQL Database permite reglas de: firewall independientes para las conexiones de nivel de servidor (inicios de sesión) y las conexiones de nivel de base de datos (usuarios de base de datos independiente).allows separate firewall rules for server level connections (logins) and for database level connections (contained database users). Al conectarse a una base de datos de usuario, primero se comprueban las reglas de firewall de base de datos.When connecting to a user database, first database firewall rules are checked. Si no hay ninguna regla que permita acceder a la base de datos, se comprueban las reglas de firewall de nivel de servidor, lo que requiere acceso a la base de datos maestra del servidor maestro de SQL Database.If there is no rule that allows access to the database, the server level firewall rules are checked, which requires access to the SQL Database server master database. Las reglas de firewall de nivel de base de datos combinadas con los usuarios de la base de datos independiente pueden eliminar la necesidad de acceder a la base de datos maestra del servidor durante la conexión, lo que puede mejorar la escalabilidad de la conexión.Database level firewall rules combined with contained database users can eliminate necessity to access master database of the server during connection providing improved connection scalability.

Para obtener más información sobre las reglas de firewall de SQL DatabaseSQL Database , vea los temas siguientes:For more information about SQL DatabaseSQL Database firewall rules, see the following topics:

Diferencias de sintaxisSyntax Differences

Modelo tradicionalTraditional model Modelo de usuario de base de datos independienteContained database user model
Cuando se conecta a la base de datos maestra:When connected to the master database:

CREATE LOGIN login_name WITH PASSWORD = 'strong_password';

Después, cuando se conecta a una base de datos de usuario:Then when connected to a user database:

CREATE USER 'user_name' FOR LOGIN 'login_name';
Cuando se conecta a una base de datos de usuario:When connected to a user database:

CREATE USER user_name WITH PASSWORD = 'strong_password';
Modelo tradicionalTraditional model Modelo de usuario de base de datos independienteContained database user model
Para cambiar la contraseña, en el contexto de la base de datos maestra:To change password, in context of master DB:

ALTER LOGIN login_name WITH PASSWORD = 'strong_password';
Para cambiar la contraseña, en el contexto de la base de datos de usuario:To change password, in context of user DB:

ALTER USER user_name WITH PASSWORD = 'strong_password';

NotasRemarks

  • En SQL ServerSQL Server, los usuarios de la base de datos independiente deben estar habilitados para la instancia de SQL ServerSQL Server.In SQL ServerSQL Server, contained database users must be enabled for the instance of SQL ServerSQL Server. Para obtener más información, vea contained database authentication Server Configuration Option.For more information, see contained database authentication Server Configuration Option.
  • Los usuarios de base de datos independiente y los inicios de sesión con nombres no superpuestos pueden coexistir en las aplicaciones.Contained database users and logins with non-overlapping names can co-exist in your applications.
  • Si hay un inicio de sesión en la base de datos maestra con el nombre name1 y crea un usuario de base de datos independiente denominado name1, cuando se proporcione un nombre de base de datos en la cadena de conexión, el contexto del usuario de base de datos tendrá prioridad sobre el contexto de inicio de sesión al conectarse a la base de datos.If there is a login in master database with the name name1 and you create a contained database user named name1, when a database name is provided in the connection string, the context of the database user will be picked over login context when connecting to the database. Es decir, los usuarios de base de datos independiente tienen prioridad sobre los inicios de sesión con el mismo nombre.That is, contained database user will take precedence over logins with the same name.
  • En SQL DatabaseSQL Database , el nombre de un usuario de base de datos independiente no puede ser el mismo que el nombre de la cuenta de administrador del servidor.In SQL DatabaseSQL Database the name of contained database user cannot be the same as the name of the server admin account.
  • La cuenta de administrador del servidor de SQL DatabaseSQL Database nunca puede ser un usuario de base de datos independiente.The SQL DatabaseSQL Database server admin account can never be a contained database user. El administrador del servidor tiene los permisos necesarios para crear y administrar los usuarios de la base de datos independiente.The server admin has sufficient permissions to create and manage contained database users. El administrador del servidor puede conceder permisos a los usuarios de base de datos independiente en bases de datos de usuario.The server admin can grant permissions to contained database users on user databases.
  • Ya que los usuarios de base de datos independiente son entidades de seguridad de nivel de base de datos, deberá crear usuarios de base de datos independiente en cada base de datos en la que los utilizará.Since contained database users are database level principals, you need to create contained database users in every database that you would use them. La identidad se limita a la base de datos y es independiente en todos los aspectos de un usuario con el mismo nombre y la misma contraseña de otra base de datos del mismo servidor.The identity is confined to the database and is independent in all aspects from a user with same name and same password in another database in the same server.
  • Use las mismas contraseñas seguras que usaría normalmente para los inicios de sesión.Use the same strength passwords that you would normally use for logins.

Consulte tambiénSee Also

Bases de datos independientes Contained Databases
Prácticas recomendadas de seguridad con bases de datos independientes Security Best Practices with Contained Databases
CREATE USER (Transact-SQL) CREATE USER (Transact-SQL)
Conexión a Base de datos SQL mediante autenticación de Azure Active DirectoryConnecting to SQL Database By Using Azure Active Directory Authentication