2009-09-15 2 views

ответ

22
SELECT 
    OBJECT_NAME(major_id), USER_NAME(grantee_principal_id), permission_name 
FROM 
    sys.database_permissions p 
WHERE 
    OBJECT_NAME(major_id) = 'MyProc' 

Вы можете настроить это, чтобы присоединиться к sys.database_principals или sys.objects, если вы хотите слишком

+0

Используя эту команду 'SELECT', я смог найти, что * хранимая процедура *, которую я написал, имеет ** НЕТ разрешений **. Как теперь установить его? – jp2code

+2

@ jp2code: с инструкцией GRANT – gbn

+1

@ jp2code, чтобы уточнить, ваша хранимая процедура не имела никаких прав EXPLICIT, установленных на ней, но она имела бы установленные/унаследованные разрешения, например. sysadmin все еще может выполнить его –

11

попробовать (Примечание: работает более чем хранимые процедуры):

SELECT 
    dp.NAME AS principal_name 
     ,dp.type_desc AS principal_type_desc 
     ,o.NAME AS object_name 
     ,o.type_desc 
     ,p.permission_name 
     ,p.state_desc AS permission_state_desc 
    FROM sys.all_objects       o 
     INNER JOIN sys.database_permissions  p ON o.OBJECT_ID=p.major_id 
     LEFT OUTER JOIN sys.database_principals dp ON p.grantee_principal_id = dp.principal_id 
    WHERE o.NAME = 'YourProcedureName' 
+0

где на внешней таблице ...? – gbn

+0

@gbn, да, это «нежелательный» запрос, который я использую время от времени, см. Последнее редактирование, я переформатировал и реорганизовал соединения –

+1

Это было прекрасно, сэкономило много часов работы. благодаря – Snowburnt

1

Вид тема, но ... вы могли бы enable вы, разработчик db, «запомнить» разрешения, которые он имел на разных объектах, и сохранить их во время разработки независимо от того, сколько раз вы бросаете и создаете объект ...

Смежные вопросы