Быстрый способ предоставления разрешений Exec роли БД для многих хранимых процедур - PullRequest
22 голосов
/ 09 июля 2009

Рассмотрим сценарий, в котором база данных имеет роль базы данных SQL или роль приложения. Задача состоит в том, чтобы предоставить разрешения «Выполнение» для n хранимых процедур.

При использовании SQL Management Studio есть хороший экран, чтобы помочь применить разрешения к объектам для роли.

SQL Management Studio

Вот шаги для применения разрешений:

  • выберите объект, который вы хотите предоставить / запретить разрешения в списке Securables .
  • перейдите к списку Явных разрешений ниже.
  • установите флажок «Предоставить» или «Запретить» в зависимости от ситуации.

Повторите вышеуказанное для n объектов. Запустите музыку, чтобы развлечь себя, делая это для более 100 объектов! Должен быть лучший способ! Это кликфест основных пропорций.

Вопрос :

Есть ли более быстрый способ выполнить эту задачу с помощью SQL Server Management Studio 2005? Возможно, другой инструмент с графическим интерфейсом (желательно бесплатный)?

Есть предложения по созданию сценариев T-SQL для автоматического выполнения этой задачи? создать таблицу со всеми именами хранимых процедур, выполнить цикл и применить разрешения exec?

Ответы [ 5 ]

32 голосов
/ 28 декабря 2011
USE database_name;
GRANT EXECUTE TO [security_account];

Не забудьте про скобки:)

16 голосов
/ 30 июля 2009

вы можете сделать это, однако я не совсем уверен, насколько это безопасно.

/* CREATE A NEW ROLE */
CREATE ROLE db_executor

/* GRANT EXECUTE TO THE ROLE */
GRANT EXECUTE TO db_executor
11 голосов
/ 30 июля 2009

Это должно сделать это:

CREATE PROC SProcs_GrantExecute( 
    @To AS NVARCHAR(255)
    , @NameLike AS NVARCHAR(MAX)
    , @SchemaLike as NVARCHAR(MAX) = N'dbo'
    ) AS
/*
 Proc to Authorize a role for a whole bunch of SProcs at once
*/
DECLARE @sql as NVARCHAR(MAX)
SET @sql = ''

SELECT @sql = @sql + '
 GRANT EXECUTE ON OBJECT::['+ROUTINE_SCHEMA+'].['+ROUTINE_NAME+'] TO '+@To+';'
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_NAME LIKE @NameLike
 AND ROUTINE_SCHEMA LIKE @SchemaLike

PRINT @sql
EXEC(@sql)

Это инъекционно как черт, так что оставляйте его только для использования администратором.


Я просто хочу добавить, что предложение Ремуса использовать схемы является предпочтительным подходом, когда это возможно.

4 голосов
/ 09 июля 2009

Самый простой способ:

GRANT EXECUTE ON myproc TO x

где х =

  1. Пользователь SQL
  2. Роль
  3. Группа AD / Аккаунт
2 голосов
/ 29 октября 2014

Просто обновите схему dbo и установите разрешение EXECUTE для этой схемы для нужного пользователя / роли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...