В SQL Server роли используются для группировки пользователей базы данных и назначения им разрешений. В предыдущей статье мы обсудили роль Public и ее потенциальные проблемы. В этой статье мы рассмотрим четыре фиксированные роли базы данных: db_datareader, db_datawriter, db_denydatareader и db_denydatawriter.
Обзор фиксированных ролей базы данных
Вот краткий обзор того, что делает каждая фиксированная роль базы данных:
- db_datareader: Предоставляет выборочный доступ ко всем таблицам пользователей
- db_datawriter: Предоставляет доступ на вставку, обновление и удаление ко всем таблицам пользователей
- db_denydatareader: Запрещает выборочный доступ ко всем таблицам пользователей
- db_denydatawriter: Запрещает доступ на вставку, обновление и удаление ко всем таблицам пользователей
Эти роли могут быть чрезвычайно полезны при эффективном управлении разрешениями. Давайте вернемся к сценарию из предыдущей статьи: вы разработали приложение, которому требуются разрешения на выборку, вставку и удаление для всех таблиц. Вместо явного назначения разрешений для каждой таблицы вы можете использовать фиксированные роли:
- Добавьте группу Everyone в качестве пользователя базы данных
- Добавьте группу Everyone в качестве члена роли db_datareader
- Добавьте группу Everyone в качестве члена роли db_datawriter
Используя фиксированные роли, вы можете сэкономить время и усилия по сравнению с явным назначением разрешений для каждой таблицы.
Управление доступом подрядчика
Теперь рассмотрим сценарий, когда вам необходимо предоставить доступ к домену подрядчику, но ограничить его доступ к базе данных. Используя фиксированные роли, вы можете легко справиться с этим:
- Добавьте подрядчика в базу данных в качестве пользователя
- Добавьте подрядчика в роль db_denydatareader
- Добавьте подрядчика в роль db_denydatawriter
Снова использование ролей db_denydatareader и db_denydatawriter упрощает процесс по сравнению с созданием новой роли специально для подрядчика и установкой разрешений (DENY в данном случае) для каждой таблицы пользователя.
Соображения и ограничения
Хотя фиксированные роли предлагают удобство, есть несколько вещей, которые следует учесть:
- Фиксированные роли не предоставляют детализированных разрешений. Если вам нужно предоставить или запретить доступ только к нескольким таблицам пользователей, вам потребуется создать дополнительные роли для переопределения фиксированных ролей.
- Членство в одной из фиксированных ролей применяется ко всем существующим таблицам пользователей и любым таблицам, созданным в будущем. Это может быть выгодно или проблематично в зависимости от ваших требований. Если вы обнаружите, что создаете много исключений, может быть более эффективно создать конкретные роли для каждой ситуации и явно назначать разрешения.
Если вы хотите узнать больше о фиксированных ролях базы данных, вы можете использовать несколько хранимых процедур:
- sp_helpdbfixedrole: Отображает список фиксированных ролей
- sp_dbfixedrolepermission: Отображает разрешения для каждой фиксированной роли
- sp_addrolemember: Используется для добавления пользователя базы данных в роль
- sp_droprolemember: Используется для удаления пользователя базы данных из роли
Если у вас есть вопросы или комментарии, не стесняйтесь писать мне по электронной почте!