Compartir a través de


Configuración del acceso aislado para réplicas con nombre de Hiperescala

Se aplica a: Azure SQL Database

En este artículo se describe el procedimiento para conceder acceso a una réplica con nombre de Hiperescala de Azure SQL Database sin conceder acceso a la réplica principal ni a otras réplicas con nombre. Este escenario permite el aislamiento de los recursos y la seguridad de una réplica con nombre, ya que esta se ejecutará con su propio nodo de proceso, y resulta útil siempre que se necesita acceso de solo lectura aislado a una base de datos de Hiperescala de Azure SQL. Aislado, en este contexto, significa que la CPU y la memoria no se comparten entre la réplica principal y la réplica con nombre, que las consultas que se ejecutan en la réplica con nombre no usan recursos de proceso de la réplica principal o de ninguna otra réplica y que las entidades de seguridad que acceden a la réplica con nombre no pueden acceder a otras réplicas, incluida la principal.

Nota:

Microsoft Entra ID era conocido anteriormente como Azure Active Directory (Azure AD).

Creación de un inicio de sesión en el servidor principal

En la base de datos master del servidor lógico que aloja la base de datos principal, ejecute el código siguiente para crear un nuevo inicio de sesión.

Use su propia contraseña segura y única, reemplazando strong_password_here por la contraseña segura.

CREATE LOGIN [third-party-login] WITH PASSWORD = 'strong_password_here';

Recupere el valor hexadecimal del SID para el inicio de sesión creado desde la vista del sistema sys.sql_logins:

SELECT SID FROM sys.sql_logins WHERE name = 'third-party-login';

Deshabilite el inicio de sesión. De esta forma, se impide que este inicio de sesión acceda a cualquier base de datos del servidor que hospeda la réplica principal.

ALTER LOGIN [third-party-login] DISABLE;

Creación de un usuario en la base de datos de lectura y escritura principal

Una vez creado el inicio de sesión, conéctese a la réplica de lectura y escritura principal de la base de datos, por ejemplo, WideWorldImporters (puede encontrar un script de ejemplo para restaurarla aquí: Restauración de una base de datos en Azure SQL) y cree un usuario de base de datos para ese inicio de sesión:

CREATE USER [third-party-user] FROM LOGIN [third-party-login];

Como paso opcional, una vez creado el usuario de la base de datos, puede quitar el inicio de sesión del servidor creado en el paso anterior si existe el problema de que el inicio de sesión se vuelva a habilitar de algún modo. Conéctese a la base de datos master del servidor lógico que hospeda la base de datos principal y ejecute los siguientes scripts de ejemplo:

DROP LOGIN [third-party-login];

Creación de una réplica con nombre en un servidor lógico diferente

Cree un servidor lógico de Azure SQL que se usará para aislar el acceso a la réplica con nombre. Siga las instrucciones disponibles en Creación y administración de servidores y bases de datos únicas en Azure SQL Database. Para crear una réplica con nombre, este servidor debe estar en la misma región de Azure que el servidor que hospeda la réplica principal.

En el ejemplo siguiente, reemplace strong_password_here por la contraseña segura. Por ejemplo, con la CLI de Azure:

az sql server create -g MyResourceGroup -n MyNamedReplicaServer -l MyLocation --admin-user MyAdminUser --admin-password strong_password_here

A continuación, cree una réplica con nombre para la base de datos principal de este servidor. Por ejemplo, con la CLI de Azure:

az sql db replica create -g MyResourceGroup -n WideWorldImporters -s MyPrimaryServer --secondary-type Named --partner-database WideWorldImporters_NR --partner-server MyNamedReplicaServer

Creación de un inicio de sesión en el servidor de réplicas con nombre

Conéctese a la base de datos master del servidor lógico que hospeda la réplica con nombre, creada en el paso anterior. Reemplace strong_password_here por la contraseña segura. Agregue el inicio de sesión mediante el SID recuperado de la réplica principal:

CREATE LOGIN [third-party-login] WITH PASSWORD = 'strong_password_here', sid = 0x0...1234;

En este momento, los usuarios y las aplicaciones que usan third-party-login o bob@contoso.com pueden conectarse a la réplica con nombre, pero no a la réplica principal.

Concesión de permisos de nivel de objeto dentro de la base de datos

Una vez que haya configurado la autenticación de inicio de sesión como se describe, puede usar las instrucciones normales GRANT, DENY y REVOKE para administrar la autorización o los permisos de nivel de objeto dentro de la base de datos. En estas instrucciones, haga referencia al nombre del usuario que creó en la base de datos o a un rol de base de datos que incluya este usuario como miembro. Recuerde ejecutar estos comandos en la réplica principal. Los cambios se propagan a todas las réplicas secundarias, pero solo serán efectivos en la réplica con nombre donde se creó el inicio de sesión de nivel de servidor.

Recuerde que, de forma predeterminada, a un usuario recién creado se le concede un conjunto mínimo de permisos (por ejemplo, no puede acceder a ninguna tabla de usuario). Si quiere permitir que third-party-user o bob@contoso.com lean datos de una tabla, debe conceder explícitamente el permiso SELECT:

GRANT SELECT ON [Application].[Cities] to [third-party-user];

Como alternativa a la concesión de permisos individuales en cada tabla, puede agregarle al usuario el db_datareaders rol de base de datos para permitirle el acceso de lectura a todas las tablas, o puede usar esquemas para permitir el acceso a todas las tablas nuevas y existentes de un esquema.

Prueba del acceso

Puede probar esta configuración mediante cualquier herramienta de cliente e intentar conectarse a la réplica principal y a la réplica con nombre. Por ejemplo, mediante sqlcmd, puede intentar conectarse a la réplica principal con el usuario third-party-login. Reemplace strong_password_here por la contraseña segura.

sqlcmd -S MyPrimaryServer.database.windows.net -U third-party-login -P strong_password_here -d WideWorldImporters

Esta acción producirá un error, ya que el usuario no tiene permiso para conectarse al servidor:

Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : Login failed for user 'third-party-login'. Reason: The account is disabled.

El intento de conectarse a la réplica con nombre se realiza correctamente. Reemplace strong_password_here por la contraseña segura.

sqlcmd -S MyNamedReplicaServer.database.windows.net -U third-party-login -P strong_password_here -d WideWorldImporters_NR

No se devuelve ningún error y las consultas se pueden ejecutar en la réplica con nombre de acuerdo con los permisos de nivel de objeto concedidos.