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

如何使用aioodbc库传递AAD AccessToken认证Azure SQL Server?

如何使用aioodbc库传递AAD AccessToken认证Azure SQL Server?

嘿,刚好我了解过这个情况,其实aioodbc作为pyodbc的异步封装,是支持传递Azure AD AccessToken来认证Azure SQL Server的,下面给你具体的实现方法和注意事项:

核心原理

aioodbc底层依赖pyodbc实现数据库连接,所以pyodbc支持的AccessToken认证方式,aioodbc同样可以复用,主要有两种常见的实现方式:


方式一:直接在连接字符串中指定AccessToken

这种方式比较直观,直接把AccessToken作为连接字符串的一部分:

import aioodbc

async def connect_to_azure_sql():
    # 替换成你实际获取到的有效AccessToken
    access_token = "your-valid-aad-access-token"
    # 构建连接字符串
    conn_str = (
        "DRIVER={ODBC Driver 18 for SQL Server};"
        "SERVER=your-sql-server-name.database.windows.net;"
        "DATABASE=your-database-name;"
        "AccessToken={};".format(access_token)
    )
    # 建立异步连接
    conn = await aioodbc.connect(dsn=conn_str)
    
    # 示例:执行简单查询
    cursor = await conn.cursor()
    await cursor.execute("SELECT TOP 1 * FROM your-table-name")
    result = await cursor.fetchone()
    print("查询结果:", result)
    
    # 关闭资源
    await cursor.close()
    await conn.close()

方式二:通过attrs_before参数传递AccessToken

这种方式利用pyodbc的连接属性常量来传递,需要注意将token转换为指定编码的字节:

import aioodbc
from pyodbc import SQL_COPT_SS_ACCESS_TOKEN

async def connect_with_attrs():
    access_token = "your-valid-aad-access-token"
    # 必须将token转换为UTF-16LE编码的字节
    token_bytes = access_token.encode("utf-16-le")
    
    conn = await aioodbc.connect(
        driver="{ODBC Driver 18 for SQL Server}",
        server="your-sql-server-name.database.windows.net",
        database="your-database-name",
        attrs_before={SQL_COPT_SS_ACCESS_TOKEN: token_bytes}
    )
    
    # 后续操作同上,执行查询、关闭资源
    cursor = await conn.cursor()
    await cursor.execute("SELECT 1")
    result = await cursor.fetchone()
    print(result)
    
    await cursor.close()
    await conn.close()

关键注意事项

  • 确保使用ODBC Driver 17或18版本:旧版本的ODBC驱动不支持Azure AD AccessToken认证方式
  • AccessToken需要具备对应权限:你的AAD令牌必须拥有目标Azure SQL数据库的访问权限(比如被分配db_datareader、db_owner等角色)
  • 使用attrs_before时的编码要求:必须将字符串形式的token编码为utf-16-le格式的字节,这是pyodbc规定的格式

备注:内容来源于stack exchange,提问作者Shankar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 09:19:51