[使用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?
我在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环境中效果很好。希望这会有所帮助。