Аутентификация Windows для SQL Server с использованием JBDC на Mac

Возможно ли подключиться к SQL Server с помощью проверки подлинности Windows/интегрированной безопасности с Mac? Я использую драйвер JDBC типа 4, предоставленный Microsoft. Передняя часть (приложение формы) закодирована на Java. Все работает отлично в Windows, но один человек в офисе использует Mac.

Возможно ли это? FYI, я никогда не использовал Маков, поэтому я очень начинаю с ними. Я искал по всему Интернету, но не нашел решения. Заранее благодарю вас.

Ответы

Ответ 1

Эта информация трудно найти в моем опыте. Все мои поиски обнаружили неправильную (устаревшую) информацию, так как Microsoft изменила правила и добавила параметр authenticationScheme. В интересах оказания помощи следующему человеку, вот пример строки подключения, которая работает:

jdbc:jtds:sqlserver://123.123.123;instance=server1;databaseName=students;integratedSecurity=true;authenticationScheme=JavaKerberos

Также в свойствах драйвера установите "Domain". Не включайте домен в любое имя пользователя.

Это было протестировано с использованием Squirrel SQL (Java) с jtds на Mac OSX. Надеемся, что в предыдущем предложении есть условия поиска, которые кто-то может использовать, кому нужно знать эту информацию.

Ответ 2

Использование встроенной проверки подлинности Kerberos для подключения к SQL Server

Начиная с Microsoft JDBC Driver 4.0 для SQL Server, приложение может использовать свойство соединения authenticationScheme, чтобы указать, что он хочет подключиться к базе данных, используя интегрированный Kerberos 4-го уровня аутентификации.


jTDS Драйвер JDBC для SQL Server поддерживает проверку подлинности Windows, используя свойство domain, как описано в FAQ.

домен

Указывает домен Windows для аутентификации. Если присутствует, и имя пользователя и пароль, jTDS использует Windows (NTLM) аутентификации вместо обычной аутентификации SQL Server (т. пользователь и пароль являются пользователем домена и паролем). Эта позволяет клиентам, не входящим в Windows, входить на серверы, которые только настроен на прием аутентификации Windows.

Если параметр домена присутствует, но не указано имя пользователя и пароль, jTDS использует свою собственную библиотеку Single-Sign-On и регистрируется в с зарегистрированными учетными данными пользователя Windows (для этого очевидно, должны быть в Windows, войти в домен, а также иметь установленная библиотека SSO - обратитесь к README.SSO в как это сделать).

Ответ 3

Я использую jTDS для mac (10.9).

С помощью этого драйвера вам необходимо указать имя пользователя и пароль, как всегда, единственное различие заключается в том, что вам нужно указать domain = WHATEVERTHENTDOMAIN в строке подключения (или, если хотите, свойства соединения).

Итак, пример строки подключения:

jdbc:jtds:sqlserver://db_server:1433/DB_NAME;domain=NT_DOMAIN_NAME

Затем драйвер jTDS использует NTLM для входа в указанный домен с именем пользователя и паролем.

Ответ 4

Это старая должность, но может быть актуальной для некоторых людей. См. Этот SO post, в котором описывается, как подключиться к SQL Server с помощью проверки подлинности Windows с Linux-машины через JDBC. Это также будет работать на Mac.

Ответ 5

jTDS уступает драйверу Microsoft JDBC (в частности, он не может определить типы параметров в подготовленном заявлении)

Да, вы можете аутентифицироваться на MS SQL Server с использованием проверки подлинности Active Directory, поскольку Active Directory - это только Kerberos + LDAP, которые с открытым исходным кодом и реализованы на Mac

Конфигурация Kerberos /etc/krb5.conf:

[libdefaults]
default_realm = YOUR_REALM.NET

[realms]
YOUR_REALM.NET = {
    kdc = host.your-domain.net
}

Мне нужно было использовать полное доменное имя KDC, а не только имя домена

Строка подключения JDBC:

jdbc:sqlserver://$host;database=$db;integratedSecurity=true;authenticationScheme=JavaKerberos

Если $host не имеет SPN MSSQLSrv/$host, добавьте serverSp=$SPN в строку подключения JDBC

Ответ 6

Неверно утверждать, что один драйвер может определять типы данных, а другой - нет. Любой драйвер должен смотреть на подразумеваемый тип на основе переданных аргументов. Это делают как jTDS, так и драйвер Microsoft. Это ограничение протокола - база данных не может сказать драйверу, какой тип является правильным, потому что во многих запросах она не может знать, что вы собираетесь.

В каждой версии jTDS и драйвер Microsoft имеют разные проблемы и преимущества. "Лучший" выбор зависит от того, на какую именно версию вы смотрите, и каковы ваши потребности. Мне приходилось переключаться назад и вперед, когда выходили разные версии - Microsoft ломалась определенным образом, а потом добавляла то, что хотела.