Как получить все пользовательские группы/роли пользователей, которые имеют разрешение на выполнение для определенной хранимой процедуры в MS SQL Server 2008 R2.Как получить пользователей, у которых есть разрешение на выполнение для конкретного sp на сервере sql?
ответ
Запуск трассировки профайлера в SSMS-активности показывает, что SSMS собирает эти данные для окна свойств хранимой процедуры со следующим запросом, который вы, вероятно, могли бы настроить для своих целей (обратите внимание, что значения для двух последних параметров должны быть настроены рассмотреть процедуру вы заинтересованы в):
exec sp_executesql N'SELECT
grantee_principal.name AS [Grantee],
CASE grantee_principal.type WHEN ''R'' THEN 3 WHEN ''A'' THEN 4 ELSE 2 END - CASE ''database'' WHEN ''database'' THEN 0 ELSE 2 END AS [GranteeType]
FROM
sys.all_objects AS sp
INNER JOIN sys.database_permissions AS prmssn ON prmssn.major_id=sp.object_id AND prmssn.minor_id=0 AND prmssn.class=1
INNER JOIN sys.database_principals AS grantee_principal ON grantee_principal.principal_id = prmssn.grantee_principal_id
WHERE
(sp.type = @_msparam_0 OR sp.type = @_msparam_1 OR [email protected]_msparam_2)
and([email protected]_msparam_3 and SCHEMA_NAME(sp.schema_id)[email protected]_msparam_4)',
N'@_msparam_0 nvarchar(4000),@_msparam_1 nvarchar(4000),@_msparam_2 nvarchar(4000),@_msparam_3 nvarchar(4000),@_msparam_4 nvarchar(4000)',
@_msparam_0=N'P',@_msparam_1=N'RF',@_msparam_2=N'PC',@_msparam_3=N'~procedure name~',@_msparam_4=N'~procedure schema~'
это, вероятно, стоит отметить, что это не относится к пользователям, которые неявно имеют права на исполнение из-за роли членства на высоком уровне (в силу являющихся членами sysadmin
сервер, например).
Он также не расширяет членство в отдельных пользователях.
Попробуйте этот запрос. Он вернет пользователей и роли с разрешениями EXECUTE
на ВСЕ хранимые процедуры и функции. Вам нужно будет настроить фильтр только для того, что вам нужно.
SELECT
[UserName] = CASE princ.[type]
WHEN 'S' THEN princ.[name]
WHEN 'U' THEN ulogin.[name] COLLATE Latin1_General_CI_AI
END,
[UserType] = CASE princ.[type]
WHEN 'S' THEN 'SQL User'
WHEN 'U' THEN 'Windows User'
END,
[DatabaseUserName] = princ.[name],
[Role] = null,
[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
--database user
sys.database_principals princ
LEFT JOIN
--Login accounts
sys.login_token ulogin on princ.[sid] = ulogin.[sid]
LEFT JOIN
--Permissions
sys.database_permissions perm ON perm.[grantee_principal_id] = princ.[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
princ.[type] in ('S','U') AND perm.[permission_name] = 'EXECUTE'
UNION
--List all access provisioned to a sql user or windows user/group through a database or application role
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 perm.[permission_name] = 'EXECUTE'
UNION
--List all access provisioned to the public role, which everyone gets by default
SELECT
[UserName] = '{All Users}',
[UserType] = '{All Users}',
[DatabaseUserName] = '{All Users}',
[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
--Roles
sys.database_principals roleprinc
LEFT JOIN
--Role 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]
JOIN
--All objects
sys.objects obj ON obj.[object_id] = perm.[major_id]
WHERE
--Only roles
roleprinc.[type] = 'R' AND
--Only public role
roleprinc.[name] = 'public' AND
--Only objects of ours, not the MS objects
obj.is_ms_shipped = 0 AND
perm.[permission_name] = 'EXECUTE'
ORDER BY
princ.[Name],
OBJECT_NAME(perm.major_id),
col.[name],
perm.[permission_name],
perm.[state_desc],
obj.type_desc--perm.[class_desc]
- 1. Показать пользователей, у которых есть разрешение на конкретную базу данных
- 2. Найти пользователей, у которых есть только разрешения на чтение
- 3. Как получить всех пользователей, у которых есть эти теги?
- 4. оптимизировать SP на сервере sql 2k5
- 5. Безопасное выполнение PHP-скриптов пользователей на сервере
- 6. Выполнение дерева на сервере Sql
- 7. несколько пользователей на сервере sql
- 8. Wordpress запрос для пользователей, у которых есть 2 равных meta
- 9. Как проверить разрешение на синоним на сервере Microsoft SQL?
- 10. Linux - Список пользователей, у которых есть определенный каталог
- 11. Выполнение 3 операторов SQL в Parallel на SQL-сервере
- 12. MySQL - Получите количество пользователей, у которых есть «пользовательский контакт»
- 13. PAPERCLIP: Как указать только пользователей, у которых есть прикрепленное изображение?
- 14. Получить сообщения от друзей (у вас есть разрешение на просмотр)
- 15. Получить пользователей, у которых есть заказы в одной строке, но нет в другом SQL Server 2012
- 16. Выполнение хранимой процедуры на сервере SQL
- 17. Разрешение на выполнение файла
- 18. Как я могу выбрать всех пользователей, у которых есть набор разрешений, а не одно конкретное разрешение SQL?
- 19. Выполнение пакетного обновления на сервере sql
- 20. SQL-запрос, чтобы получить пользователей, у которых есть друзья в верхней части N-го процентиля
- 21. Доступ запрещен для папок для пользователей, хотя у них есть разрешение rwx на SUSE Linux
- 22. Поиск всех пользователей, у которых есть повторяющиеся имена
- 23. Получение принтеров, на которых у меня есть права на доступ
- 24. Просмотреть всех пользователей, у которых есть файл, отмеченный специальным файлом
- 25. MySQL не извлекает пользователей, у которых есть пользовательский набор результатов
- 26. Приоритет ввода-вывода для запроса конкретного запроса на SQL-сервере
- 27. Как я могу получить всех пользователей, у которых есть определенные разрешения для django guardian?
- 28. получить всех пользователей из таблицы, у которых нет строки, заполненной
- 29. У меня есть разрешение на выполнение, но не разрешение на запись - как мне выполнить скрипт, который создает файл?
- 30. Удалить разрешение на выполнение для файла, загруженного на Mac
Я думаю, что вы можете начать здесь: SELECT * FROM sys.fn_builtin_permissions ('EX'); – PeterRing
Вы также можете найти полезную информацию: http: //stackoverflow.com/questions/13152329/finding-stored-procedures-having-execute-permission – PeterRing
Не повезло @PeterRing, это [SELECT * FROM sys.fn_builtin_permissions ('EX ')] возвращает 0 строк :( –