16.02.2006, 12:45 | #1 |
Участник
|
В системе Navision преобразование происходит через виртуальную таблицу "SID - Account ID":
Lookup("SID - Account ID".ID WHERE (SID=FIELD(Login SID))) Как мне это преобразование сделать в T-SQL(или VBA)? SID в Navision хранится в строке (Text(119)) вида "S-1-5-21-1715567821-1364589140-682003330-2941", в MSSQLServer'2000 - SID имеет двоичный тип (varbinary(85)) в HEX-формате вида "0x010500000000000515000000C6BB507AA33CD326828BA6282D050000" Как их сопоставить? Знатоки, помогите! |
|
16.02.2006, 13:21 | #2 |
Участник
|
А зачем их согласовывать?
|
|
16.02.2006, 13:33 | #3 |
Участник
|
Я не говорил "согласовывать".
Мне нужно через T-SQL (т.е. не в cистеме Navision) из таблицы "Windows Login" получить список пользоватей. Там же есть только поле SID в непонятном для меня формате. В этом и проблема. |
|
16.02.2006, 14:28 | #4 |
Участник
|
ааа... вот оно что
|
|
16.02.2006, 14:33 | #5 |
Участник
|
Спасибо, Fordewind!
Но я в первом посте указал что это поле "Windows Login".ID является вычисляемым Lookup("SID - Account ID".ID WHERE (SID=FIELD(Login SID))). А таблица "SID - Account ID" - виртуальная! Как мне до неё добраться в T-SQL? Или как этот текстовый SID ПРАВИЛЬНО привести к двоичному виду? |
|
17.02.2006, 16:39 | #6 |
Участник
|
SQL.RU помог
Решение: Код: create FUNCTION dbo.fnBinaryToInt (@Bin varbinary(4)) RETURNS int AS BEGIN if Len(@Bin)<4 set @Bin=SUBSTRING(@Bin+0x00000000,1,4) RETURN CONVERT(int, Convert(binary(4), REVERSE(CONVERT(char(4), @Bin)))) END go create function dbo.fnSIDToStrSID(@sid as varbinary(85)) returns varchar(119) AS BEGIN --SET NOCOUNT ON declare @ssid varchar(119), @SAC tinyint, @i as tinyint, @b4 as binary(4) set @ssid='S-'+LTRIM(STR(cast(SUBSTRING(@sid,1,1) as tinyint)))+'-'+LTRIM(cast(CONVERT(bigint, 0x0000+SUBSTRING(@sid,3,6)) as varchar(64))) set @SAC=cast(SUBSTRING(@sid,2,1) as tinyint) set @i=0 while @i<@SAC begin set @b4=SUBSTRING(@sid,@i*4+9,4) set @ssid=@ssid+'-'+LTRIM(STR(dbo.fnBinaryToInt(@b4))) set @i=@i+1 end --select master.dbo.fn_varbintohexstr(@sid) HexSID, @ssid StrSID return @ssid END |
|