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

Откуда:
Сообщений: 608
Добрый вечер,

наблюдая странную ситуацию. Есть SQL Server 2016б DEV, используется для разработки и тестирования:
Microsoft SQL Server 2016 (SP2-CU6) (KB4488536) - 13.0.5292.0 (X64) 
	Mar 11 2019 23:19:30 
	Copyright (c) Microsoft Corporation
	Developer Edition (64-bit) on Windows Server 2016 Datacenter 10.0 <X64> (Build 14393: ) (Hypervisor)


в одной из баз есть роль, например restricted_db_datareadeк. Недавно, проверяя разрешения пользователя входящего в роль, обнаружил странные DENY на одну из System Base Tables, sysseobjvalues. Скрипт для проверки разрешений взял отсюда, только добавил WHERE, чтобы выбрать определенного пользователя, например:
+
SELECT  
    [UserName] = CASE memberprinc.[type] 
                    WHEN 'S' THEN memberprinc.[name]
                    WHEN 'U' THEN ulogin.[name] COLLATE Latin1_General_CI_AI
                 END,
    [UserType] = CASE memberprinc.[type]
                    WHEN 'S' THEN 'SQL User'
                    WHEN 'U' THEN 'Windows User'
                 END, 
    [DatabaseUserName] = memberprinc.[name],   
    [Role] = roleprinc.[name],      
    [PermissionType] = perm.[permission_name],       
    [PermissionState] = perm.[state_desc],       
    [ObjectType] = obj.type_desc,--perm.[class_desc],   
    [ObjectName] = OBJECT_NAME(perm.major_id),
    [ColumnName] = col.[name]
FROM    
    --Role/member associations
    sys.database_role_members members
JOIN
    --Roles
    sys.database_principals roleprinc ON roleprinc.[principal_id] = members.[role_principal_id]
JOIN
    --Role members (database users)
    sys.database_principals memberprinc ON memberprinc.[principal_id] = members.[member_principal_id]
LEFT JOIN
    --Login accounts
    sys.login_token ulogin on memberprinc.[sid] = ulogin.[sid]
LEFT JOIN        
    --Permissions
    sys.database_permissions perm ON perm.[grantee_principal_id] = roleprinc.[principal_id]
LEFT JOIN
    --Table columns
    sys.columns col on col.[object_id] = perm.major_id 
                    AND col.[column_id] = perm.[minor_id]
LEFT JOIN
    sys.objects obj ON perm.[major_id] = obj.[object_id]
WHERE memberprinc.[name] = 'DOMAIN\user.name'


вобщем, странно. я также хотел убрать эти разрешения. Подключился по DAC, выполняю в проблемной базе
SELECT * FROM sys.sysseobjvalues
, все работает, возвращает результат.
SELECT IS_SRVROLEMEMBER('sysadmin')
возвращает 1.

пробую
REVOKE SELECT ON sys.sysseobjvalues TO restricted_db_reader;
GRANT SELECT ON sys.sysseobjvalues TO restricted_db_reader
, на обоих выдает:
Msg 4606, Level 16, State 1, Line 6 Granted or revoked privilege SELECT is not compatible with object.


Соответственно, 2 вопроса:
1) как там появились DENY для этой System Base Table?
2) как их убрать без пересоздания роли? это самый простой вариант, но хотелось бы сперва разобраться как такое получилось. Может какой баг? Роль создана давно и никто из команды ее не трогал, да и прав нет. Есть правда доступ у системных админов, но они не должны были трогать ничего.

К сообщению приложен файл. Размер - 93Kb
30 июл 19, 21:46    [21938305]     Ответить | Цитировать Сообщить модератору
 Re: Странная ситуация с разрешениями для System Base Tables  [new]
Диклевич Александр
Member

Откуда:
Сообщений: 608
Диклевич Александр,

все, разобрался, скрипт неправильный, не показывает разрешения для схем. подправил, все ясно теперь.
31 июл 19, 00:22    [21938423]     Ответить | Цитировать Сообщить модератору
 Re: Странная ситуация с разрешениями для System Base Tables  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30829
Диклевич Александр
скрипт неправильный, не показывает разрешения для схем. подправил
А выложить? :-)
31 июл 19, 00:57    [21938434]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить