2010-01-07 3 views

ответ

8
SELECT 
    OBJECT_NAME(major_id), USER_NAME(grantee_principal_id), permission_name 
FROM 
    sys.database_permissions p 
WHERE 
    p.class = 1 AND 
    OBJECTPROPERTY(major_id, 'IsMSSHipped') = 0 
ORDER BY 
    OBJECT_NAME(major_id), USER_NAME(grantee_principal_id), permission_name 
+0

Есть ли у вас версия SQL 2000 этого кода? –

+0

Можно ли отфильтровать это, чтобы добавить столбец, в котором указан тип объекта? то есть таблицу, представление, хранимую процедуру и т. д.? – Adam

2

Вот еще один, который я использую для рефакторинга, обновлений или резервных копий базы данных. Он также поддерживает разрешения на уровне столбцов. Это утверждение генерирует утверждения GRANT. Но его довольно легко адаптировать.

SELECT 'GRANT ' + database_permissions.permission_name + ' ON ' + 
    CASE database_permissions.class_desc 
     WHEN 'SCHEMA' THEN schema_name(major_id) 
     WHEN 'OBJECT_OR_COLUMN' THEN 
      CASE WHEN minor_id = 0 THEN object_name(major_id) COLLATE Latin1_General_CI_AS_KS_WS 
      ELSE (SELECT object_name(object_id) + ' ('+ name + ')' 
        FROM sys.columns 
        WHERE object_id = database_permissions.major_id 
        AND column_id = database_permissions.minor_id) end 
     ELSE 'other' 
    END + 
    ' TO ' + database_principals.name COLLATE Latin1_General_CI_AS_KS_WS 
FROM sys.database_permissions 
JOIN sys.database_principals 
ON database_permissions.grantee_principal_id = database_principals.principal_id 
LEFT JOIN sys.objects -- consider schemas 
ON objects.object_id = database_permissions.major_id 
WHERE database_permissions.major_id > 0 
AND permission_name in ('SELECT','INSERT','UPDATE','DELETE') 

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

  • Нет связанных вопросов^_^