Migrar um aplicativo Python 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 o 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, você deve priorizar conexões sem senha em seus aplicativos quando possível. Os métodos de autenticação tradicionais que usam senhas ou chaves secretas criam riscos e complicações de segurança. Visite as conexões sem senha para o hub de serviços do Azure para saber mais sobre as vantagens de mudar para conexões sem senha. O tutorial a seguir explica como migrar um aplicativo Python existente para se conectar ao Banco de Dados SQL do Azure para 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. Autenticação do Microsoft Entra, você pode gerenciar identidades em um local central para simplificar o gerenciamento de permissões. Saiba mais sobre como configurar a autenticação do Microsoft Entra para seu Banco de Dados SQL do Azure:
Para este guia de migração, verifique se você tem um administrador do Microsoft Entra atribuído ao seu Banco de Dados SQL do Azure.
Navegue até a página Microsoft Entra do seu servidor lógico.
Selecione Definir administrador para abrir o menu suspenso ID do Microsoft Entra .
No menu suspenso Microsoft Entra ID , procure o usuário que você deseja atribuir como administrador.
Selecione o usuário e escolha Selecionar.
Configure seu ambiente de desenvolvimento local
As conexões sem senha podem ser configuradas para funcionar em ambientes locais e hospedados no Azure. Nesta seção, você aplica 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 um usuário de 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 você usou para entrar localmente na seção Entrar no Azure .
No portal do Azure, navegue até o banco de dados SQL e selecione Editor de consultas (visualização).
Selecione Continuar como
<your-username>
no lado direito da tela para entrar no banco de dados usando sua conta.No modo de 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
A execução desses comandos atribui a função de Colaborador do Banco de Dados SQL à conta especificada. Essa função permite que a identidade leia, escreva e modifique os dados e o esquema do seu banco de dados. Para obter mais informações sobre as funções atribuídas, consulte Funções de banco de dados fixas.
Atualizar a configuração da conexão local
O código de aplicativo existente que se conecta ao Banco de Dados SQL do Azure usando o Python SQL Driver - pyodbc continua a funcionar com conexões sem senha com pequenas alterações. Por exemplo, o código a seguir funciona com autenticação SQL e conexões sem senha quando executado localmente e quando implantado no Serviço de Aplicativo do Azure.
import os
import pyodbc, struct
from azure.identity import DefaultAzureCredential
connection_string = os.environ["AZURE_SQL_CONNECTIONSTRING"]
def get_all():
with get_conn() as conn:
cursor = conn.cursor()
cursor.execute("SELECT * FROM Persons")
# Do something with the data
return
def get_conn():
credential = DefaultAzureCredential(exclude_interactive_browser_credential=False)
token_bytes = credential.get_token("https://database.windows.net/.default").token.encode("UTF-16-LE")
token_struct = struct.pack(f'<I{len(token_bytes)}s', len(token_bytes), token_bytes)
SQL_COPT_SS_ACCESS_TOKEN = 1256 # This connection option is defined by microsoft in msodbcsql.h
conn = pyodbc.connect(connection_string, attrs_before={SQL_COPT_SS_ACCESS_TOKEN: token_struct})
return conn
Gorjeta
Neste código de exemplo, a variável WEBSITE_HOSTNAME
de ambiente do Serviço de Aplicativo é usada para determinar em que ambiente o código está sendo executado. Para outros cenários de implantação, você pode usar outras variáveis de ambiente para determinar o ambiente.
Para atualizar a cadeia de conexão referenciada (AZURE_SQL_CONNECTIONSTRING
) para desenvolvimento local, use o formato de cadeia de conexão sem senha:
Driver={ODBC Driver 18 for SQL Server};Server=tcp:<database-server-name>.database.windows.net,1433;Database=<database-name>;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30
Testar a aplicação
Execute seu 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 nos usuários e funções do Azure se propaguem pelo seu ambiente do Azure. Seu aplicativo agora está configurado para ser executado localmente sem que os desenvolvedores tenham que gerenciar segredos no próprio aplicativo.
Configurar o ambiente de hospedagem do Azure
Depois que seu 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 Ative Directory) para os aplicativos usarem ao se conectar a recursos que oferecem suporte à autenticação do Microsoft Entra. Saiba mais sobre 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 autenticar em outros serviços.
- Na parte superior do portal do Azure, procure identidades gerenciadas. Selecione o resultado Identidades gerenciadas.
- Selecione + Criar na parte superior da página de visão geral de Identidades Gerenciadas .
- Na guia Noçõ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 perto da sua localização.
- Nome: insira um nome reconhecível para sua identidade, como MigrationIdentity.
- Selecione Rever + criar na parte inferior da página.
- Quando as verificações de validação terminarem, 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.
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 a identidade gerenciada atribuída pelo usuário ao seu aplicativo. Estas mesmas etapas se aplicam aos seguintes serviços do Azure:
- Azure Spring Apps
- Azure Container Apps
- Máquinas virtuais do Azure
- Azure Kubernetes Service
- Navegue até a página de visão geral do seu aplicativo Web.
Selecione Identidade na navegação à esquerda.
Na página Identidade, alterne para a guia Usuário atribuído.
Selecione + Adicionar para abrir o submenu Adicionar identidade gerenciada atribuída ao usuário.
Selecione a assinatura usada anteriormente para criar a identidade.
Procure a MigrationIdentity pelo nome e selecione-a nos resultados da pesquisa.
Selecione Adicionar para associar a identidade ao seu aplicativo.
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, grave e modifique os dados e o esquema do banco de dados.
No portal do Azure, navegue até o banco de dados SQL e selecione Editor de consultas (visualização).
Selecione Continuar como
<username>
no lado direito da tela para entrar no banco de dados usando sua conta.No modo de 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
A execução desses comandos atribui a função de Colaborador do Banco de Dados SQL à identidade gerenciada atribuída pelo usuário. Essa função permite que a identidade leia, escreva e modifique os dados e o esquema do seu banco de dados.
Importante
Tenha cuidado ao atribuir funções de usuário de 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. Tente implementar o princípio do menor privilégio 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:
Atualizar a cadeia de ligação
Atualize a configuração do aplicativo do Azure para usar o formato de cadeia de conexão sem senha. O formato deve ser o mesmo usado em seu ambiente local.
As cadeias de conexão podem ser armazenadas como variáveis de ambiente em seu ambiente de hospedagem de aplicativo. As instruções a seguir se concentram no Serviço de Aplicativo, mas outros serviços de hospedagem do Azure fornecem configurações semelhantes.
Driver={ODBC Driver 18 for SQL Server};Server=tcp:<database-server-name>.database.windows.net,1433;Database=<database-name>;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30
<database-server-name>
é o nome do seu servidor do Banco de Dados SQL do Azure e <database-name>
é o nome do seu Banco de Dados SQL do Azure.
Criar uma configuração de aplicativo para a ID do cliente de identidade gerenciada
Para usar a identidade gerenciada atribuída pelo usuário, crie uma variável de ambiente de 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 fizer isso automaticamente.
Nota
O código de conexão de exemplo mostrado neste guia de migração usa a classe DefaultAzureCredential quando implantada. Especificamente, ele usa o DefaultAzureCredential sem passar a ID do cliente de identidade gerenciada atribuída pelo usuário para o construtor. Nesse cenário, o fallback é verificar a variável de ambiente AZURE_CLIENT_ID. Se a variável de ambiente AZURE_CLIENT_ID não existir, uma identidade gerenciada atribuída ao sistema será usada se configurada.
Se você passar a ID do cliente de identidade gerenciada no construtor DefaultAzureCredential, o código de conexão ainda poderá ser usado localmente e implantado porque o processo de autenticação retornará à autenticação interativa no cenário local. Para obter mais informações, consulte a biblioteca de cliente do Azure Identity para Python.
Testar a aplicação
Teste seu aplicativo para verificar se tudo ainda está funcionando. Pode levar alguns minutos para que todas as alterações se propaguem pelo seu ambiente do Azure.
Próximos passos
Neste tutorial, você aprendeu como migrar um aplicativo para conexões sem senha.
Você pode ler os seguintes recursos para explorar os conceitos discutidos neste artigo com mais profundidade: