Как я знаю, все ваши потребности в официальном документе Using Azure Active Directory with the ODBC Driver
.
Во-первых, только версия 17 драйвера odbc для MS SQL Server поддерживает встроенную проверку подлинности Active Directory, если вы хотите подключиться к базе данных SQL Azure с помощью pyodbc
. Поэтому, пожалуйста, убедитесь, что вы установили последний драйвер odbc для SQL Server, или вы можете скачать с https://docs.microsoft.com/en-us/sql/connect/odbc/microsoft-odbc-driver-for-sql-server?view=sql-server-2017.
Во-вторых, следуйте указаниям UI Additions for Azure Active Directory (Windows driver only)
, чтобы настроить DSN для встроенной аутентификации Azure Active Directory в SQL Azure.
Затем вы можете следовать приведенному ниже коду для подключения к SQL Azure с помощью SQL Alchemy
с pyodbc
.
from urllib import parse
from sqlalchemy import create_engine
connecting_string = 'Driver={ODBC Driver 17 for SQL Server};Server=tcp:<your sql azure server name>.database.windows.net,1433;Database=<your database name>;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;Authentication=ActiveDirectoryIntegrated'
params = parse.quote_plus(connecting_string)
engine = create_engine("mssql+pyodbc:///?odbc_connect=%s" % params)
connection = engine.connect()
result = connection.execute("select 1+1 as res")
for row in result:
print("res:", row['res'])
connection.close()
Примечание. Значение строки подключения, приведенное выше, можно скопировать на вкладке `` на портале Azure, но, пожалуйста, обратите внимание на изменение версии драйвера odbc и удаление параметров UID
и PWD
.
Для подключения с использованием Windows Integrated или Active Directory Integrated
(Только для драйвера Windows) аутентификация, укажите
Аутентификация = ActiveDirectoryIntegrated в строке подключения.
Водитель автоматически выберет правильный режим аутентификации. UID
и PWD указывать не нужно.
Или вы можете использовать Authentication=ActiveDirectoryPassword
, что будет проще, чем Authentication=ActiveDirectoryIntegrated
и код, приведенный ниже.
from urllib import parse
from sqlalchemy import create_engine
your_user_name = '<your AAD user or configured in SQL Azure Server as the figure below>'
your_password_here = '<your AAD account password>'
#connecting_string = 'Driver={ODBC Driver 17 for SQL Server};Server=tcp:sqlserverleon.database.windows.net,1433;Database=dbleon;Uid='+your_user_name+';Pwd='+your_password_here+';Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;Authentication=ActiveDirectoryPassword'
connecting_string = 'Driver={ODBC Driver 17 for SQL Server};Server=tcp:sqlserverleon.database.windows.net,1433;Database=dbleon;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;Authentication=ActiveDirectoryIntegrated'
params = parse.quote_plus(connecting_string)
engine = create_engine("mssql+pyodbc:///?odbc_connect=%s" % params)
connection = engine.connect()
result = connection.execute("select 1+1 as res")
for row in result:
print("res:", row['res'])
connection.close()
Надеюсь, это поможет.