Создать роль базы данных, чтобы разрешить доступ на чтение ко всем таблицам; доступ для записи к некоторым

9

У нас есть база данных с более чем 1000 таблицами. Мне нужно создать роль, которая позволяет только чтение для всех таблиц, а также доступ на запись в две конкретные таблицы.

Я возился с ролями базы данных, но всякий раз, когда я прибегал к добавлению таблиц, мне приходилось вручную выбирать все 1000 ... есть ли лучший способ сделать это?

Wes
источник
Это на самом деле может быть самый простой способ ... Есть ли способ написать это? Мне нужно сохранить набор сценариев, чтобы, когда бы мы ни обновляли одну из этих баз данных, я мог немедленно восстановить все настройки.
Уэс

Ответы:

9

Предоставление разрешений на схему (например dbo) будет каскадным для всех объектов в этой схеме. Для отдельных исключений вы можете просто перечислить их в явном виде:

GRANT SELECT ON SCHEMA::dbo TO [role];
GO

GRANT INSERT, UPDATE --, DELETE
  ON dbo.table_they_can_write_to TO [role];

DENY SELECT ON dbo.table_they_cannot_read TO [role];
Аарон Бертран
источник
3
Достаточно просто. Рад, что у нас есть такое сообщество.
Уэс
1

Попробуй это :

EXEC sp_MSForEachTable 'GRANT INSERT, UPDATE ON ? to [ROLE]'
Друзин
источник
3
К вашему сведению, это дает право на запись, но не на чтение всех таблиц, а также полностью игнорирует схему. Также sp_MSForEachTableнедокументирован, не поддерживается и, возможно, страдает теми же проблемами пропуска, что иsp_MSForEachDB .
Аарон Бертран