Compartir a través de


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:

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.

  1. Vaya a la página de Microsoft Entra del servidor lógico.

  2. Seleccione Establecer administrador para abrir el menú de control flotante de Microsoft Entra ID.

  3. En el menú de control flotante de Microsoft Entra ID, busque el usuario que quiere asignar como administrador.

  4. Seleccione el usuario y elija Seleccionar.

    Captura de pantalla que muestra cómo habilitar la administración de Microsoft Entra.

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.

  1. En Azure Portal, vaya a la base de datos SQL y seleccione Editor de consultas (versión preliminar).

  2. Seleccione Continuar como <your-username> en el lado derecho de la pantalla para iniciar sesión en la base de datos con su cuenta.

  3. 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
    

    Captura de pantalla que muestra cómo usar el editor de consultas de Azure.

    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

  1. 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
    
  2. 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 y options.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:

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.

  1. En la parte superior del Azure Portal, busque Identidades administradas. Seleccione el resultado de Identidades administradas.
  2. Seleccione + Crear en la parte superior de la página de información general de Identidades administradas.
  3. 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.
  4. En la parte inferior de la página, seleccione Revisar y crear.
  5. 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.

Captura de pantalla que muestra cómo crear un recurso compartido de archivos con Azure Portal.

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.
  1. En el menú de navegación de la izquierda, seleccione Identidad.

  2. En la página Identidad, cambie a la pestaña Asignado por el usuario.

  3. Seleccione + Agregar para abrir el control flotante Agregar identidad administrada asignada por el usuario.

  4. Seleccione la suscripción que usó anteriormente para crear la identidad.

  5. Busque MigrationIdentity por nombre y selecciónelo en los resultados de la búsqueda.

  6. Seleccione Agregar para asociar la identidad a la aplicación.

    Una captura de pantalla que muestra cómo agregar un rol a una identidad administrada.

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.

  1. En Azure Portal, vaya a la base de datos SQL y seleccione Editor de consultas (versión preliminar).

  2. Seleccione Continuar como <username> en el lado derecho de la pantalla para iniciar sesión en la base de datos con su cuenta.

  3. 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
    

    Captura de pantalla que muestra cómo usar el editor de consultas de Azure para crear un usuario SQL para una identidad administrada.

    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: