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

pyodbc将支持使用AD访问令牌而不是用户/密码连接到Azure SQL DB?,azure,azure-active-directory,azure-sql-database,Azure,Azure Active Directory,Azure Sql Database,目前,我使用设备代码凭据来访问Azure AD device_code_credential = DeviceCodeCredential( azure_client_id, tenant_id=azure_tenant_id, authority=azure_authority_uri) 但我仍然需要使用Azure帐户用户名/密码连接到Azure SQL server driver = 'ODBC Driver 17 for SQL Serve

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

device_code_credential = DeviceCodeCredential(
        azure_client_id,
        tenant_id=azure_tenant_id,
        authority=azure_authority_uri)
但我仍然需要使用Azure帐户用户名/密码连接到Azure SQL server

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中是否有任何方式允许我使用设备\u代码\u凭据和访问\u令牌来连接Azure SQL server

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


任何人都有完整的工作示例吗?

您可以参考本教程:

通过ADAL Python从Azure Active Directory AAD获取令牌,可以连接到Azure SQL数据库。我们目前没有完整的样本,但本文概述了一些关键成分

你要按照老师的指示去做 提供您的应用程序。还有一篇类似的博文。 您的SQL管理员需要将应用注册权限添加到 您试图访问的特定数据库。请参阅中的详细信息 这篇博文由米雷克·什塔伊诺撰写。 这两份文件都没有特别强调 上面,但您需要使用https://database.windows.net/ 作为 资源字符串。请注意,您需要保留尾部斜杠, 否则,颁发的令牌将不起作用。 将上面的配置输入ADAL Python。 获得访问令牌后,使用它来 连接到SQL数据库。 这适用于AAD访问令牌。在Python2.x中,如上面链接的页面所述,展开标记并预加长度的示例代码:

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_令牌为1256;它是特定于msodbcsql驱动程序的,因此pyodbc没有定义它,而且很可能不会


希望这有帮助。

您可以参考本教程:

通过ADAL Python从Azure Active Directory AAD获取令牌,可以连接到Azure SQL数据库。我们目前没有完整的样本,但本文概述了一些关键成分

你要按照老师的指示去做 提供您的应用程序。还有一篇类似的博文。 您的SQL管理员需要将应用注册权限添加到 您试图访问的特定数据库。请参阅中的详细信息 这篇博文由米雷克·什塔伊诺撰写。 这两份文件都没有特别强调 上面,但您需要使用https://database.windows.net/ 作为 资源字符串。请注意,您需要保留尾部斜杠, 否则,颁发的令牌将不起作用。 将上面的配置输入ADAL Python。 获得访问令牌后,使用它来 连接到SQL数据库。 这适用于AAD访问令牌。在Python2.x中,如上面链接的页面所述,展开标记并预加长度的示例代码:

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_令牌为1256;它是特定于msodbcsql驱动程序的,因此pyodbc没有定义它,而且很可能不会


希望这有帮助。

您可以通过

从azure.identity导入设备代码凭据 建议在租户中分配新的ClientID。 AZURE客户端ID=04b07795-8ddb-461a-bbee-02f9e1bf7b46 凭证=DeviceCodeCredentialclient\u id=AZURE\u CLI\u客户端\u id databaseToken=凭证。获取\u令牌'https://database.windows.net/.default'
然后使用databaseToken.token作为AAD访问令牌,如Leon Yue的回答所述。

您可以通过

从azure.identity导入设备代码凭据 建议在租户中分配新的ClientID。 AZURE客户端ID=04b07795-8ddb-461a-bbee-02f9e1bf7b46 凭证=DeviceCodeCredentialclient\u id=AZURE\u CLI\u客户端\u id databaseToken=凭证。获取\u令牌'https://database.windows.net/.default'
然后使用databaseToken.token作为AAD访问令牌,如Leon Yue的回答所述。

如果我选择使用clientID和client secret进行身份验证,如何实现RBAC?由于任何获得clientID/Secret的用户都可以访问数据库。请回答这个问题。这是一个悬赏问题。@Shakthifuture我明白了。但我不熟悉Django框架。这个答案对您有帮助吗?如果我选择使用clientID和client secret进行身份验证,如何实现RBAC?由于任何获得clientID/Secret的用户都可以访问数据库。请回答这个问题。这是一个悬赏问题。@Shakthifuture我明白了。但我不熟悉Django框架。这个答案对你有帮助吗?