Быстрый способ предоставить разрешения Exec для роли БД для многих хранимых процессов
Рассмотрим сценарий, в котором база данных имеет роль базы данных SQL или роль приложения. Задача - предоставить разрешения на выполнение n хранимым процедурам.
При использовании SQL Management Studio появляется хороший экран, чтобы помочь применить разрешения к объектам для роли.
![SQL Management Studio]()
Вот шаги для применения разрешений:
- выберите объект, который вы хотите предоставить/запретить разрешения в списке защищаемых объектов.
- перейдите к списку явных разрешений ниже.
- установите флажок "Предоставить" или "Запретить" в зависимости от ситуации.
Повторите вышеуказанное для n объектов. Включите музыку, чтобы развлечь себя, делая это для 100+ объектов! Должен быть лучший способ! Это кликфест основных пропорций.
Вопрос:
Есть ли более быстрый способ выполнить эту задачу с помощью SQL Server Management Studio 2005? Возможно другой инструмент GUI (желательно бесплатный)?
Есть предложения по созданию сценариев T-SQL для автоматического выполнения этой задачи? т.е. создать таблицу всех имен хранимых процедур, цикл и применить разрешения exec?
Ответы
Ответ 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 к требуемой пользователю/роли.