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

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

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

SQL Management Studio

Вот шаги, чтобы применить разрешения:

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

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

Вопрос:

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

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


person p.campbell    schedule 08.07.2009    source источник
comment
Рассматривали ли вы, чтобы все процедуры были в одной схеме, а затем разрешили выполнение в указанной схеме?   -  person Remus Rusanu    schedule 09.07.2009
comment
Вот почему инструменты с графическим интерфейсом пользователя и полагаться на них - отстой.   -  person RBarryYoung    schedule 30.07.2009


Ответы (5)


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

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)

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


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

person RBarryYoung    schedule 29.07.2009
comment
Огромный! Вы только что сэкономили этому младшему программисту много времени. Спасибо! - person onefootswill; 17.09.2012
comment
Похоже, перебор! - person mok; 12.12.2016

USE database_name;
GRANT EXECUTE TO [security_account];

Не забываем про скобки :)

person Community    schedule 28.12.2011
comment
Как я могу проверить это в SSMS Gui или через TSQL? - person nojetlag; 31.01.2014

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

/* CREATE A NEW ROLE */
CREATE ROLE db_executor

/* GRANT EXECUTE TO THE ROLE */
GRANT EXECUTE TO db_executor
person Jack Marchetti    schedule 30.07.2009

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

GRANT EXECUTE ON myproc TO x

где x =

  1. Пользователь SQL
  2. Роль
  3. Группа / Учетная запись AD
person Community    schedule 09.07.2009

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

person ZooZ    schedule 29.10.2014