Mono в SQL Server с аутентификацией Windows

Быстро ...

Как использовать аутентификацию Windows для SQL Server с клиентом Mono SQL, работающим в Windows без < / em> имя пользователя + пароль в строке подключения?

Еще ...

  • Мы должны использовать Mono для поддержки нескольких платформ для некоторых компонентов нашего приложения.
    Это внешнее ограничение, которое мы не можем изменить.

  • Мы будем запускать компоненты, которые обращаются к базе данных только в Windows.
    Переносимость / независимость от ОС клиента Mono SQL не добавляет ценности

То есть любой компонент, работающий не в Windows, не будет обращаться к базе данных SQL Server.

  • Процесс выполняется под каким-либо пользователем Windows (реальный пользователь, учетная запись службы и т. Д.)

  • Встраивание имени пользователя и паролей - это плохо

    Независимо от того, с какой точки зрения вы подходите

Итак, как мы можем позволить клиенту Mono SQL прочитать токен входа в систему NT пользователя, выполняющего процесс, и передать его в SQL Server? Так же, как MS .net?

  • Есть ли флаг или параметр, который плохо документирован?

  • Нужно ли нам реализовывать собственное расширение?
    Если да, то действительно ли мы первые захотели это сделать?

Есть еще 5 вопросов (в настоящее время) с тегами Mono и SQL-Server: они не отвечают на этот ...


person gbn    schedule 02.05.2012    source источник
comment
У меня нет для вас ответа, но нужно задаться вопросом, могли бы вы относиться к AD как к серверу Kerberos и получить билет для аутентификации. Это действительно интересная проблема!   -  person Ben Thul    schedule 02.05.2012
comment
@BenThul: Мы расследуем это. Ответьте, пожалуйста: я буду поддерживать. Это также может помочь нам решить проблему.   -  person gbn    schedule 02.05.2012
comment
О ... Я еще не знаю, что я буду рассматривать то, что у меня есть, как ответ. Я просто надеюсь, что это приведет к одному.   -  person Ben Thul    schedule 03.05.2012
comment
Насколько мне известно, аутентификация Windows в SQL Server основана на AD, аналогов которой нет в UNIX или Linux. В этом случае вы не должны ожидать, что Mono будет иметь эту реализацию, если только вы не напишете ее самостоятельно. Mono обычно фокусируется на портативных частях из-за ограниченных ресурсов.   -  person Lex Li    schedule 07.05.2012
comment
@Siva: да, правильно (я упомянул об этом), но кто-нибудь когда-нибудь работал над этим или публиковал какое-то расширение? Вот в чем суть моего вопроса ...   -  person gbn    schedule 07.05.2012


Ответы (2)


Это не так просто, как кажется. Я уверен, что вы знаете, что Mono SqlClient поддерживает аутентификацию NT:

Имеет формат строки подключения для аутентификации NT: Server = hostname; Database = databaseName; User ID = windowsDomain \ windowsUserid; Password = windowsPassword; Integrated Security = SSPI

Но, конечно, вам нужна более простая форма Integrated Security=SSPI и позволить квитированию аутентификации NT использовать текущие учетные данные процесса. И вот в чем проблема. Извлечь текущее имя пользователя (идентификатор) процесса тривиально, но процесс не может обнаружить свои собственные учетные данные пароль. При выполнении аутентификации NT процесс Windows фактически не выполняет аутентификацию, а вместо этого запрашивает Locas Security Authority (также известный как LSASS.EXE, мелочи: не подключайте к нему отладчик;)) для аутентификации этого процесса. Это означает, что любая библиотека, которая хочет достичь того же, должна использовать один и тот же протокол, т.е. попросите LSA подтвердить его подлинность. Фактические детали, для любопытных, находятся в последовательности _ 2_, _ 3_, AcceptSecurityContext, как описано в Использование SSPI. Я не изучал моно-источник для SqlClient, но уверен, что они используют некоторые GSS-API для аутентификации, не SSPI. поэтому, по определению, им необходимо знать пароль, поскольку они собираются выполнять обмен Kerberos сами, а не просить LSA сделать это от их имени.

Это, как вы понимаете, предположение и скорее предположение с моей стороны, но я был бы удивлен, услышав другую историю. Хотя, безусловно, можно форкнуть или исправить Mono.Data.Tds и изменить реализацию аутентификации для использования SSPI вместо GSS, это, по определению, будет непереносимой реализацией Windows. Я предполагаю, что для этого мало стимулов, учитывая, что точка притяжения №1 Mono - это то, что не специфично для Windows. Боюсь, вам придется реализовать это самостоятельно.

person Remus Rusanu    schedule 07.05.2012
comment
Мы должны использовать Mono по разным причинам: но непереносимость не является проблемой для компонентов, которые подключаются к базе данных. И мы можем избежать паролей в открытом виде, если реализуем это - person gbn; 07.05.2012
comment
Я не говорю, что это не имеет смысла для вас. Я говорю, что это, вероятно, не реализовано в моно. - person Remus Rusanu; 07.05.2012
comment
@RemusRusanu объяснение верное. Mono не реализует интегрированные соединения без пароля с SQL-сервером по указанным им причинам. Конечно, это все с открытым исходным кодом, поэтому, вероятно, можно добавить это на платформу, отличную от Windows. Обязательно поделитесь своими выводами с сообществом :-) - person poupou; 08.05.2012

Используйте прокси-сервер авторизации NTLM и подключитесь к SQL Server через прокси-сервер.

person Bahribayli    schedule 14.05.2012