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

Откуда: Ярославль
Сообщений: 2
Может кто-нибудь разъяснит глупому разницу между get_sid(...) и SUSER_SID(...)
Дело в том, что SUSER_SID('DOMAIN\User') возвращает SID, даже если этот User
не имеет логина в SQL, а get_sid('DOMAIN\User',NULL) [как вариант get_sid('\UDOMAIN\User',NULL),взято из текста sp_addalias] всегда дает NULL .
Может еще какие-то параметры у него есть ?

З.Ы Выполняется под SA !
Не даите сгинуть в невежестве!
15 дек 03, 13:39    [459785]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Разница между get_sid(...) и SUSER_SID(...) ?  [new]
IPO
Member

Откуда:
Сообщений: 2
Такое впечатление, что get_sid нормально вызывается из системных хранимых процедур. По крайней мере я пытался выполнить эту функцию из кверианализера и получал NULL. В то же время выполненная с теми же данными из процедуры sp_MSaddlogin_implicit_ntlogin, функция get_sid возвращала правильное число. Еще какие-то странности наблюдаю с этой функцией при попытке получить SID компьютера. Т.е. на некоторых рабочих станциях она корректно отрабатывает для Domain\workstation$, а на других - нет.
6 май 05, 14:20    [1522720]     Ответить | Цитировать Сообщить модератору
 Re: Разница между get_sid(...) и SUSER_SID(...) ?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
USE master
GO
CREATE PROC Test_Get_SID
AS
  DECLARE @login sysname
  SET @login = SUSER_SNAME()
  SELECT get_sid(@login, NULL)
GO

exec Test_Get_SID
GO

sp_MS_marksystemobject 'Test_Get_SID'
GO

exec Test_Get_SID
GO

DROP PROC Test_Get_SID
6 май 05, 14:41    [1522870]     Ответить | Цитировать Сообщить модератору
 Re: Разница между get_sid(...) и SUSER_SID(...) ?  [new]
IPO
Member

Откуда:
Сообщений: 2
pkarklin
USE master
GO
CREATE PROC Test_Get_SID
AS
  DECLARE @login sysname
  SET @login = SUSER_SNAME()
  SELECT get_sid(@login, NULL)
GO

exec Test_Get_SID
GO

sp_MS_marksystemobject 'Test_Get_SID'
GO

exec Test_Get_SID
GO

DROP PROC Test_Get_SID


Спасибо, pkarklin! Правильно замечено! Я нашел переписку с поддержкой МС по этому вопросу, вот что они написали:
Hi Trevor,


Sorry about my get_sid flame <g>. I knew that a lack of documentation
causes curiosity (next version this may no longer be a problem <g>), and
yet I didn't think about the possibility that you were debugging
sp_grantlogin (even though the clues are in the thread <g>). But (in any
case) an ad-hoc call (ie., a call done outside of those system sprocs) to
get_sid() should always returns null.


If this problem persists: You can check for an NT problem by using both
LookupAccountName and LookupAccountSid API calls. And let the case owner
know if the status from sysobjects where name ='sp_grantlogin' is <>
-1073741823, or the status from sysobjects where name ='sp_grantdbaccess'
is <> -1610612735.

Ссылка на переписку:
http://www.derkeiler.com/Newsgroups/microsoft.public.sqlserver.security/2002-10/2696.html
6 май 05, 15:33    [1523139]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить