Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Windows Login  [new]
MedBrat777
Member [заблокирован]

Откуда: Санкт-Петербург
Сообщений: 57
Добрый день. Водрузили на меня квест перенести доступ пользователей в MS NAV с обычного на win аутентификацию. Суть в чем. Руками возиться много. на каждого пользователя приходится много ролей. В вышеуказанном софте у меня отображается нормальное имя GOLD585\Zhukova.Mariya (например). Когда выдергиваю скулем информацию из таблицы где хранятся логины win получаю некую крякозябру. S-1-5-21-2477542640-2347204690-64716585-23784. Функция SUSER_SID возвращает несколько другой формат. 0x010500000000000515000000F04CAC935280E78B297FDB03E85C0000

Вопрос в общем вот в чем: S-1-5-21-2477542640-2347204690-64716585-23784 - что это за кодировка и как ее привести в человекопригодный вид? Буду рад, если кто подскажет...
15 май 13, 15:38    [14299984]     Ответить | Цитировать Сообщить модератору
 Re: Windows Login  [new]
Glory
Member

Откуда:
Сообщений: 104760
MedBrat777
Вопрос в общем вот в чем: S-1-5-21-2477542640-2347204690-64716585-23784 - что это за кодировка и как ее привести в человекопригодный вид? Буду рад, если кто подскажет...


https://www.google.ee/search?q=S-1-5-21
15 май 13, 15:45    [14300057]     Ответить | Цитировать Сообщить модератору
 Re: Windows Login  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Glory,

думаю, только [url=]https://www.google.com/search?q=S-1-5-21 [/url] Хотя не уверен))) Мож он автоматом шибанёт)

P.S. У пендосов на форуме находил скрипт, который возвращал нужный тебе SID. Тоже в НАВ5 была такая трабла.
15 май 13, 15:46    [14300077]     Ответить | Цитировать Сообщить модератору
 Re: Windows Login  [new]
MedBrat777
Member [заблокирован]

Откуда: Санкт-Петербург
Сообщений: 57
Нашел...
Теперь сам скрипт. На мой взгляд, лучше всего создать функцию, а потом просто вызывать ее с параметром:

--Проверяем существует ли функция, если да то удаляем и создаем.

IF OBJECT_ID (N'dbo.StringSIDToLogin', N'FN') IS NOT NULL
DROP FUNCTION dbo.StringSIDToLogin
GO
CREATE FUNCTION dbo.StringSIDToLogin (@MYSID AS VARCHAR(255))
RETURNS VARCHAR(300)
AS
BEGIN

--получаем бинарное значение

DECLARE @A AS BIGINT ,@B AS BIGINT ,@C AS BIGINT ,@D AS BIGINT
SET @MYSID = REVERSE(@MYSID)
SET @D = REVERSE(SUBSTRING(@MYSID,1,CHARINDEX('-',@MYSID)-1))
SET @MYSID = SUBSTRING(@MYSID,CHARINDEX('-',@MYSID)+1,255)
SET @C = REVERSE(SUBSTRING(@MYSID,1,CHARINDEX('-',@MYSID)-1))
SET @MYSID = SUBSTRING(@MYSID,CHARINDEX('-',@MYSID)+1,255)
SET @B = REVERSE(SUBSTRING(@MYSID,1,CHARINDEX('-',@MYSID)-1))
SET @MYSID = SUBSTRING(@MYSID,CHARINDEX('-',@MYSID)+1,255)
SET @A = REVERSE(SUBSTRING(@MYSID,1,CHARINDEX('-',@MYSID)-1))
declare @sid_sql VARBINARY(100)
DECLARE @StrLogin VARCHAR(100)
set @sid_sql= 0x010500000000000515000000
+ CONVERT(VARBINARY,REVERSE(CONVERT(BINARY(4),@A)))
+ CONVERT(VARBINARY,REVERSE(CONVERT(BINARY(4),@B)))
+ CONVERT(VARBINARY,REVERSE(CONVERT(BINARY(4),@C)))
+ CONVERT(VARBINARY,REVERSE(CONVERT(BINARY(4),@D)))

--теперь с помощью стандартной функции MS SQL находим логин и убираем префикс домена

set @StrLogin=SUSER_SNAME(@sid_sql)
set @StrLogin=REPLACE (@StrLogin,'dom\','')
RETURN (@StrLogin)
END
GO


Осталось только вызвать функцию:

SELECT dbo.StringSIDToLogin('S-1-5-21-1106671424-631848431-2339101832-7032') AS [Login]
15 май 13, 16:09    [14300341]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить