我们有一个 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”。有人知道解决每次验证的方法吗?
db_datareader
、
db_datawriter
、
db_ddladmin
。
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