узнать тип авторизации SQL Server

demav

Местный
Регистрация
20 Ноя 2008
Сообщения
97
Реакции
13
Credits
158
Может кто-то знает как командой SQL получить тип авторизации (SQL/Windows) для сервера MS SQL Server?

Проще говоря, мне надо знать - можно ли к серверу логиниться с логином/паролем или нет.
 

ONIM

ex-Team DUMPz
Местный
Регистрация
26 Фев 2006
Сообщения
122
Реакции
191
Credits
57
CREATE FUNCTION dbo.fnGetSQLServerAuthenticationMode
(
)
RETURNS INT
AS

BEGIN
DECLARE @InstanceName NVARCHAR(1000),
@Key NVARCHAR(4000),
@LoginMode INT

EXEC master..xp_regread N'HKEY_LOCAL_MACHINE',
N'Software\Microsoft\Microsoft SQL Server\Instance Names\SQL\',
N'MSSQLSERVER',
@InstanceName OUTPUT

IF @@ERROR <> 0 OR @InstanceName IS NULL
RETURN NULL

SET @Key = N'Software\Microsoft\Microsoft SQL Server\' + @InstanceName + N'\MSSQLServer\'

EXEC master..xp_regread N'HKEY_LOCAL_MACHINE',
@Key,
N'LoginMode',
@LoginMode OUTPUT

RETURN @LoginMode
END

И учитесь пользоваться поиском...
 
Последнее редактирование модератором:

demav

Местный
Регистрация
20 Ноя 2008
Сообщения
97
Реакции
13
Credits
158
Спасибо!
Поиском перерыл весь инет, что в реестре это лежит знаю.

Но не дошло, что можно ключ из реестра прочитать с помощью T-SQL.
 

demav

Местный
Регистрация
20 Ноя 2008
Сообщения
97
Реакции
13
Credits
158
Оказывается предложенное решение не всегда работает. Например, у мен 64-разрядная ОС и ветка реестра другая.

Вероятно место хранения ветки в реестре также можно узнать в реестре :)

Но вот еще решение подсказали:

Код:
select serverproperty('IsIntegratedSecurityOnly')

Еще один способ:

Код:
EXEC master.dbo.xp_loginconfig 'login mode'
 
Последнее редактирование модератором:

demav

Местный
Регистрация
20 Ноя 2008
Сообщения
97
Реакции
13
Credits
158
Задача решена, но практически воспользоваться я не могу, вот в чем дело.

Мне нужно ДО ввода логина / пароля пользователем (в программе) узнать тип авторизации. И если тип авторизации НЕ "sql server", то предупредить.

Но для проверки залогиниться в режиме авторизации Windows не всегда возможно, т.к. виндовый пользователь на данном компьютере не всегда может залогиниться в MS SQL Server (на другом копьютере). Ну а в режиме "sql server" залогиниться не могу, т.к. логин/пароль неизвестен.

Или я чего-то недогоняю?

Сделал так.
На клиенте анализирую код ошибки.
И сравниваю с 18452 (Login failed for user '%ls'. Reason: Not associated with a trusted SQL Server connection.)
 
Последнее редактирование модератором: