You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不使用账号密码的情况下实现Django应用与Azure SQL Server的身份验证?

无密码连接Azure Django应用与SQL Server的实现方案

两种方案都可以实现代码中不出现用户名和密码的目标,具体操作如下:

方案一:Azure AD托管身份验证(完全无密码)

这是最推荐的方案,通过Azure托管身份直接完成身份验证,全程无需存储任何凭据。

  • 为Django Web应用启用系统分配托管身份
    进入Azure门户的Web应用资源,找到「身份」选项卡,切换到「系统分配」标签,开启状态后保存。

  • 配置SQL Server允许该身份访问

    1. 进入SQL Server资源的「Azure Active Directory」选项卡,设置Azure AD管理员(可选择AD用户或组)。
    2. 使用Azure AD管理员账户登录SQL Server,执行以下SQL创建授权用户:
      CREATE USER [你的Web应用名称] FROM EXTERNAL PROVIDER;
      -- 按需添加数据读写等权限
      ALTER ROLE db_datareader ADD MEMBER [你的Web应用名称];
      ALTER ROLE db_datawriter ADD MEMBER [你的Web应用名称];
      
  • 修改Django数据库配置(settings.py)
    使用django-mssql-backend和pyodbc驱动,配置Azure AD托管身份验证:

    import os
    
    DATABASES = {
        'default': {
            'ENGINE': 'mssql',
            'NAME': os.environ.get('DB_NAME'),  # 也可通过应用设置注入,避免硬编码
            'HOST': os.environ.get('DB_HOST'),
            'PORT': '1433',
            'OPTIONS': {
                'driver': 'ODBC Driver 18 for SQL Server',
                'authentication': 'ActiveDirectoryMsi',
                'TrustServerCertificate': 'no',
            },
        }
    }
    

    安装依赖:pip install django-mssql-backend pyodbc

方案二:Azure Key Vault存储凭据(隔离敏感信息)

如果无法使用Azure AD身份验证,可通过Key Vault存储SQL凭据,代码通过托管身份从Vault读取,避免硬编码。

  • 为Web应用启用托管身份(同方案一)

  • 配置Key Vault及权限

    1. 创建Key Vault资源,在「访问策略」中添加Web应用的托管身份,授予「机密读取」权限。
    2. 在Key Vault的「机密」中添加两个条目:sql-server-username和sql-server-password,对应SQL的账号密码。
  • 配置Web应用的应用设置
    在Web应用的「配置」->「应用程序设置」中添加AZURE_KEY_VAULT_URI,值为你的Key Vault地址(如https://xxx.vault.azure.net/)。

  • 修改Django数据库配置
    通过Azure SDK从Key Vault拉取凭据:

    import os
    from azure.identity import ManagedIdentityCredential
    from azure.keyvault.secrets import SecretClient
    
    def get_secret(secret_name):
        credential = ManagedIdentityCredential()
        client = SecretClient(vault_url=os.environ['AZURE_KEY_VAULT_URI'], credential=credential)
        return client.get_secret(secret_name).value
    
    DATABASES = {
        'default': {
            'ENGINE': 'mssql',
            'NAME': os.environ.get('DB_NAME'),
            'HOST': os.environ.get('DB_HOST'),
            'PORT': '1433',
            'USER': get_secret('sql-server-username'),
            'PASSWORD': get_secret('sql-server-password'),
            'OPTIONS': {
                'driver': 'ODBC Driver 18 for SQL Server',
                'TrustServerCertificate': 'no',
            },
        }
    }
    

    安装依赖:pip install django-mssql-backend pyodbc azure-identity azure-keyvault-secrets

注意:方案一无需存储任何凭据,安全性更高,优先推荐;方案二适合遗留场景或无法启用AD身份验证的SQL Server实例。

内容的提问来源于stack exchange,提问作者Luca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 04:10:40