2010-02-19 12 views

Respuesta

21

Echa un vistazo a este article. Puede proporcionarle una idea interesante para hacer esto rápidamente.

código utilizado en ese artículo:

/* 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

Pero lo que @Peter dijo es esencialmente correcto ... deberás otorgar un nombre de usuario para ejecutar privilegios ... este sitio te dará una forma rápida de hacerlo. – Aaron

+0

¡Esa es una solución encantadora! Obtuviste mi voto ... –

2

No, no creo que hay un papel base de datos o servidor - tiene que conceder el permiso de ejecución a granular el usuario para los procedimientos almacenados relevantes.

+1

o se puede poner a los usuarios en las funciones y conceder los derechos a cada proc para el papel en lugar de 1.000 usuarios diferentes personas. – HLGEM

0

Para ampliar la respuesta, la idea general es crear un papel base de datos y asignar permisos a ese papel. Con el fin de hacer eso, necesita un poco de SQL dinámico de fantasía tales como:

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

Este código otorgará EXECUTE para procedimientos almacenados y funciones escalares y SELECT a las funciones definidas por el usuario que devuelven un tipo de tabla.

2
CREATE ROLE db_executor 

GRANT EXECUTE TO db_executor 

Ahora, si reinicia SQL Server Management Studio, al hacer clic en la página "correspondencia de usuario" en el Seguridad-> inicios de sesión sección, verá "db_executor" aparecerá en la lista de funciones. Sólo tiene que añadir el usuario o puede hacerlo de forma manual:

EXEC sp_addrolemember 'db_executor', 'AccountName' 
+1

No necesitas reiniciar SSMS para ver el nuevo rol. Simplemente haga clic derecho en la carpeta del contenedor Security-> Roles del servidor y elija "Refresh" – shahzbot

Cuestiones relacionadas