web-dev-qa-db-fra.com

Moyen rapide d'accorder des autorisations Exec au rôle de base de données pour de nombreux processus stockés

Considérez le scénario où une base de données a un rôle de base de données SQL ou un rôle d'application. La tâche consiste à accorder des autorisations d'exécution aux procédures stockées n.

Lorsque vous utilisez SQL Management Studio, il y a un écran agréable pour aider à appliquer des autorisations aux objets pour un rôle.

SQL Management Studio

Voici les étapes pour appliquer des autorisations:

  • sélectionnez l'objet auquel vous souhaitez accorder/refuser des autorisations dans la liste Securables.
  • accédez à la liste Autorisations explicites ci-dessous.
  • cochez la case Accorder ou refuser selon le cas.

Répétez ce qui précède pour n objets. Lancez de la musique pour vous divertir en faisant cela pour plus de 100 objets! Il doit y avoir une meilleure façon! C'est un clickfest de proportions majeures.

Question :

Existe-t-il un moyen plus rapide d'effectuer cette tâche à l'aide de SQL Server Management Studio 2005? Peut-être un autre outil GUI (de préférence gratuit)?

Des suggestions pour créer des scripts T-SQL pour effectuer automatiquement cette tâche? c'est-à-dire créer une table de tous les noms de procédures stockées, boucler et appliquer les autorisations d'exécution?

22
p.campbell

Cela devrait le faire:

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)

Ceci est injectable comme diable, alors conservez-le uniquement pour l'administrateur.


Je veux juste ajouter que la suggestion de Remus d'utiliser des schémas est l'approche préférée, lorsque cela est réalisable.

11
RBarryYoung
USE database_name;
GRANT EXECUTE TO [security_account];

N'oubliez pas les crochets :)

32
user1090467

vous pouvez le faire, mais je ne suis pas tout à fait sûr de la sécurité.

/* CREATE A NEW ROLE */
CREATE ROLE db_executor

/* GRANT EXECUTE TO THE ROLE */
GRANT EXECUTE TO db_executor
16
Jack Marchetti

Le moyen le plus simple est de:

GRANT EXECUTE ON myproc TO x

où x =

  1. Utilisateur SQL
  2. Rôle
  3. Groupe/compte AD
4
Rabbit

Mettez simplement à jour le schéma dbo et définissez ajouter une autorisation EXECUTE sur ce schéma à l'utilisateur/rôle souhaité.

2
ZooZ