如何通过托管标识将Django与Azure MS SQL Server数据库连接
用托管标识连接Azure MS SQL Server到Django
前置准备
- 确保你的Azure资源已配置托管标识(系统分配或用户分配),且该标识已被授予Azure SQL数据库的访问权限——可通过Azure Portal添加AD用户,或执行以下SQL命令分配角色:
CREATE USER [你的托管标识名称] FROM EXTERNAL PROVIDER; ALTER ROLE db_owner ADD MEMBER [你的托管标识名称]; - 已安装
pyodbc及Django官方支持的SQL Server驱动sql_server.pyodbc。
修改Django settings.py配置
移除原配置中的USER和PASSWORD字段,在OPTIONS中添加托管标识认证参数:
系统分配托管标识配置
DATABASES = { 'default': { 'ENGINE': 'sql_server.pyodbc', 'NAME': 'HPI_SI_DB', 'HOST': 'abcengine.database.windows.net', 'OPTIONS': { 'driver': 'ODBC Driver 17 for SQL Server', 'Authentication': 'ActiveDirectoryMsi' } }, 'DB2': { 'ENGINE': 'sql_server.pyodbc', 'NAME': 'HPI_SI_DB', 'HOST': 'abcdengine.database.windows.net', 'OPTIONS': { 'driver': 'ODBC Driver 17 for SQL Server', 'Authentication': 'ActiveDirectoryMsi' } } }
用户分配托管标识配置
如果使用用户分配的托管标识,需额外添加MsiClientId参数(替换为你的标识客户端ID):
DATABASES = { 'default': { 'ENGINE': 'sql_server.pyodbc', 'NAME': 'HPI_SI_DB', 'HOST': 'abcengine.database.windows.net', 'OPTIONS': { 'driver': 'ODBC Driver 17 for SQL Server', 'Authentication': 'ActiveDirectoryMsi', 'MsiClientId': '你的托管标识客户端ID' } }, 'DB2': { 'ENGINE': 'sql_server.pyodbc', 'NAME': 'HPI_SI_DB', 'HOST': 'abcdengine.database.windows.net', 'OPTIONS': { 'driver': 'ODBC Driver 17 for SQL Server', 'Authentication': 'ActiveDirectoryMsi', 'MsiClientId': '你的托管标识客户端ID' } } }
验证连接
运行以下命令测试数据库连接是否正常:
python manage.py dbshell
或执行迁移命令验证:
python manage.py migrate
内容的提问来源于stack exchange,提问作者Prakhar Gupta
相关产品推荐
相关产品推荐

