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

能否在Ubuntu上通过Azure AD结合SQLAlchemy连接Azure SQL数据库?

回答:Ubuntu上通过Azure AD连接Azure SQL + SQLAlchemy的解决方案

先直接回应你的两个核心问题:

  • 完全可以在Ubuntu系统上借助Azure AD连接Azure SQL数据库
  • trusted_connection=True这个参数在Linux环境下不适用——它是Windows集成认证(SSPI)的专用参数,Ubuntu没有对应的底层机制,得用Azure AD专属的认证方式,比如你提到的托管标识。

下面详细讲基于托管标识的具体实现步骤:

前提准备

  • 确保你的Ubuntu VM已经启用了系统分配的托管标识
  • 给这个托管标识授予Azure SQL数据库的访问权限:可以在Azure SQL的IAM面板中添加SQL DB Contributor角色,或者直接在数据库内创建对应用户并赋权(示例SQL语句:CREATE USER [你的VM托管标识名称] FROM EXTERNAL PROVIDER; GRANT SELECT ON SCHEMA::dbo TO [你的VM托管标识名称];)
  • 安装必要的依赖工具和Python包:
    sudo apt-get install unixodbc-dev
    pip install sqlalchemy pyodbc azure-identity
    

代码实现(基于托管标识获取认证令牌)

你需要通过Azure Identity库获取Azure SQL专属的访问令牌,再用这个令牌作为凭证完成数据库连接:

import sqlalchemy
from azure.identity import ManagedIdentityCredential
import pyodbc

# 1. 获取Azure AD访问令牌(目标资源为Azure SQL服务)
credential = ManagedIdentityCredential()
token = credential.get_token("https://database.windows.net/.default")

# 2. 构造ODBC连接字符串
server = "你的服务器名称.database.windows.net"
database = "你的数据库名称"
conn_str = f"""
DRIVER={{ODBC Driver 18 for SQL Server}};
SERVER={server};
DATABASE={database};
UID=任意字符串;  # Azure AD令牌认证时UID可以填任意值
PWD={token.token};
Authentication=ActiveDirectoryPassword;
Encrypt=yes;
TrustServerCertificate=no;
"""

# 3. 用SQLAlchemy创建数据库引擎
engine = sqlalchemy.create_engine(f"mssql+pyodbc:///?odbc_connect={conn_str}")

# 测试连接是否正常
with engine.connect() as conn:
    result = conn.execute(sqlalchemy.text("SELECT @@VERSION"))
    print(result.fetchone())

关键说明

  • 关于trusted_connection:这个参数依赖Windows的安全支持提供程序接口(SSPI),Linux系统没有该组件,因此无法生效,必须替换为Azure AD的认证逻辑。
  • 托管标识的优势在于不需要硬编码任何密码或密钥,令牌会自动轮换,安全性更高。
  • 请确保安装的ODBC驱动是17版本及以上,旧版本可能不支持Azure AD认证功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:12:32