2010-02-19 4 views

Répondre

21

Jetez un coup d'œil à ce article. Cela peut vous fournir une idée intéressante pour le faire rapidement.

Code utilisé dans cet article:

/* Create a new role for executing stored procedures */ 
CREATE ROLE db_executor 

/* Grant stored procedure execute rights to the role */ 
GRANT EXECUTE TO db_executor 

/* Add a user to the db_executor role */ 
EXEC sp_addrolemember 'db_executor', 'AccountName' 
+0

Mais ce que @Peter a dit est essentiellement correct ... vous devrez accorder un nom d'utilisateur en exécutant des privilèges ... ce site vous donnera un moyen rapide de le faire. – Aaron

+0

C'est une belle solution! Vous avez mon vote ... –

2

Non, je ne crois pas qu'il y ait un rôle de base de données ou d'un serveur - vous devez accorder l'autorisation d'exécution granulairement à l'utilisateur pour les procédures stockées pertinentes.

+1

ou vous pourriez mettre les utilisateurs dans les rôles et accorder les droits de chaque proc au rôle plutôt que 1000 utilisateurs différents. – HLGEM

0

Pour développer la réponse, l'idée générale est de créer un rôle de base de données et attribuer des autorisations à ce rôle. Pour ce faire, vous avez besoin de SQL dynamique de fantaisie tels que:

Set @Routines = Cursor Fast_Forward For 
    Select ROUTINE_SCHEMA + '.' + ROUTINE_NAME, ROUTINE_TYPE, DATA_TYPE 
    From INFORMATION_SCHEMA.ROUTINES 
    Where ROUTINE_NAME NOT LIKE 'dt_%' 
     Or ROUTINE_TYPE = 'FUNCTION' 

Open @Routines 
Fetch Next From @Routines Into @Procname, @RoutineType, @DataType 

While @@Fetch_Status = 0 
Begin 
    Set @Msg = 'Procname: ' + @Procname + ', Type: ' + @RoutineType + ', DataType: ' + Coalesce(@DataType,'') 
    Raiserror(@Msg, 10, 1) WITH NOWAIT 

    If @RoutineType = 'FUNCTION' And @DataType = 'TABLE' 
     Set @SQL = 'GRANT SELECT ON OBJECT::' + @Procname + ' TO StoredProcedureDataReader' 
    Else 
     Set @SQL = 'GRANT EXECUTE ON OBJECT::' + @Procname + ' TO StoredProcedureDataReader' 

    exec(@SQL) 

    Fetch Next From @Routines Into @Procname, @RoutineType, @DataType 
End 

Close @Routines 
Deallocate @Routines

Ce code accordera EXECUTE aux procédures et fonctions scalaires stockées et SELECT à des fonctions définies par l'utilisateur qui renvoient un type TABLE.

2
CREATE ROLE db_executor 

GRANT EXECUTE TO db_executor 

Maintenant, si vous redémarrez SQL Server Management Studio, lorsque vous cliquez sur la page "User Mapping" dans la Sécurité-> Logins section, vous verrez "db_executor" apparaît dans la liste des rôles. Il suffit d'ajouter l'utilisateur ou vous pouvez le faire manuellement:

EXEC sp_addrolemember 'db_executor', 'AccountName' 
+1

Vous n'avez pas besoin de redémarrer SSMS pour voir le nouveau rôle. Faites un clic droit sur le dossier du conteneur Security-> Rôles du serveur et choisissez "Actualiser" – shahzbot

Questions connexes