как олицетворять пользователя на Azure sql, используя делегирование Kerberos - PullRequest
0 голосов
/ 29 января 2020

Пожалуйста, помогите мне с Azure Sql Windows вопросом олицетворения

Существует трехуровневое приложение, которое использует олицетворение на уровне обслуживания для подключения к MS SQL в качестве пользователя, запустившего клиентское приложение.

Билет Kerberos используется для олицетворения пользователя клиента в службе, как показано ниже:

SECURITY_HANDLE serverContext;

AcceptSecurityContext(ref inbound, ref serverContext, ref ClientToken, APIReference.ContextAttr, APIReference.SECURITY_NATIVE_DREP, out serverContext, out ServerToken, out uNewContextAttr, out NewLifeTime); // final handshake leg
ImpersonateSecurityContext(ref serverContext); //secur32.Dll

SqlConnection conn = new SqlConnection("Integrated Security=True") // works on MS SQL on premises

SqlConnection conn = new SqlConnection("Authentication=Active Directory Integrated"); // fails with Azure SQL (no impersonation is actually made)

RevertSecurityContext(ref _context); //secur32.Dll

Однако не выполняется олицетворение пользователя, когда билет Kerberos используется для олицетворения в Azure * 1034. * (и работает с MS SQL в помещениях). Проблема в том, что SQL запросы выполняются на AzureSQL под учетной записью пользователя службы вместо учетной записи пользователя клиента.

Можно ли заставить олицетворение билетов Kerberos работать с Azure SQL?

Я знаю, что есть функция EXECUTE AS LOGIN, которую можно использовать для олицетворения пользователя на Sql сервере. Но я хотел бы, чтобы олицетворение Kerberos работало, если это возможно.

UPD: я использовал adal.dll в службе для подключения AzureSQL

Я написал c# код, который олицетворяет собой AzureSQL с комбинацией LogonUser token и WindowsIdentity.Impersonate(). Однако я хотел бы использовать делегирование Kerberos, если это возможно

Upd

Я не нашел способа выдать себя за пользователя с помощью Kerberos и подключиться к Azure SQL при обслуживании выдавал себя за пользователя.

Однако у меня есть пользовательские команды T- SQL execute as user= и revert для выполнения "олицетворения" базы данных

...