Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как именно заполняется sys.login_token при windows-аутентификации?  [new]
unknown login
Guest
Сабж. В документации написано, что
Returns one row for every server principal that is part of the login token.

но это не так - запрос
;with cte(prefix) as (
  select '\' union all select 'NT AUTHORITY\' union all select 'BUILTIN\'
)
select t.*
from sys.login_token t
where t.name like '%\%' and not exists (
  select 1 from cte e where t.name like e.prefix+'%'
) and not exists (
  select 1 from sys.server_principals p
  where p.name=t.name
)
возвращает кучу windows-групп, которых нет в sys.server_principals.

Более внятно написано здесь (логин+группы, в которые входит логин, плюс группы, в которые входят группы, в которые входит логин по рекурсии, плюс токены серверных ролей). Однако, есть один непонятный момент: имеется сервер А (2005-й), расположенный в том же домене, что и учетка текущего пользователя, и сервер B (2008R2), расположенный в другом домене, с которым у домена текущей учетки full-trust relationship. Запрос
;with cte(prefix) as (
  select '\' union all select 'NT AUTHORITY\' union all select 'BUILTIN\'
)
select distinct t.name, t.type from sys.login_token t
where t.name like '%\%' and not exists (
  select 1 from cte e where t.name like e.prefix+'%'
)
order by 1

на серверах A и B возвращает очень разные выборки (на B она существенно меньше, чем на A), и разница в выборках - именно в наборе токенов windows-групп. Чем это может быть обусловлено?
(разумеется, запрос на обоих серверах выполняется под windows-аутентификацией, и под одной и той же учеткой).
5 ноя 14, 10:03    [16799014]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить