pyodb c будет поддерживать подключение к базе данных Azure SQL с использованием токена доступа AD вместо имени пользователя / пароля? - PullRequest
0 голосов
/ 07 апреля 2020

В настоящее время я использую учетные данные кода устройства, чтобы получить доступ к Azure AD.

device_code_credential = DeviceCodeCredential(
        azure_client_id,
        tenant_id=azure_tenant_id,
        authority=azure_authority_uri)

Но мне все еще нужно использовать Azure имя пользователя / пароль учетной записи для подключения к Azure SQL server

driver = 'ODBC Driver 17 for SQL Server'
db_connection_string = f'DRIVER={driver};SERVER={server};' \
    f'DATABASE={database};UID={user_name};PWD={password};'\
    f'Authentication=ActiveDirectoryPassword;'\
    'Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;'
connector = pyodbc.connect(db_connection_string)

Можно ли каким-либо образом в python под linux / MacOS разрешить мне использовать device_code_credential и access_token для подключения к Azure SQL серверу?

https://github.com/mkleehammer/pyodbc/issues/228

Я получил только эту ссылку, и она не работает.

У кого-нибудь есть полностью работающий образец?

1 Ответ

1 голос
/ 07 апреля 2020

Вы можете сослаться на это руководство: AzureAD / azure -activedirectory-library-for- python: подключение к Azure SQL базе данных .

Это выполнимо подключиться к Azure SQL базе данных путем получения токена из Azure Active Directory (AAD) через ADAL Python. В настоящее время мы не располагаем полным образцом для него, но в этом эссе описаны некоторые ключевые ингредиенты.

  1. Вы следуете инструкции Подключение с использованием токена доступа для подготовки вашего приложения. Есть еще одно подобное сообщение в блоге здесь .
  2. Ваш администратор SQL должен добавить разрешения для регистрации приложения в указанную c базу данных, к которой вы пытаетесь получить доступ. Подробнее см. В этом сообщении в блоге Поддержка аутентификации на основе токенов для Azure SQL БД с использованием Azure AD auth от Mirek H Sztajno.
  3. Это не особо выделено ни в одном из документы выше, но вам нужно использовать https://database.windows.net/ в качестве строки ресурса. Обратите внимание, что вам нужно сохранить конечный параметр sla sh, в противном случае выданный токен не будет работать.
  4. Передайте приведенную выше конфигурацию в ADAL Python Образец клиентских учетных данных .
  5. Как только вы получите токен доступа, используйте его таким образом в 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 не определил его и, скорее всего, не определит.)

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

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