sql server - usuario - Forma rápida de otorgar permisos de Exec al rol de base de datos para muchos procesos almacenados
no se encuentra el objeto porque no existe o no tiene permisos (5)
Considere el escenario donde una base de datos tiene un rol de base de datos SQL o rol de aplicación. La tarea es otorgar permisos de ejecución a n procedimientos almacenados.
Al utilizar SQL Management Studio, hay una buena pantalla para ayudar a aplicar permisos a los objetos para un Rol.
SQL Management Studio http://i26.tinypic.com/2r5g6c3.png
Estos son los pasos para aplicar permisos:
- seleccione el objeto que desea otorgar / denegar permisos en la lista de Elementos de seguridad .
- navegue a la lista de permisos explícitos a continuación.
- seleccione la casilla de verificación Otorgar o Denegar según corresponda.
Repite lo anterior para n objetos. ¡Enciende algo de música para mantenerte entretenido mientras haces esto por más de 100 objetos! ¡Tiene que haber una mejor manera! Es un clickfest de grandes proporciones.
Pregunta :
¿Hay una manera más rápida de realizar esta tarea usando SQL Server Management Studio 2005? ¿Quizás otra herramienta GUI (preferiblemente gratuita)?
¿Alguna sugerencia para crear scripts T-SQL para realizar esta tarea automáticamente? es decir, crear una tabla de todos los nombres de procedimientos almacenados, bucle, y aplicar los permisos de ejecución?
Esto debería hacerlo:
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)
Esto es inyectable como diablos, así que guárdalo para uso exclusivo del administrador.
Solo quiero agregar que la sugerencia de Remus de usar esquemas es el enfoque preferido, donde eso es factible.
puedes hacer esto, sin embargo, no estoy completamente seguro de cuán seguro es esto.
/* CREATE A NEW ROLE */
CREATE ROLE db_executor
/* GRANT EXECUTE TO THE ROLE */
GRANT EXECUTE TO db_executor
USE database_name;
GRANT EXECUTE TO [security_account];
No te olvides de los corchetes :)
La forma más fácil es:
GRANT EXECUTE ON myproc TO x
donde x =
- Usuario de SQL
- Papel
- Grupo AD / Cuenta
Simplemente actualice el esquema dbo y configure agregue un permiso EXECUTE en este esquema al usuario / rol deseado.