Подключитесь к Azure SQL в Python с интерактивной аутентификацией MFA Active Directory без использования dll Microsoft.IdentityModel.Clients.ActiveDirectory - PullRequest
1 голос
/ 17 октября 2019

Для подключения к базе данных SQL Azure с помощью MFA (который в SSMS называется «Active Directory - Universal»), Microsoft рекомендует и в настоящее время имеет только учебное пособие по подключению к C # с использованием Microsoft.IdentityModel.Clients.ActiveDirectory

Установка Authentication='Active Directory Interactive'; в обычной строке подключения ODBC из Python или Powershell приводит к ошибке

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?

1 Ответ

1 голос
/ 18 октября 2019

Драйвер ODBC поддерживает проверку подлинности MFA, но только для окон: enter image description here

Я протестировал Python Pyodbc, и он также работает.

Вот мой pyodbc код, который подключается к моей базе данных SQL Azure с проверкой подлинности AAD MFA:

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

print(conn)

Он хорошо работает в моей среде Windows. enter image description here

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...