[使用MFA Active Directory交互式身份验证连接到Python中的Azure SQL,而不使用Microsoft.IdentityModel.Clients.ActiveDirectory dll

问题描述 投票:0回答:1

[使用MFA连接到Azure SQL数据库(在SSMS中为“ Active Directory-通用”),Microsoft建议,并且目前只有关于使用Microsoft.IdentityModel.Clients.ActiveDirectory与C#连接的教程

在Python或Powershell中的常规ODBC连接字符串中设置Authentication='Active Directory Interactive';会导致错误

Cannot find an authentication provider for 'ActiveDirectoryInteractive'

这似乎是因为,根据Microsoft在https://docs.microsoft.com/en-us/azure/sql-database/active-directory-interactive-connect-azure-sql-db处的示例代码,您在创建连接时需要显式创建自己的身份验证提供程序类:


        public static void Main(string[] args)
        {
            var provider = new ActiveDirectoryAuthProvider();

            SC.SqlAuthenticationProvider.SetProvider(
                SC.SqlAuthenticationMethod.ActiveDirectoryInteractive,
                //SC.SqlAuthenticationMethod.ActiveDirectoryIntegrated,  // Alternatives.
                //SC.SqlAuthenticationMethod.ActiveDirectoryPassword,
                provider);

            Program.Connection();
        }

我想与pyodbc连接,所以我不能实现ActiveDirectoryInteractive提供程序。

是否有任何方法可以使用OAuth通常获取令牌并在连接字符串中使用令牌,或者以其他方式实现ActiveDirectoryInteractive提供程序而不使用.NET?

azure odbc azure-sql-database pyodbc mfa
1个回答
0
投票
ODBC driver支持MFA身份验证,但仅Windows:enter image description here

我在Python pyodbc中测试过,它也可以工作。

这是我的pyodbc代码,它们通过AAD MFA身份验证连接到我的Azure SQL数据库:

import pyodbc server = '***.database.windows.net' database = 'Mydatabase' username ='****@****.com' password = 'psd' Authentication='ActiveDirectoryInteractive' driver= '{ODBC Driver 17 for SQL Server}' conn = pyodbc.connect('DRIVER='+driver+ ';SERVER='+server+ ';PORT=1433;DATABASE='+database+ ';UID='+username+ ';PSD='+ password+ ';AUTHENTICATION='+Authentication ) print(conn)

在我的Windows环境中效果很好。enter image description here

希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.