使用 Entra ID 连接到 Azure SQL 数据库且无需从 Python 应用程序获取密码

问题描述 投票:0回答:1
我希望你能帮助我,因为我已经为这个问题苦苦挣扎了好几天。

我们有一个 Azure DB,我们在其中存储数据,并通过它我们有一些在 python 中运行的模型与其交互。问题是,每次我需要运行笔记本或脚本时,我都需要与此类数据库建立连接(其中凭据与我正在使用的计算机上的 Microsoft 用户帐户相同),并且由于设置了数据库配备 Microsoft Entra ID 和所有“最先进”的安全措施,它始终提示我需要插入密码才能访问的页面。

这也扰乱了我的所有工作流程,因为很多时候页面不会弹出并保留在后台。

我一直在尝试寻找替代解决方案,并允许 Azure 和我的 python 应用程序进行通信,而不必每次都插入密码。

我尝试重现此类内容:

https://learn.microsoft.com/en-us/azure/databricks/dev-tools/app-aad-token#--get-microsoft-entra-id-tokens -by-using-the-msal-python-library(我在其中放置了 Azure SQL 的 ID,而不是 databricks)。

我的想法是创建一个链接到 Azure SQL 应用程序和我的 Microsoft 帐户的托管身份。使用上面的代码(或类似的代码)创建一个令牌,然后该令牌能够连接到数据库而无需任何密码提示。但是,这似乎不起作用“消息:AADSTS650057”或 “消息:AADSTS100040”。

有人知道解决每次验证的方法吗?

sql-server azure azure-active-directory access-token azure-database-mysql
1个回答
0
投票
  • 配置 Azure SQL 数据库
      确保将 Microsoft Entra 管理员分配给您的 Azure SQL 数据库。
  • 配置您的环境
      在 Azure SQL 数据库中创建与您的 Azure 帐户相对应的用户。
    • 为用户分配角色:
    • db_datareader
      db_datawriter
      db_ddladmin
  • 更新本地连接配置
      使用 Azure Identity 库中的
    • DefaultAzureCredential
       类。
    • 修改您的连接字符串以使用无密码连接格式。
代码取自此

MS文档,它有助于迁移Python应用程序以使用与Azure SQL数据库的无密码连接

import os import pyodbc, struct from azure.identity import DefaultAzureCredential connection_string = os.environ["AZURE_SQL_CONNECTIONSTRING"] def get_all(): with get_conn() as conn: cursor = conn.cursor() cursor.execute("SELECT * FROM Persons") # Do something with the data return def get_conn(): credential = DefaultAzureCredential(exclude_interactive_browser_credential=False) token_bytes = credential.get_token("https://database.windows.net/.default").token.encode("UTF-16-LE") token_struct = struct.pack(f'<I{len(token_bytes)}s', len(token_bytes), token_bytes) SQL_COPT_SS_ACCESS_TOKEN = 1256 # This connection option is defined by microsoft in msodbcsql.h conn = pyodbc.connect(connection_string, attrs_before={SQL_COPT_SS_ACCESS_TOKEN: token_struct}) return conn
    
© www.soinside.com 2019 - 2024. All rights reserved.