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.
Voici les étapes pour appliquer des autorisations:
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?
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.
USE database_name;
GRANT EXECUTE TO [security_account];
N'oubliez pas les crochets :)
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
Le moyen le plus simple est de:
GRANT EXECUTE ON myproc TO x
où x =
Mettez simplement à jour le schéma dbo et définissez ajouter une autorisation EXECUTE sur ce schéma à l'utilisateur/rôle souhaité.