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

部署Django连接Azure SQL遇自定义Schema错误及登录超时问题

Django连接Azure SQL DB时的架构错误与登录超时问题

问题详情

在Azure环境部署Django服务,切换数据库至Azure SQL DB时,出现架构不存在的错误:

django.db.migrations.exceptions.MigrationSchemaMissing: 无法创建django_migrations表(('42000', '[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]指定的架构名称"b96c7a94-5645-4f7d-ab79-b42d99373823@2fc13e34-f03f-498b-982a-7cb446e25bc6"不存在或无使用权限。(2760) (SQLExecDirectW)'))

未在Django中指定任何架构,且数据库中存在dbo架构,可通过Python脚本正常查询或创建dbo下的表:

SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA = 'dbo'

-- 或创建表
CREATE TABLE dbo.Example_test (
ID INT PRIMARY KEY,
Name VARCHAR(50),
Age INT
)

尝试在Django配置中指定dbo架构后,出现登录超时错误:

django.db.utils.OperationalError: ('HYT00', '[HYT00] [Microsoft][ODBC Driver 17 for SQL Server]登录超时过期(0) (SQLDriverConnect)')

配置内容如下:

DATABASES = {
    'default': {
        'ENGINE': 'mssql',
        'NAME': NAME,  # Initial Catalogue
        'USER': USER,  # Azure Client Id
        'PASSWORD': PASSWORD,  # Secret Key
        'HOST': HOST,  # Data Source
        'PORT': '1433',
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',
            'extra_params': 'Authentication=ActiveDirectoryServicePrincipal',
            'options': '-c search_path=dbo'
        },
    }
}

解决方案

1. 修正Django数据库配置,正确指定默认架构

-c search_path=dbo是PostgreSQL专属参数,SQL Server ODBC驱动无法识别,这是导致登录超时的直接原因。需改用SQL Server支持的方式指定默认架构:

方式一:在连接参数中添加DefaultSchema=dbo

DATABASES = {
    'default': {
        'ENGINE': 'mssql',
        'NAME': NAME,
        'USER': USER,
        'PASSWORD': PASSWORD,
        'HOST': HOST,
        'PORT': '1433',
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',
            'extra_params': 'Authentication=ActiveDirectoryServicePrincipal;DefaultSchema=dbo',
        },
    }
}

方式二:通过django-mssql-backend的default_schema参数指定

DATABASES = {
    'default': {
        'ENGINE': 'mssql',
        'NAME': NAME,
        'USER': USER,
        'PASSWORD': PASSWORD,
        'HOST': HOST,
        'PORT': '1433',
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',
            'extra_params': 'Authentication=ActiveDirectoryServicePrincipal',
            'default_schema': 'dbo'
        },
    }
}

2. 确保Azure AD服务主体拥有dbo架构权限

错误中出现的长GUID是你的Azure AD服务主体ID,SQL Server默认会将这个ID作为服务主体的默认架构名称,但该架构未创建。需给服务主体授予dbo架构的权限:

登录Azure SQL DB,执行以下SQL:

ALTER AUTHORIZATION ON SCHEMA::dbo TO [b96c7a94-5645-4f7d-ab79-b42d99373823];
GO
GRANT CONTROL ON SCHEMA::dbo TO [b96c7a94-5645-4f7d-ab79-b42d99373823];
GO

问题根源说明

  • 架构不存在错误:使用ActiveDirectoryServicePrincipal认证时,SQL Server会将服务主体的ID作为默认架构名称,而该架构未创建,导致创建迁移表失败。
  • 登录超时错误:添加了SQL Server不支持的PostgreSQL参数-c search_path=dbo,导致连接字符串格式错误,触发登录超时。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 13:17:51