使用托管标识对 Azure 应用服务进行 SQL 数据库身份验证

Ben*_*Ben 2 python azure-sql-database azure-web-app-service

我正在尝试将 Azure 应用服务 Web 应用中运行的 Python Flask 应用连接到 Azure SQL 数据库。当我使用带有用户名和密码的 SQL 身份验证时,效果很好。

现在我想转而使用 Web Apps 托管身份。我已激活系统分配的托管标识,在 SQL 中为其创建用户并将其添加到 db_datareader 角色。

我使用这样的连接字符串与 SqlAlchemy 连接

params = urllib.parse.quote_plus(os.environ['SQL_CONNECTION_STRING'])
conn_str = 'mssql+pyodbc:///?odbc_connect={}'.format(params)
engine_azure = db.create_engine(conn_str,echo=True)
Run Code Online (Sandbox Code Playgroud)

连接字符串存储为应用程序设置,其值为

"Driver={ODBC Driver 17 for SQL Server};Server=tcp:<server>.database.windows.net,1433;Database=<database>;Authentication=ActiveDirectoryMsi;"
Run Code Online (Sandbox Code Playgroud)

我希望这就是我需要做的全部,但现在我的应用程序没有启动。日志报告连接数据库时超时。

我怎样才能解决这个问题?

Har*_*edi 6

我知道这是一篇相当老的文章,但它可能会帮助像我这样正在寻找解决方案的人。

您可以通过将“Authentication”参数添加为“ActiveDirectoryMsi”来修改连接字符串,无需使用端点和标头。

(与 Azure SQL 配合使用,对于 Postgress 等其他数据库,您可能需要使用结构令牌)

import pyodbc


pyodbc.connect(
        "Driver="
        + driver
        + ";Server="
        + server
        + ";PORT=1433;Database="
        + database
        + ";Authentication=ActiveDirectoryMsi")
Run Code Online (Sandbox Code Playgroud)

我为那些对 Azure MSI 感兴趣的人写了一篇快速文章: https://hedihargam.medium.com/python-sql-database-access-with-management-identity-from-azure-web-app-functions-14566e5a0f1a