GOOGLE ADS

среда, 4 мая 2022 г.

Django подключает SQL Server, используя пользователя активного каталога

Я использую бэкэнд Django и mssql-django для подключения к SQL Server. Нет проблем с подключением к SQL Server при использовании входа в систему sql. Но когда я пытаюсь подключиться с помощью пользователя AD, я получаю исключение:

django.db.utils.InterfaceError:
('28000', "[28000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]
Login failed for user 'DOMAIN\\myuser'. (18456) (SQLDriverConnect);
[28000] [Microsoft][ODBC Driver 17 for SQL Server]Invalid connection string attribute (0);
[28000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Login failed for user 'DOMAIN\\myuser'. (18456);
[28000] [Microsoft][ODBC Driver 17 for SQL Server]Invalid connection string attribute (0)")

Мои настройки базы данных в settings.py:

DATABASES = {
'default': {
'ENGINE': 'mssql',
'NAME': os.environ.get('DB_NAME', 'djangodb'),
'USER': os.environ.get('USER', 'DOMAIN\myuser'),
'PASSWORD': os.environ.get('USER_PASS', 'mypass'),
'HOST': os.environ.get('HOST', 'server.blabla.net'),
'PORT': '',
'OPTIONS': {
'driver': 'ODBC Driver 17 for SQL Server',
},
},
}

Что я делаю неправильно?


Решение проблемы

Пользователи Active Directory (AD) не могут быть указаны как USERв строке подключения при попытке пройти аутентификацию с использованием проверки подлинности Windows (доверенное соединение/встроенная безопасность [SSPI])

Можно пройти аутентификацию с помощью этого метода, но вам потребуется использовать Kerberos для аутентификации в AD, чтобы получить соответствующие учетные данные, которые драйвер может использовать для аутентификации.

В параметрах Django DATABASES укажите, обратите внимание, что этот Encrypt=yesпараметр может не быть необходимым для вашего экземпляра, но при использовании драйвера 18 я считаю его необходимым, особенно при использовании незашифрованного соединения.

"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
"extra_params": "Encrypt=yes;Trusted_Connection=yes",
},

Развертывание приложения драйвера ODBC для Linux или macOS, предназначенного для работы как службы


Развертывание приложения с драйвером ODBC для Linux или macOS, предназначенного для работы в качестве службы Системный администратор может развернуть приложение для работы в качестве службы, использующей проверку подлинности Kerberos для подключения к SQL Server.

Сначала необходимо настроить Kerberos на клиенте, а затем убедиться, что приложение может использовать учетные данные Kerberos принципала по умолчанию.

Убедитесь, что вы используете kinit или PAM (подключаемый модуль аутентификации) для получения и кэширования TGT для принципала, используемого соединением, одним из следующих способов:

Run kinit, passing in a principal name and password.

Run kinit, passing in a principal name and a location of a keytab file that contains the principal's key created by ktutil.

Ensure that the login to the system was done using the Kerberos PAM (Pluggable Authentication Module).

When an application runs as a service, because Kerberos credentials expire by design, renew the credentials to ensure continued service availability. The ODBC driver does not renew credentials itself; ensure that there is a cron job or script that periodically runs to renew the credentials before their expiration. To avoid requiring the password for each renewal, you can use a keytab file.


Также будет интересно посмотреть исходный код в mssql-django, который даст больше информации о том, какие параметры выбираются при подключении к экземпляру SQL Server. mssql-джанго: base.py

Проверьте этот связанный вопрос SO: Строка подключения с использованием проверки подлинности Windows

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...