gpt4 book ai didi

azure - pyodbc 将支持使用 AD 访问 token 而不是用户/密码连接到 Azure SQL DB?

转载 作者:行者123 更新时间:2023-12-05 01:37:25 29 4
gpt4 key购买 nike

目前,我使用设备代码凭据来访问 Azure AD。

device_code_credential = DeviceCodeCredential(
azure_client_id,
tenant_id=azure_tenant_id,
authority=azure_authority_uri)

但我仍然需要使用 Azure 帐户用户名/密码来连接到 Azure SQL 服务器

driver = 'ODBC Driver 17 for SQL Server'
db_connection_string = f'DRIVER={driver};SERVER={server};' \
f'DATABASE={database};UID={user_name};PWD={password};'\
f'Authentication=ActiveDirectoryPassword;'\
'Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;'
connector = pyodbc.connect(db_connection_string)

linux/MacOS 下的 python 有什么方法可以让我使用 device_code_credential 和 access_token 连接到 Azure SQL 服务器吗?

https://github.com/mkleehammer/pyodbc/issues/228

我只得到了这个链接,但它似乎不起作用。

有人有完整的工作示例吗?

最佳答案

您可以引用这个教程:AzureAD/azure-activedirectory-library-for-python: Connect to Azure SQL Database .

可以通过 ADAL Python 从 Azure Active Directory (AAD) 获取 token 来连接到 Azure SQL 数据库。我们目前没有维护它的完整示例,但本文概述了一些关键要素。

  1. 您按照Connecting using Access Token的指示进行操作到提供您的应用程序。还有另一篇类似的博文here .
  2. 您的 SQL 管理员需要添加应用程序注册权限您尝试访问的特定数据库。详情请参阅这篇博文Token-based authentication support for Azure SQL DBusing Azure AD auth作者:Mirek H Sztajno。
  3. 两份文件都没有特别强调这一点上面,但您需要使用 https://database.windows.net/ 作为资源字符串。请注意,您需要保留尾部斜杠,否则发行的代币将无法工作。
  4. 将上述配置输入 ADAL Python 的 Client Credentialssample .
  5. 获得访问 token 后,请使用它 in this way in pyodbc到 连接到 SQL 数据库。

这适用于 AAD 访问 token 。在 Python 2.x 中扩展 token 并添加长度的示例代码,如上面链接的页面中所述:

token = "eyJ0eXAiOi...";
exptoken = "";
for i in token:
exptoken += i;
exptoken += chr(0);
tokenstruct = struct.pack("=i", len(exptoken)) + exptoken;
conn = pyodbc.connect(connstr, attrs_before = { 1256:bytearray(tokenstruct) });

由于烦人的字符/字节分割,3.x 只是稍微复杂一些:

token = b"eyJ0eXAiOi...";
exptoken = b"";
for i in token:
exptoken += bytes({i});
exptoken += bytes(1);
tokenstruct = struct.pack("=i", len(exptoken)) + exptoken;
conn = pyodbc.connect(connstr, attrs_before = { 1256:tokenstruct });

(SQL_COPT_SS_ACCESS_TOKEN 为 1256;它特定于 msodbcsql 驱动程序,因此 pyodbc 没有定义它,而且很可能也不会。)

希望这有帮助。

关于azure - pyodbc 将支持使用 AD 访问 token 而不是用户/密码连接到 Azure SQL DB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61069715/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com