В SQL Server 2005 есть простой способ «копировать» разрешения на объект от одного пользователя / роли к другому? - PullRequest
2 голосов
/ 16 декабря 2008

Я задал другой вопрос о ролях и разрешениях, который в основном служил для выявления моего невежества. Одним из других результатов был совет, что обычно следует избегать взлома с разрешениями для «публичной» роли.

Хорошо, хорошо, но если я уже сделал это и хочу переназначить те же разрешения для настраиваемой / «гибкой» роли, каков наилучший способ сделать это? До сих пор я запускал мастер сценариев и велел ему разрешать сценарии доступа к объектам без CREATE или DROP, а затем выполнял поиск-замену, чтобы у меня было много "GRANT DELETE on [dbo.tablename] TO [newRole]". Это делает работу, но я чувствую, что это может быть красивее / проще. Любые предложения по "лучшей практике"?

Ответы [ 2 ]

6 голосов
/ 17 декабря 2008

Работая из памяти (без SQL на моем игровом 'pooter), вы можете использовать sys.database_permissions

Запустите это и вставьте результаты в новый запрос.

Редактировать, январь 2012 г. Добавлено OBJECT_SCHEMA_NAME.
Вам может понадобиться развернуть его для поддержки схем (dbo.), Присоединившись к sys.objects

SET NOCOUNT ON;
DECLARE @NewRole varchar(100), @SourceRole varchar(100);

-- Change as needed
SELECT @SourceRole = 'Giver', @NewRole = 'Taker';

SELECT
    state_desc + ' ' + 
          permission_name + ' ON ' + 
          OBJECT_SCHEMA_NAME(major_id) + '.' + OBJECT_NAME(major_id) +
          ' TO ' + @NewRole
FROM
    sys.database_permissions
WHERE
    grantee_principal_id = DATABASE_PRINCIPAL_ID(@SourceRole) 
    AND
    -- 0 = DB,  1 = object/column, 3 = schema. 1 is normally enough
    class <= 3;
1 голос
/ 17 декабря 2008

Идея наличия роли заключается в том, что вам нужно настроить разрешения только один раз. Затем вы можете назначить пользователей или группы пользователей на эту роль.

Также возможно вложение ролей, чтобы роль могла содержать другие роли.

Не уверен, что это лучший метод, но имеет смысл, что если у вас есть сложный набор разрешений, с группами пользователей, которым нужен доступ к нескольким приложениям, вы получите что-то вроде:

Пользователь NT -> Группа безопасности NT -> Роль SQL Server -> Роль SQL Server A, Роль B ...

...