Подтвердить что ты не робот

Быстрый способ предоставить разрешения Exec для роли БД для многих хранимых процессов

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

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

SQL Management Studio

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

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

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

Вопрос:

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

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

4b9b3361

Ответ 1

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

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 '[email protected]+';'
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_NAME LIKE @NameLike
 AND ROUTINE_SCHEMA LIKE @SchemaLike

PRINT @sql
EXEC(@sql)

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


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

Ответ 2

USE database_name;
GRANT EXECUTE TO [security_account];

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

Ответ 3

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

/* CREATE A NEW ROLE */
CREATE ROLE db_executor

/* GRANT EXECUTE TO THE ROLE */
GRANT EXECUTE TO db_executor

Ответ 4

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

GRANT EXECUTE ON myproc TO x

где x =

  • Пользователь SQL
  • Роль
  • Группа AD/учетная запись

Ответ 5

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