С моей машины windows я могу подключиться к MS SQL моего офиса, используя вход в Active Directory, например:
def initiateDB(params):
dbString = r'DRIVER={};SERVER={};DATABASE={};UID={};PWD={};{}'.format(params['DRIVER'], params['SERVER'], params['DATABASE'], params['UID'], params['PWD'], params['OTHER'])
cnxn = pyodbc.connect(dbString, readonly=True)
cursor = cnxn.cursor()
return cnxn, cursor
(аналогичная функция работает и с SQLAlchemy, но Я нахожу pyodb c быстрее для операций чтения)
Подтверждаю, что мне не нужно подключаться к VPN или чему-то в этом роде - он работает с открытым inte rnet.
Но тот же код при запуске из моей системы Ubunbtu или при помещении в контейнер docker и развертывании в нашей среде Redhat Openshift предназначен для подключения к MS SQL. В сообщении об ошибке указано, что время запроса истекло.
Поиск привел меня к ADAL и MSAL . У них нет никаких примеров, конкретно говорящих о соединении MS SQL, и я не могу экстраполировать из других их примеров. И процесс, который они описывают, полностью касается регистрации приложения, создания токена и c, а не подключения к БД.
Единственный пример кода, который я смог найти, был здесь: https://github.com/AzureAD/azure-activedirectory-library-for-python/issues/206
В NodeJS Я обнаружил, что люди используют библиотеку knex и могут легко подключаться к MS SQL с помощью входа в Active Director:
var config = {
'server': DB_HOSTNAME,
'database': DBNAME,
'authentication': {
'type': 'azure-active-directory-password',
'options': {
'userName': DB_USERNAME,
'password': DB_PASSWORD,
}
},
requestTimeout: 300000,
'options': {
'trustServerCertificate': true,
'encrypt': true,
}
}
var knex = require('knex')({
client: 'mssql',
connection: config,
pool: {
min: 2,
max: 20
}
});
Аналогично Java также существует простой способ подключения JDB C, используя ту же строку подключения, которую я использовал в Python на windows, и он работает с docker. Но я не могу найти способ подключиться к Python (3) из docker (к базе данных MS SQL с входом в Active Directory). У кого-нибудь есть способ?
Ссылка: