Migración de una aplicación de Node.js para usar conexiones sin contraseña con Azure SQL Database
Se aplica a: la base de datos de Azure SQL
Las solicitudes de aplicación a Azure SQL Database deben autenticarse. Aunque hay varias opciones para autenticarse en Azure SQL Database, debe priorizar las conexiones sin contraseña en las aplicaciones siempre que sea posible. Los métodos de autenticación tradicionales que usan contraseñas o claves secretas crean riesgos y complicaciones de seguridad. Visite el centro de Conexiones sin contraseña para servicios de Azure para obtener más información sobre las ventajas de pasar a conexiones sin contraseña.
El siguiente tutorial explica cómo migrar una aplicación de Node.js existente para conectarse a Azure SQL Database y utilizar conexiones sin contraseña en lugar de una solución con nombre de usuario y contraseña.
Configuración de Azure SQL Database
Las conexiones sin contraseña usan la autenticación de Microsoft Entra para conectarse a los servicios de Azure, incluida la base de datos de Azure SQL. Con la autenticación de Microsoft Entra, puede administrar identidades en una ubicación central para simplificar la administración de permisos. Obtenga más información sobre cómo configurar la autenticación de Microsoft Entra para la base de datos de Azure SQL:
- Información general sobre la autenticación de Microsoft Entra
- Configurar la autenticación de Microsoft Entra
Para esta guía de migración, asegúrese de que tiene asignado un administrador de Microsoft Entra a la base de datos de Azure SQL.
Vaya a la página de Microsoft Entra del servidor lógico.
Seleccione Establecer administrador para abrir el menú de control flotante de Microsoft Entra ID.
En el menú de control flotante de Microsoft Entra ID, busque el usuario que quiere asignar como administrador.
Seleccione el usuario y elija Seleccionar.
Configuración del entorno de desarrollo local
Las conexiones sin contraseña se pueden configurar para que funcionen en entornos locales y hospedados en Azure. En esta sección, se aplican configuraciones para permitir que los usuarios individuales se autentiquen en Azure SQL Database para el desarrollo local.
Inicio de sesión en Azure
Para el desarrollo local, asegúrese de que ha iniciado sesión con la misma cuenta de Azure AD que quiere usar para acceder a Azure SQL Database. Puede autenticarse a través de herramientas de desarrollo populares, como la CLI de Azure o Azure PowerShell. Las herramientas de desarrollo con las que puede autenticarse varían en todos los idiomas.
Inicie sesión en Azure a través de la CLI de Azure mediante el siguiente comando:
az login
Creación del usuario de la base de datos y asignación de roles
Cree un usuario en Azure SQL Database. El usuario debe corresponder a la cuenta de Azure que usó para iniciar sesión localmente en la sección Inicio de sesión en Azure.
En Azure Portal, vaya a la base de datos SQL y seleccione Editor de consultas (versión preliminar).
Seleccione Continuar como
<your-username>
en el lado derecho de la pantalla para iniciar sesión en la base de datos con su cuenta.En la vista del editor de consultas, ejecute los siguientes comandos de T-SQL:
CREATE USER [user@domain] FROM EXTERNAL PROVIDER; ALTER ROLE db_datareader ADD MEMBER [user@domain]; ALTER ROLE db_datawriter ADD MEMBER [user@domain]; ALTER ROLE db_ddladmin ADD MEMBER [user@domain]; GO
Al ejecutar estos comandos, se asigna el rol Colaborador de base de datos SQL a la cuenta especificada. Este rol permite que la identidad lea, escriba y modifique los datos y el esquema de la base de datos. Para más información sobre los roles asignados, consulte Roles fijos de base de datos.
Actualización de la configuración de conexión local
Cree la configuración del entorno de la aplicación.
AZURE_SQL_SERVER=<YOURSERVERNAME>.database.windows.net AZURE_SQL_DATABASE=<YOURDATABASENAME> AZURE_SQL_PORT=1433
El código de aplicación existente que se conecta a Azure SQL Database mediante el controlador SQL de Node.js: tedious sigue funcionando con las conexiones sin contraseña con cambios menores. Para usar una identidad administrada asignada por el usuario, pase las propiedades
authentication.type
yoptions.clientId
.import sql from 'mssql'; // Environment settings - no user or password const server = process.env.AZURE_SQL_SERVER; const database = process.env.AZURE_SQL_DATABASE; const port = parseInt(process.env.AZURE_SQL_PORT); // Passwordless configuration const config = { server, port, database, authentication: { type: 'azure-active-directory-default', }, options: { encrypt: true, clientId: process.env.AZURE_CLIENT_ID // <----- user-assigned managed identity } }; // Existing applicaton code export default class Database { config = {}; poolconnection = null; connected = false; constructor(config) { this.config = config; console.log(`Database: config: ${JSON.stringify(config)}`); } async connect() { try { console.log(`Database connecting...${this.connected}`); if (this.connected === false) { this.poolconnection = await sql.connect(this.config); this.connected = true; console.log('Database connection successful'); } else { console.log('Database already connected'); } } catch (error) { console.error(`Error connecting to database: ${JSON.stringify(error)}`); } } async disconnect() { try { this.poolconnection.close(); console.log('Database connection closed'); } catch (error) { console.error(`Error closing database connection: ${error}`); } } async executeQuery(query) { await this.connect(); const request = this.poolconnection.request(); const result = await request.query(query); return result.rowsAffected[0]; } } const databaseClient = new Database(config); const result = await databaseClient.executeQuery(`select * from mytable where id = 10`);
La variable de entorno
AZURE_CLIENT_ID
se crea más adelante en este tutorial.
Prueba de la aplicación
Ejecute la aplicación localmente y compruebe que las conexiones a Azure SQL Database funcionan según lo previsto. Tenga en cuenta que los cambios en los usuarios y roles de Azure pueden tardar varios minutos en propagarse por su entorno de Azure. Ahora la aplicación está configurada para ejecutarse localmente sin que los desarrolladores tengan que administrar los secretos en la propia aplicación.
Configuración del entorno de hospedaje de Azure
Una vez que la aplicación se ha configurado para usar conexiones sin contraseña localmente, el mismo código se puede autenticar en los servicios de Azure SQL Database después de implementarla en Azure. En las secciones siguientes se explica cómo configurar una aplicación implementada para conectarse a Azure SQL Database mediante una identidad administrada. Las identidades administradas proporcionan una identidad administrada automáticamente en Microsoft Entra ID (anteriormente Azure Active Directory) para que las aplicaciones la utilicen al conectarse a los recursos que admiten la autenticación de Microsoft Entra. Más información sobre las identidades administradas:
- Introducción al inicio de sesión sin contraseña
- Procedimientos recomendados de identidad administrada
- Identidades administradas en Microsoft Entra para Azure SQL
Creación de la identidad administrada
Cree una identidad administrada asignada por el usuario mediante Azure Portal o la CLI de Azure. La aplicación usa la identidad para autenticarse en otros servicios.
- En la parte superior del Azure Portal, busque Identidades administradas. Seleccione el resultado de Identidades administradas.
- Seleccione + Crear en la parte superior de la página de información general de Identidades administradas.
- En la pestaña Datos básicos, escriba los valores siguientes:
- Suscripción: Seleccione la opción de suscripción que desee.
- Grupo de recursos: seleccione el grupo de recursos que desee.
- Región: seleccione una región cercana a su ubicación.
- Nombre: Escriba un nombre reconocible para la identidad, como MigrationIdentity.
- En la parte inferior de la página, seleccione Revisar y crear.
- Cuando finalicen las comprobaciones de validación, seleccione Crear. Azure crea una nueva identidad asignada por el usuario.
Una vez creado el recurso, seleccione Ir al recurso para ver los detalles de la identidad administrada.
Asociación de la identidad administrada a la aplicación web
Configure la aplicación web para que use la identidad administrada asignada por el usuario que ha creado.
Complete los pasos siguientes en Azure Portal para asociar una identidad administrada asignada por el usuario con la aplicación. Estos mismos pasos se aplican a los siguientes servicios de Azure:
- Azure Spring Apps
- Azure Container Apps
- Máquinas virtuales de Azure
- Azure Kubernetes Service
- Vaya a la página de información general de la aplicación web.
En el menú de navegación de la izquierda, seleccione Identidad.
En la página Identidad, cambie a la pestaña Asignado por el usuario.
Seleccione + Agregar para abrir el control flotante Agregar identidad administrada asignada por el usuario.
Seleccione la suscripción que usó anteriormente para crear la identidad.
Busque MigrationIdentity por nombre y selecciónelo en los resultados de la búsqueda.
Seleccione Agregar para asociar la identidad a la aplicación.
Creación de un usuario de base de datos para la identidad y asignación de roles
Cree un usuario de SQL Database que vuelva a asignarse a la identidad administrada asignada por el usuario. Asigna los roles SQL necesarios al usuario para permitir que la aplicación lea, escriba y modifique los datos y el esquema de la base de datos.
En Azure Portal, vaya a la base de datos SQL y seleccione Editor de consultas (versión preliminar).
Seleccione Continuar como
<username>
en el lado derecho de la pantalla para iniciar sesión en la base de datos con su cuenta.En la vista del editor de consultas, ejecute los siguientes comandos de T-SQL:
CREATE USER [user-assigned-identity-name] FROM EXTERNAL PROVIDER; ALTER ROLE db_datareader ADD MEMBER [user-assigned-identity-name]; ALTER ROLE db_datawriter ADD MEMBER [user-assigned-identity-name]; ALTER ROLE db_ddladmin ADD MEMBER [user-assigned-identity-name]; GO
Al ejecutar estos comandos, se asigna el rol Colaborador de base de datos SQL a la identidad administrada asignada por el usuario. Este rol permite que la identidad lea, escriba y modifique los datos y el esquema de la base de datos.
Importante
Tenga cuidado al asignar roles de usuario de base de datos en entornos de producción empresarial. En esos escenarios, la aplicación no debe realizar todas las operaciones con una única identidad con privilegios elevados. Intente implementar el principio de privilegios mínimos configurando varias identidades con permisos específicos para tareas específicas.
Puede consultar más información sobre cómo configurar roles de base de datos y seguridad en los siguientes recursos:
Creación de una configuración de aplicación para el identificador de cliente de la identidad administrada
Para usar la identidad administrada asignada por el usuario, cree una variable de entorno AZURE_CLIENT_ID
y establézcala igual que el identificador de cliente de la identidad administrada. Puede establecer esta variable en la sección Configuración de la aplicación en Azure Portal. El identificador de cliente se encuentra en la sección Información general del recurso de identidad administrada en Azure Portal.
Guarde los cambios y reinicie la aplicación si no lo hace automáticamente.
Si necesita usar una identidad administrada asignada por el sistema, omita la propiedad options.clientId
. Seguirá teniendo que pasar la propiedad authentication.type
.
const config = {
server,
port,
database,
authentication: {
type: 'azure-active-directory-default'
},
options: {
encrypt: true
}
};
Prueba de la aplicación
Pruebe la aplicación para asegurarse de que todo sigue funcionando. Los cambios pueden tardar unos minutos en propagarse a través del entorno de Azure.
Pasos siguientes
En este tutorial, ha aprendido a migrar una aplicación a conexiones sin contraseña.
Puede leer los siguientes recursos para explorar los conceptos que se describen en este artículo con más detalle: