Поддержка аутентификации на основе токенов для Azure SQL DB с использованием Azure AD auth - PullRequest
0 голосов
/ 09 апреля 2020

Согласно этой странице.

https://docs.microsoft.com/en-us/archive/blogs/sqlsecurity/token-based-authentication-support-for-azure-sql-db-using-azure-ad-auth

AAD Проверка подлинности на основе токенов для доступа к Azure SQL БД поддерживается только в том случае, если клиент находится под windows среда.

Может ли MacOS и Linux поддерживать аутентификацию на основе токенов AAD для доступа к Azure SQL БД?

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

    token = context.acquire_token_with_client_credentials(
        database_url,
        azure_client_id,
        azure_client_secret
    )
    print(token)

    tokenb = bytes(token["accessToken"], "UTF-8")
    exptoken = b''
    for i in tokenb:
        exptoken += bytes({i})
        exptoken += bytes(1)
    tokenstruct = struct.pack("=i", len(exptoken)) + exptoken
    tokenstruct

    SQL_COPT_SS_ACCESS_TOKEN = 1256
    CONNSTRING = "DRIVER={};SERVER={};DATABASE={}".format("ODBC Driver 17 for SQL Server", prod_server, prod_db)

    db_connector = pyodbc.connect(CONNSTRING, attrs_before={SQL_COPT_SS_ACCESS_TOKEN: tokenstruct})

Это код, который я запускаю под MacOS, и он python.

Я продолжаю получать эту проблему

pyodbc.InterfaceError: ('28000', "[28000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Login failed for user ''. (18456) (SQLDriverConnect)")

У кого-нибудь есть идея?

1 Ответ

0 голосов
/ 09 апреля 2020

Похоже, вы не добавили своего участника службы приложений в базу данных Azure SQL.

Что вам нужно сделать, это:

1. Включите аутентификацию AAD для вашего Azure SQL Сервера. Пожалуйста, выберите пользователя AAD на этом этапе.

enter image description here

2. Подключитесь к вашей Azure SQL базе данных с учетной записью пользователя, которую вы указали в шаге 1.

3. Добавьте участника службы приложений на свой сервер SQL и сообщите ему соответствующую роль.

CREATE USER [Azure_AD_principal_name] FROM EXTERNAL PROVIDER;
EXEC sp_addrolemember 'db_owner', 'Azure_AD_principal_name';

Здесь Azure_AD_principal_name должно быть именем приложения.

4. Подключитесь к вашей Azure SQL базе данных с AAD

enter image description here

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