You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过Python使用Azure AD通用MFA认证连接SQL Server?

如何用Python通过Azure AD Universal with MFA认证连接SQL Server?

当然可以实现!我之前也碰到过一模一样的需求,用pyodbc就能完美解决——它支持Azure AD的交互式MFA认证,和你在Azure Data Studio里用的“Azure Active Directory - Universal with MFA support”是完全对应的。下面是具体的步骤和代码示例:

步骤1:准备依赖

首先确保安装了pyodbc,以及最新版的ODBC驱动(推荐ODBC Driver 18 for SQL Server,低版本可能不支持MFA认证):

pip install pyodbc

如果是Windows系统,Azure Data Studio通常已经自带了兼容的ODBC驱动,不用额外安装;如果是Linux/macOS,需要手动下载对应系统的驱动包。

步骤2:编写连接代码

核心是在连接字符串里指定Authentication=ActiveDirectoryInteractive,这个参数就是对应MFA通用认证的逻辑。直接把你Azure Data Studio里的凭据填进去就行:

import pyodbc

# 替换成你自己的服务器和账户信息
server = "***.net"
database = "target"
username = "***.***@mycompany.com"

# 构建连接字符串
conn_str = (
    f"DRIVER={{ODBC Driver 18 for SQL Server}};"
    f"SERVER={server};"
    f"DATABASE={database};"
    f"UID={username};"
    "Authentication=ActiveDirectoryInteractive;"
    "Encrypt=yes;"
)

# 建立连接——这里会自动弹出MFA验证窗口(比如Microsoft Authenticator弹窗、手机验证码)
try:
    conn = pyodbc.connect(conn_str)
    print("连接成功!")
    
    # 测试执行查询,替换成你的测试表
    cursor = conn.cursor()
    cursor.execute("SELECT TOP 5 * FROM your_table_name;")
    for row in cursor:
        print(row)
        
finally:
    if conn:
        conn.close()

用SQLAlchemy的进阶方案

如果你习惯用SQLAlchemy来操作数据库,可以基于上面的连接字符串构建引擎:

from sqlalchemy import create_engine

# 转义连接字符串里的特殊字符,避免URL解析报错
encoded_conn_str = conn_str.replace(";", "%3B").replace("=", "%3D")
engine_url = f"mssql+pyodbc:///?odbc_connect={encoded_conn_str}"

engine = create_engine(engine_url)

# 测试连接
with engine.connect() as conn:
    result = conn.execute("SELECT @@VERSION;")
    print("SQL Server版本:", result.fetchone()[0])

一些实用提醒

  • 这个方法是交互式认证,必须在有图形界面的环境下运行(比如本地电脑),因为会弹出MFA验证窗口;如果是无界面的服务器环境,可能需要改用服务主体或托管身份认证,那是另一种场景了。
  • 不要把账户信息硬编码在代码里,建议用环境变量或者Azure Key Vault来存储敏感信息,比如:
    import os
    username = os.getenv("AZURE_AD_USERNAME")
    server = os.getenv("SQL_SERVER_ADDRESS")
    

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

火山引擎 最新活动