Compartilhar via


Migrar o aplicativo Node.js para usar conexões sem senha com o Banco de Dados SQL do Azure

Aplica-se a: Banco de Dados SQL do Azure

As solicitações de aplicativo para Banco de Dados SQL do Azure devem ser autenticadas. Embora haja várias opções para autenticação no Banco de Dados SQL do Azure, sempre que for possível você deve priorizar conexões sem senha nos aplicativos. Métodos de autenticação tradicionais que usam senhas ou chaves secretas criam riscos e complicações de segurança. Visite as de conexões sem senha para os serviços do Azure para saber mais sobre as vantagens de migrar para conexões sem senha.

O tutorial a seguir explica como migrar um aplicativo Node.js existente para se conectar ao Banco de Dados SQL do Azure e usar conexões sem senha em vez de uma solução de nome de usuário e senha.

Configurar o Banco de Dados SQL do Azure

As conexões sem senha usam a autenticação do Microsoft Entra para se conectar aos serviços do Azure, incluindo o Banco de Dados SQL do Azure. Com a autenticação do Microsoft Entra, você pode gerenciar identidades em uma localização central para simplificar o gerenciamento de permissões. Saiba mais sobre a configuração de autenticação do Microsoft Entra para o banco de dados SQL do Azure:

Para este guia de migração, verifique se há uma administração do Microsoft Entra atribuída ao Banco de Dados SQL do Azure.

  1. Navegue até a página Microsoft Entra do servidor lógico.

  2. Selecione Configurar administração para abrir o menu suspenso do Microsoft Entra ID.

  3. No menu suspenso do Microsoft Entra ID, pesquise pelo usuário que você deseja atribuir para administração.

  4. Selecione o usuário e escolha Selecionar.

    Uma captura de tela mostrando como habilitar o admin do Microsoft Entra.

Configurar seu ambiente de desenvolvimento

As conexões sem senha podem ser configuradas para funcionar em ambientes locais e hospedados no Azure. Nesta seção, você aplicará as configurações para permitir que usuários individuais se autentiquem no Banco de Dados SQL do Azure para desenvolvimento local.

Entrar no Azure

Para desenvolvimento local, verifique se você está conectado com a mesma conta do Azure AD que deseja usar para acessar o Banco de Dados SQL do Azure. Você pode autenticar por meio de ferramentas de desenvolvimento populares, como a CLI do Azure ou o Azure PowerShell. As ferramentas de desenvolvimento com as quais você pode autenticar variam entre os idiomas.

Entre no Azure por meio da CLI do Azure usando o seguinte comando:

az login

Criar o usuário do banco de dados e atribuir funções

Crie um usuário no Banco de Dados SQL do Azure. O usuário deve corresponder à conta do Azure que usou para entrar localmente na seção Entrar no Azure.

  1. No portal do Azure, navegue até o banco de dados SQL e selecione Editor de consultas (versão prévia).

  2. Selecione Continuar como <your-username> no lado direito da tela para entrar no banco de dados usando sua conta.

  3. Na exibição do editor de consultas, execute os seguintes comandos 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
    

    Uma captura de tela mostrando como usar o editor de Consultas do Azure.

    A execução desses comandos atribui a função Colaborador do BD do SQL à conta especificada. Essa função permite que a identidade leia, grave e modifique os dados e o esquema de seu banco de dados. Para obter mais informações sobre as funções atribuídas, confira Funções de banco de dados fixo.

Atualizar a configuração de conexão local

  1. Crie configurações de ambiente para seu aplicativo.

    AZURE_SQL_SERVER=<YOURSERVERNAME>.database.windows.net
    AZURE_SQL_DATABASE=<YOURDATABASENAME>
    AZURE_SQL_PORT=1433
    
  2. O Código de aplicativo existente que se conecta ao Banco de Dados SQL do Azure usando o Driver SQL do Node.js SQL Driver – o tedious continua a funcionar com conexões sem senha com pequenas alterações. Para usar uma identidade gerenciada atribuída pelo usuário, passe as propriedades authentication.type e 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`);
    

    A variável de ambiente AZURE_CLIENT_ID é criada posteriormente neste tutorial.

Testar o aplicativo

Execute o aplicativo localmente e verifique se as conexões com o Banco de Dados SQL do Azure estão funcionando conforme o esperado. Lembre-se de que pode levar vários minutos para que as alterações de usuários e funções se propaguem pelo ambiente do Azure. Seu aplicativo agora está configurado para ser executado localmente sem que os desenvolvedores precisem gerenciar segredos no próprio aplicativo.

Configurar o ambiente de hospedagem do Azure

Depois que o aplicativo estiver configurado para usar conexões sem senha localmente, o mesmo código poderá ser autenticado no Banco de Dados SQL do Azure depois de implantado no Azure. As seções a seguir explicam como configurar um aplicativo implantado para se conectar ao Banco de Dados SQL do Azure usando uma identidade gerenciada. As identidades gerenciadas fornecem uma identidade gerenciada automaticamente no Microsoft Entra ID (anteriormente Azure Active Directory) para aplicativos usarem ao se conectarem a recursos que dão suporte à autenticação do Microsoft Entra. Saiba mais sobre as identidades gerenciadas:

Criar a identidade gerenciada

Crie uma identidade gerenciada atribuída pelo usuário usando o portal do Azure ou a CLI do Azure. Seu aplicativo usa a identidade para se autenticar em outros serviços.

  1. Na parte superior do portal do Azure, pesquise Identidades gerenciadas. Selecione o resultado Identidades gerenciadas.
  2. Selecione + Criar na parte superior da página de visão geral de Identidades gerenciadas.
  3. Na guia Informações Básicas, insira os seguintes valores:
    • Assinatura: selecione a assinatura desejada.
    • Grupo de recursos: selecione o grupo de recursos desejado.
    • Região: selecione uma região próxima à sua localização.
    • Nome: insira um nome reconhecível para sua identidade, como MigrationIdentity.
  4. Selecione Revisar + criar na parte inferior da página.
  5. Quando as verificações de validação forem concluídas, selecione Criar. O Azure cria uma nova identidade atribuída pelo usuário.

Depois que o recurso for criado, selecione Ir para o recurso para exibir os detalhes da identidade gerenciada.

Uma captura de tela mostrando como criar uma identidade gerenciada usando o portal do Azure.

Associar a identidade gerenciada ao seu aplicativo Web

Configure seu aplicativo Web para usar a identidade gerenciada atribuída pelo usuário que você criou.

Conclua as etapas a seguir no portal do Azure para associar uma identidade gerenciada atribuída pelo usuário ao seu aplicativo. Essas mesmas etapas se aplicam aos seguintes serviços do Azure:

  • Azure Spring Apps
  • Aplicativos de Contêiner do Azure
  • Máquinas Virtuais do Azure
  • Serviço de Kubernetes do Azure
  • Navegue até a página de visão geral do seu aplicativo Web.
  1. Selecione Identidade no painel de navegação esquerdo.

  2. Na página Identidade, alterne para a guia Atribuída pelo usuário.

  3. Selecione + Adicionar para abrir o submenu Adicionar identidade gerenciada atribuída pelo usuário.

  4. Selecione a assinatura que você usou anteriormente para criar a identidade.

  5. Pesquise a MigrationIdentity pelo nome e selecione-a nos resultados da pesquisa.

  6. Selecione Adicionar para associar a identidade ao seu aplicativo.

    Uma captura de tela mostrando como atribuir uma identidade gerenciada.

Criar um usuário de banco de dados para a identidade e atribuir funções

Crie um usuário do banco de dados SQL que mapeie de volta para a identidade gerenciada atribuída pelo usuário. Atribua as funções SQL necessárias ao usuário para permitir que seu aplicativo leia, escreva e modifique os dados e o esquema do banco de dados.

  1. No portal do Azure, navegue até o banco de dados SQL e selecione Editor de consultas (versão prévia).

  2. Selecione Continuar como <username> no lado direito da tela para entrar no banco de dados usando sua conta.

  3. Na exibição do editor de consultas, execute os seguintes comandos 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
    

    Uma captura de tela mostrando como usar o editor de Consultas do Azure para criar um usuário SQL na identidade gerenciada.

    A execução desses comandos atribui a função Colaborador de BD do SQL à identidade gerenciada atribuída pelo usuário. Essa função permite que a identidade leia, grave e modifique os dados e o esquema de seu banco de dados.


Importante

Tenha cuidado ao atribuir funções de usuário do banco de dados em ambientes de produção corporativos. Nesses cenários, o aplicativo não deve executar todas as operações usando uma única identidade elevada. Experimente implementar o princípio de privilégios mínimos configurando várias identidades com permissões específicas para tarefas específicas.

Você pode ler mais sobre como configurar funções de banco de dados e segurança nos seguintes recursos:

Criar uma configuração de aplicativo para o ID do cliente de identidade gerenciada

Para usar a identidade gerenciada atribuída pelo usuário, crie uma variável de ambiente AZURE_CLIENT_ID e defina-a igual à ID do cliente da identidade gerenciada. Você pode definir essa variável na seção Configuração do seu aplicativo no portal do Azure. Você pode encontrar a ID do cliente na seção Visão geral do recurso de identidade gerenciada no portal do Azure.

Salve suas alterações e reinicie o aplicativo se ele não o fizer automaticamente.

Se você precisar usar uma identidade gerenciada atribuída pelo sistema, omita a propriedade options.clientId. Você ainda precisa passar a propriedade authentication.type.

const config = {
  server,
  port,
  database,
  authentication: {
    type: 'azure-active-directory-default'
  },
  options: {
    encrypt: true
  }
};

Testar o aplicativo

Teste seu aplicativo para garantir que tudo ainda esteja funcionando. Pode levar alguns minutos para que todas as alterações sejam propagadas pelo ambiente do Azure.

Próximas etapas

Neste tutorial, você aprendeu a migrar um aplicativo para conexões sem senha.

Você pode ler os seguintes recursos para explorar os conceitos discutidos neste artigo com mais detalhes: