Как просмотреть все гранты для базы данных SQL?

Мне понравился ответ К. Брайана sql-query Келли, но я хотел получить sql-query немного больше информации sql-server-2005 (например, схему), а также mssql2005 сгенерировать соответствующие sql-syntax операторы GRANT и REVOKE, чтобы sql-select я мог применять их в разных sql средах (например, dev / test permission / prod) .

обратите внимание, что sql-statement вы можете легко исключить permission системные объекты, см. прокомментированное sql-syntax предложение where

select 
    class_desc 
    ,USER_NAME(grantee_principal_id) as user_or_role
    ,CASE WHEN class = 0 THEN DB_NAME()
          WHEN class = 1 THEN ISNULL(SCHEMA_NAME(o.uid)+'.','')+OBJECT_NAME(major_id)
          WHEN class = 3 THEN SCHEMA_NAME(major_id) END [Securable]
    ,permission_name
    ,state_desc
    ,'revoke ' + permission_name + ' on ' +
        isnull(schema_name(o.uid)+'.','')+OBJECT_NAME(major_id)+ ' from [' +
        USER_NAME(grantee_principal_id) + ']' as 'revokeStatement'
    ,'grant ' + permission_name + ' on ' +
        isnull(schema_name(o.uid)+'.','')+OBJECT_NAME(major_id)+ ' to ' +
        '[' + USER_NAME(grantee_principal_id) + ']' as 'grantStatement'
FROM sys.database_permissions dp
LEFT OUTER JOIN sysobjects o
    ON o.id = dp.major_id
-- where major_id >= 1  -- ignore sysobjects

order by 
    class_desc desc
    ,USER_NAME(grantee_principal_id)
    ,CASE WHEN class = 0 THEN DB_NAME()
         WHEN class = 1 THEN isnull(schema_name(o.uid)+'.','')+OBJECT_NAME(major_id)
         WHEN class = 3 THEN SCHEMA_NAME(major_id) end
    ,permission_name

sql

sql-server-2005

permissions

2022-09-18T15:56:53+00:00
Вопросы с похожей тематикой, как у вопроса:

Как просмотреть все гранты для базы данных SQL?