usuarios usuario una tipos tiene tabla stored sobre rol porque permisos objeto existe encuentra datos dar asignar all sql-server sql-server-2005 tsql ssms

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 =

  1. Usuario de SQL
  2. Papel
  3. Grupo AD / Cuenta

Simplemente actualice el esquema dbo y configure agregue un permiso EXECUTE en este esquema al usuario / rol deseado.