Вы можете сослаться на это руководство: AzureAD / azure -activedirectory-library-for- python: подключение к Azure SQL базе данных .
Это выполнимо подключиться к Azure SQL базе данных путем получения токена из Azure Active Directory (AAD) через ADAL Python. В настоящее время мы не располагаем полным образцом для него, но в этом эссе описаны некоторые ключевые ингредиенты.
- Вы следуете инструкции Подключение с использованием токена доступа для подготовки вашего приложения. Есть еще одно подобное сообщение в блоге здесь .
- Ваш администратор SQL должен добавить разрешения для регистрации приложения в указанную c базу данных, к которой вы пытаетесь получить доступ. Подробнее см. В этом сообщении в блоге Поддержка аутентификации на основе токенов для Azure SQL БД с использованием Azure AD auth от Mirek H Sztajno.
- Это не особо выделено ни в одном из документы выше, но вам нужно использовать
https://database.windows.net/
в качестве строки ресурса. Обратите внимание, что вам нужно сохранить конечный параметр sla sh, в противном случае выданный токен не будет работать. - Передайте приведенную выше конфигурацию в ADAL Python Образец клиентских учетных данных .
- Как только вы получите токен доступа, используйте его таким образом в pyodb c для подключения к SQL базе данных.
Это работает с токенами доступа AAD , Пример кода для расширения токена и добавления длины, как описано на странице, указанной выше, в Python 2.x:
token = "eyJ0eXAiOi...";
exptoken = "";
for i in token:
exptoken += i;
exptoken += chr(0);
tokenstruct = struct.pack("=i", len(exptoken)) + exptoken;
conn = pyodbc.connect(connstr, attrs_before = { 1256:bytearray(tokenstruct) });
3.x только немного более сложен из-за раздражающего разделения символов и байтов :
token = b"eyJ0eXAiOi...";
exptoken = b"";
for i in token:
exptoken += bytes({i});
exptoken += bytes(1);
tokenstruct = struct.pack("=i", len(exptoken)) + exptoken;
conn = pyodbc.connect(connstr, attrs_before = { 1256:tokenstruct });
(SQL_COPT_SS_ACCESS_TOKEN равен 1256; он определяет c для драйвера msodb csql, поэтому pyodb c не определил его и, скорее всего, не определит.)
Надеюсь, это поможет.