Быстрый способ дать Исполнительные разрешения к роли DB для многих сохранил procs

Поскольку первый пример действительно эквивалентен:

public DoStuff(int level)
{  
  // ...
  int temp = level;
  level = level + 1;
  DoStuff(temp);
  // ...
}

Записка, которую можно также написать ++ уровень; это было бы эквивалентно:

public DoStuff(int level)
{  
  // ...
  level = level + 1;
  DoStuff(level);
  // ...
}

лучше не злоупотребить ++ и - операторы, по-моему; это быстро становится сбивающим с толку и/или неопределенным, что действительно происходит, и современные компиляторы C++ не генерируют более эффективный код с этими операторами так или иначе.

23
задан Glorfindel 27 March 2019 в 17:59
поделиться

3 ответа

Это должно сработать:

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)

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


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

11
ответ дан 29 November 2019 в 01:02
поделиться

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

GRANT EXECUTE ON myproc TO x

где x =

  1. Пользователь SQL
  2. Роль
  3. Группа / учетная запись AD
4
ответ дан 29 November 2019 в 01:02
поделиться

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

/* CREATE A NEW ROLE */
CREATE ROLE db_executor

/* GRANT EXECUTE TO THE ROLE */
GRANT EXECUTE TO db_executor
17
ответ дан 29 November 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: