Проверка подлинности Windows для SQL Server с использованием JBDC на Mac
Можно ли подключиться к SQL Server с помощью проверки подлинности Windows / встроенной безопасности с Mac? Я использую драйвер JDBC типа 4, предоставленный Microsoft. Внешний интерфейс (приложение формы) написан на Java. Все отлично работает на Windows, но один человек в офисе использует Mac.
Это возможно? К вашему сведению, я никогда не использовал Mac, поэтому я очень новичок в них. Я искал по всему Интернету, но не нашел решения. Заранее спасибо.
7 ответов
Эту информацию трудно найти в моем опыте. Все мои поиски оказались неверными (устаревшими), поскольку Microsoft изменила правила и добавила authenticationScheme
параметр. Чтобы помочь следующему человеку, вот пример строки подключения, которая работает:
jdbc:jtds:sqlserver://123.123.123;instance=server1;databaseName=students;integratedSecurity=true;authenticationScheme=JavaKerberos
Также в наборе свойств драйвера "Domain"
, Не включайте домен в настройках имени пользователя.
Это было проверено с использованием Squirrel SQL (Java) с jtds на Mac OSX. Надеемся, что в предыдущем предложении есть поисковые термины, которые кто-то может использовать, кому нужно знать эту информацию.
Использование встроенной аутентификации Kerberos для подключения к SQL Server
Начиная с Microsoft JDBC Driver 4.0 для SQL Server, приложение может использовать свойство подключения authenticationScheme, чтобы указать, что оно хочет подключиться к базе данных, используя встроенную проверку подлинности Kerberos типа 4.
Драйвер jTDS JDBC для SQL Server поддерживает проверку подлинности Windows, просто используя свойство домена, как описано в разделе часто задаваемых вопросов.
домен
Указывает домен Windows, в котором выполняется аутентификация. Если он присутствует, а имя пользователя и пароль предоставлены, jTDS использует аутентификацию Windows (NTLM) вместо обычной аутентификации SQL Server (т. Е. Предоставленные имя пользователя и пароль - это имя пользователя и пароль домена). Это позволяет клиентам, отличным от Windows, войти в систему на серверах, которые настроены только на проверку подлинности Windows.
Если параметр домена присутствует, но имя пользователя и пароль не предоставлены, jTDS использует собственную библиотеку единого входа и входит в систему с учетными данными зарегистрированного пользователя Windows (для этого, очевидно, необходимо войти в Windows, войти в систему). домен, а также с установленной библиотекой SSO - обратитесь к README.SSO в дистрибутиве, чтобы узнать, как это сделать).
Я использую jTDS на Mac (10.9).
Используя этот драйвер, вы должны указать имя пользователя и пароль, как всегда, с той лишь разницей, что вам нужно указать domain=WHATEVERTHENTDOMAIN в строке подключения (или, если хотите, свойства подключения).
Итак, пример строки подключения:
jdbc:jtds:sqlserver://db_server:1433/DB_NAME;domain=NT_DOMAIN_NAME
Затем драйвер jTDS использует NTLM для входа в указанный домен с именем пользователя и паролем.
jTDS уступает драйверу JDBC от Microsoft (в частности, он не может определить типы параметров в подготовленном выражении)
Да, вы можете проходить аутентификацию на 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
не имеет имени участника-службы MSSQLSrv/$host
, добавлять serverSp=$SPN
к строке подключения JDBC
Это старый пост, но может быть актуален для некоторых людей. Посмотрите этот другой пост SO, который описывает, как подключиться к SQL Server с аутентификацией Windows с компьютера Linux через JDBC. Это будет работать и на Mac.
Неверно утверждать, что один драйвер может определять типы данных, а другой - нет. Любой драйвер должен смотреть на подразумеваемый тип на основе переданных аргументов. И jTDS, и драйвер Microsoft делают это. Это ограничение протокола - база данных не может сказать драйверу, какой тип правильный, потому что во многих запросах она не может знать, что вы намереваетесь.
В каждой версии jTDS и драйвер Microsoft имеют разные проблемы и разные преимущества. "Лучший" выбор зависит от того, какую именно версию каждого из них вы смотрите, и каковы ваши потребности. Мне приходилось переключаться туда и обратно, когда выходили разные версии - Microsoft определенным образом ломала, а потом добавляла то, что я хотел.
Следующая строка подключения работала для меня
jdbc:jtds:sqlserver://server_name:port_name;useLOBs=false;databaseName=db_name;useNTLMv2=true;domain=domain_name;
Я использую jTDS 1.3.2 и SQuirreL SQL Client .