Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 SQL Server 2008 Management Studio Icons(red arrow - ???)  [new]
o-o
Guest
где-то на форуме мелькало, что если в Object Explorer-е юзер имеет красную стрелочку на иконке,
то у него нету коннекта к базе.
не нахожу подтверждения нигде, попалось только, что это и искать бесполезно, ибо:
Documentation for SQL Server 2008 Management Studio Icons: ФИГ ВАМ!

Status: Closed
as Won't Fix

но если это так (по крайней мере, если отбирать/выдавать юзеру CONNECT на базу,
то стрелка появляется/исчезает), то у меня такой тупой вопрос, но вдруг кто знает:

как ОНИ умудрились навесить стрелки на всех индивидуальных юзеров базы (см. картинку)?
по факту все эти юзеры коннект имеют.
явных DENY в базе нет, кроме выданных мной.
и это совсем не DENY CONNECT, потому что если я явно кому-то (из соседей- db_owner-ов) делаю DENY CONNECT,
то чел больше в базу не попадает абсолютно, т.к. все (кроме меня) db_owner-ы базы только через группу.

внимание, вопрос.
что означает стрелка на юзере, имеющем CONNECT к базе.
как такое сделать:
чтоб и стрелка была, и CONNECT?

на картинке: сосед под учеткой ESP\EE23725 тоже db_owner "через группу",
все права у него есть, но в Object Explorer-е он со стрелкой.
без стрелок нас всего двое:
я (ESP\EE25989) и другой сосед, ESP\EE26245 ("групповой" dbo_owner), над к-ым я издеваюсь.
вот если я ему делаю явный DENY CONNECT, стрелка на нем появляется, но в базу он больше не попадает.
28 ноя 13, 19:21    [15208016]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2008 Management Studio Icons(red arrow - ???)  [new]
o-o
Guest
картинка не прицепилась

К сообщению приложен файл. Размер - 67Kb
28 ноя 13, 19:23    [15208028]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2008 Management Studio Icons(red arrow - ???)  [new]
invm
Member

Откуда: Москва
Сообщений: 9824
Выловить профайлером какие запросы шлет студия?
28 ноя 13, 20:05    [15208231]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2008 Management Studio Icons(red arrow - ???)  [new]
o-o
Guest
invm,

так она не шлет, все послано "до меня".
я это и не могу сделать, а кто сделал, у того не спросить.
я стрелку могу навесить, только послав DENY CONNECT.
и этим отбираю CONNECT.
а у них сделано с сохранением CONNECT-а!
28 ноя 13, 20:16    [15208268]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2008 Management Studio Icons(red arrow - ???)  [new]
invm
Member

Откуда: Москва
Сообщений: 9824
o-o,

Как не шлет? У меня на раскрытие ветки Users шлет вот такой запрос:
exec sp_executesql N'SELECT
u.name AS [Name],
''Server[@Name='' + quotename(CAST(
        serverproperty(N''Servername'')
       AS sysname),'''''''') + '']'' + ''/Database[@Name='' + quotename(db_name(),'''''''') + '']'' + ''/User[@Name='' + quotename(u.name,'''''''') + '']'' AS [Urn],
u.create_date AS [CreateDate],
u.principal_id AS [ID],
CAST(CASE dp.state WHEN N''G'' THEN 1 WHEN ''W'' THEN 1 ELSE 0 END AS bit) AS [HasDBAccess]
FROM
sys.database_principals AS u
LEFT OUTER JOIN sys.database_permissions AS dp ON dp.grantee_principal_id = u.principal_id and dp.type = @_msparam_0
WHERE
(u.type in (''U'', ''S'', ''G'', ''C'', ''K''))
ORDER BY
[Name] ASC',N'@_msparam_0 nvarchar(4000)',@_msparam_0=N'CO'
28 ноя 13, 20:46    [15208372]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2008 Management Studio Icons(red arrow - ???)  [new]
o-o
Guest
invm,

мы друг друга не поняли.
я исхожу из предположения, что стрелка показывает, есть/нет коннект к базе.
похоже на правду, т.к. выдавая/отбирая коннект, стрелка уходит/появляется.

Ваш запрос ни на что глаза не открыл,
[HasDBAccess] высчитывается по sys.database_permissions.state:
dp.type = N'CO' -> CONNECT,
CASE dp.state WHEN N'G' THEN 1 WHEN 'W' THEN 1 -> G = Grant, W = Grant With Grant Option

ну и все то же самое: если коннект есть, то есть доступ, а нет так и нет.

на моей картинке посмотрите на юзера ESP\EE23725:
коннект у него есть, но и стрелка тоже есть,
вот я и спрашиваю, какой командой(командами) добились, что коннект есть, а стрелка показывает, что нет.

такой запрос сделали до меня и мне его ничем не отловить.
28 ноя 13, 23:17    [15208864]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2008 Management Studio Icons(red arrow - ???)  [new]
invm
Member

Откуда: Москва
Сообщений: 9824
o-o,

В чудеса верится слабо. Студия отрисовывает признак на основании данных этого запроса.
Поэтому, если запрос вернул, что доступ к БД разрешен, то либо это баг отрисовки в студии, либо неотрефрешен список пользователей.
29 ноя 13, 01:23    [15209247]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2008 Management Studio Icons(red arrow - ???)  [new]
o-o
Guest
invm,

у меня есть одна идея, проверить смогу только завтра.
у этих юзеров в dp.state не G и не W, но и не D.
интересно, что там.

пользователи отрефрешены. никто их не трогает.
вижу их каждый божий день. у ВСЕХ стрелки.
все попадают в базу через группы, группы БЕЗ стрелок.
стрелки испарились только у меня и у соседа, т.к. я провожу над нами эксперименты,
над ним от своего имени, над собой от его учетки.
пока не был явно отобран/выдан (мною же) коннект, И У НАС БЫЛИ СТРЕЛКИ.
29 ноя 13, 02:14    [15209330]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2008 Management Studio Icons(red arrow - ???)  [new]
o-o
Guest
ну блин я и тупица.
поле sys.database_permissions.state char(1) NOT NULL.
возможные state: G, W, D, R
там не G, W, иначе бы не было стрелки.
там не D, иначе бы юзеры не могли коннектиться.
остается R.
простейший тест показал, сделав db_owner-у REVOKE CONNECT,
коннект не отбирается, а стрелка навешивается.
интересно, занафига такое всем сделали.
завтра займусь изучением REVOKE, вот где у меня полный пробел!
29 ноя 13, 02:54    [15209366]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2008 Management Studio Icons(red arrow - ???)  [new]
o-o
Guest
люди, о-о, ответ неправильный.
и запрос для раскраски юзеров неправильный.
в колонке dp.state нет ни одного R.
тот "запрос для раскраски" не выводит индивидуальные учетки ВООБЩЕ,
т.е. кроме меня и соседа ни одного юзера-доменной учетки
(см. картинку, отфильтровано по домену).
но они же есть!
куча действующих юзеров, куча овнеров, все проникают через группы.
и выводятся они только если закомментировать
--and dp.type = N'CO'

там же LEFT JOIN!!!

итак, вопрос:
какой же это LEFT JOIN, если фильтруем по условию на равенство в правой таблице?

ну и заодно: как попали в sys.database_principals юзеры-доменщики?
могу понять, если бы существовал "частичный" рестор:

отресторили базу, когда все в нее ЕЩЕ ПРОНИКАЛИ через индивидуальные учетки,
a таблица разрешений осталась нетронутой,
как до рестора, и там уже другая политика была, что все ходят в базу только через группы,
и все индивидуальные юзеры были удалены.
но разве такое бывает?

как могли "испариться" разрешения из sys.database_permissions?
что, запустили сервер в single user и через DAC ручками поудаляли из системной таблицы?
фантастиш какой-то.

К сообщению приложен файл. Размер - 100Kb
29 ноя 13, 12:23    [15211215]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2008 Management Studio Icons(red arrow - ???)  [new]
Spartakich
Member

Откуда: Riga
Сообщений: 380
o-o,

похоже стоит DENY CONNECT этим пользователям на базе
29 ноя 13, 12:35    [15211291]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2008 Management Studio Icons(red arrow - ???)  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
o-o
итак, вопрос:
какой же это LEFT JOIN, если фильтруем по условию на равенство в правой таблице?


эээ. в запросе, который студия отправляет, условие and dp.type = N'CO' - в джойне. это уже у вас оно каким-то образом в where перекочевало.
29 ноя 13, 12:52    [15211413]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2008 Management Studio Icons(red arrow - ???)  [new]
o-o
Guest
Spartakich,
во блин же, НЕ СТОИТ там DENY CONNECT.
как только явно выдаешь DENY CONNECT, появляется строка в sys.database_permissions, с "CO", "D".
хотите, временно выставлю DENY CONNECT любому юзеру на Ваш выбор,
и это СРАЗУ отразится в результате запроса с фильтром по "CO"?
т.е. юзер перейдет в число выводимых вторым запросом, но еще и в базу перестанет попадать
(поэтому лучше сейчас сделать, пока никого нет)
в том-то и фокус, что все они в базу попадают, через CONNECT группе
29 ноя 13, 12:52    [15211416]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2008 Management Studio Icons(red arrow - ???)  [new]
o-o
Guest
daw
o-o
итак, вопрос:
какой же это LEFT JOIN, если фильтруем по условию на равенство в правой таблице?


эээ. в запросе, который студия отправляет, условие and dp.type = N'CO' - в джойне. это уже у вас оно каким-то образом в where перекочевало.


вот, не зря daw была выдана призовая ленточка
перекочевало в where вчера ночью, ночью надо спать, а не исследования проводить.
ок, одним вопросом меньше.

а второй остался.
откуда юзеры без пермессов?
как мне такое же воспроизвести?
любой CREATE USER сразу выдает коннект,
т.е. пишет строку в sys.database_permissions.
DENY CONNECT тоже строку не уберет, а только сменит статус.
вчера уже была идея, что они юзеров создавали средствами 2000-ого:
sp_adduser или sp_grantdbaccess
потому что если мы создаем объекты без указания dbo, они попадают в схему = имя юзера.
но все равно эти sp_adduser или sp_grantdbaccess сразу выдают коннект!
29 ноя 13, 13:01    [15211482]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2008 Management Studio Icons(red arrow - ???)  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
o-o,

так, вчера же выяснили, для них revoke connect был сделан. revoke - это как раз и есть убирание разрешения (grant) или запрета (deny).
create user testuser without login;
select * from sys.database_permissions p where p.grantee_principal_id = user_id('testuser');
revoke connect to testuser;
select * from sys.database_permissions p where p.grantee_principal_id = user_id('testuser');
go
drop user testuser;
29 ноя 13, 13:20    [15211637]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2008 Management Studio Icons(red arrow - ???)  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
daw,

вас возможно сбило наличие в sys.database_permissions статуса revoke, но это, на самом деле, довольно специфическая штука - для ситуаций, когда разрешения отбираются, например, на столбцы таблицы.
create user testuser without login;
select * from sys.database_permissions p where p.grantee_principal_id = user_id('testuser');
create table t (c int);
grant select on t to testuser;
go
select * from sys.database_permissions p where p.grantee_principal_id = user_id('testuser');
revoke select on t(c) to testuser;
select * from sys.database_permissions p where p.grantee_principal_id = user_id('testuser');
go
drop user testuser;
go
drop table t;


как правило же, если для какого-то разрешения сделан revoke, оно из sys.database_permissions просто исчезнет.
29 ноя 13, 13:33    [15211774]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2008 Management Studio Icons(red arrow - ???)  [new]
o-o
Guest
daw,
это называется, протупить дважды
у меня же руки не дошли вчера проверить.
а по описанию sys.database_principals.state показалось, что при REVOKE в строку с "CO" для данного юзера запишется "R" в статус:

Permission state:

D = Deny

R = Revoke

G = Grant

W = Grant With Grant Option


кто ж знал, что строка удаляется вообще.
СПАСИБО!

--------------------------
если не затруднит, объясните еще, зачем REVOKE CONNECT db_owner-ам делать ?
их же нисколько не канает.
"уменьшение объема sys.database_permissions"?
или просто решили перевести database access с индивидуальных учеток на групповые и всем подряд сделали REVOKE CONNECT,
не разбираясь особо, кто db_owner, кто нет?
удалить-то не проще было?
наверное, не проще, сами же себе яму вырыли дефолтными схемами при создании юзеров.
поди удали со схемами, если туда объектов понапихали
29 ноя 13, 13:39    [15211860]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server 2008 Management Studio Icons(red arrow - ???)  [new]
o-o
Guest
daw
вас возможно сбило наличие в sys.database_permissions статуса revoke

да, Вы все правильно поняли.
спасибо за разъяснения REVOKE + столбцы, удаляюсь экспериментировать/осваивать REVOKE
29 ноя 13, 13:42    [15211912]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить