2011-02-24 17 views
5

Como sugiere el título, debo otorgar el permiso de ejecución en cada procedimiento almacenado en una base de datos. Pasamos de la prueba a la producción y tenemos menos control sobre la base de datos de producción ... y todos los procedimientos almacenados importados obtuvieron cero permisos en este momento. Una cosa interesante de saber es si hay alguna forma de asegurarse de que todos los procedimientos almacenados importados obtengan permisos de ejecución desde el principio.Concesión de permiso de ejecución en todos los procedimientos almacenados en una determinada base de datos

Gracias por cualquier ayuda.

Respuesta

6

generar las declaraciones, luego copiar y pegar en la ventana de consulta para ejecutarlos

select 'grant execute on ' + 
    QuoteName(specific_schema) + '.' + 
    QuoteName(specific_name) + ' to someone' 
from information_schema.routines 
where routine_type='PROCEDURE' 
+0

Podría explicar lo que entiende por "generar las sentencias"? – Phil

+0

Ah, no importa, creo que sé qué hacer ahora – Phil

+0

Gracias, eso fue simplemente ... hermoso – Phil

9

Así como la concesión de permisos, se debe considerar esquemas.

Así que sus procedimientos almacenados se nombran en el esquema Proc

  • Procs.DoStuff
  • Procs.DoMoreStuff
  • Procs.WriteStuff

A continuación, puede GRANT EXECUTE ON SCHEMA::Procs TO RoleWhatever. Todos los procedimientos almacenados creados en Procs luego heredan EXECUTE permisos

RoleLo que podría ser un rol de soporte en producción pero un rol de desarrollador en otros entornos.

+0

Ejemplo de sql para hacer esto aquí: http://stackoverflow.com/a/19119243/150342 – Colin

4

Tiene que conceder el permiso de ejecución en el esquema y repetir si tienes varios esquemas

grant execute on schema :: yourschema to username 
Cuestiones relacionadas