Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 recursos y seguridad de una réplica con nombre, ya que la réplica con nombre se ejecutará mediante su propio nodo de proceso y resulta útil siempre que se necesite 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, 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 las entidades de seguridad que acceden a la réplica con nombre no pueden tener acceso 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.
Reemplace <password> con una contraseña segura.
CREATE LOGIN [third-party-login]
WITH PASSWORD = '<password>';
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 creada la cuenta, conéctese a la réplica principal de lectura y escritura de su base de datos. Por ejemplo, restaure WideWorldImporters con los detalles disponibles en Instalación y configuración. A continuación, cree un usuario de base de datos para ese inicio de sesión:
CREATE USER [third-party-user] FOR 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.
Reemplace por <password> una 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 <password>
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 por <password> una 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 = '<password>', 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, un usuario recién creado tiene un conjunto mínimo de permisos concedidos (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_datareadersrol 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 por <password> una contraseña segura.
sqlcmd -S MyPrimaryServer.database.windows.net -U third-party-login -P <password> -d WideWorldImporters
Esto producirá un error, ya que el usuario no puede 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 por <password> una contraseña segura.
sqlcmd -S MyNamedReplicaServer.database.windows.net -U third-party-login -P <password> -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.