Tengo una base de datos de SQL Server 2008 donde todo el acceso a las tablas subyacentes se realiza a través de procedimientos almacenados. Algunos procedimientos almacenados simplemente SELECCIONAN registros de las tablas mientras que otros ACTUALIZAN, INSERTAN y ELIMINAN.Procedimiento almacenado y permisos: ¿es suficiente EJECUTAR?
Si un procedimiento almacenado ACTUALIZA una tabla, ¿el usuario que ejecuta el procedimiento almacenado también necesita permisos de ACTUALIZACIÓN para las tablas afectadas o es el hecho de que tienen permisos de EJECUTAR el procedimiento almacenado lo suficiente?
Básicamente me pregunto si dar al usuario permisos de EJECUTAR a los procedimientos almacenados es suficiente o si tengo que darles SELECCIONAR, ACTUALIZAR, ELIMINAR e INSERTAR permisos a las tablas para que funcionen los procedimientos almacenados. Gracias.
[EDIT] En la mayoría de mis procedimientos almacenados, de hecho parece que EXECUTE es suficiente. Sin embargo, encontré que en procedimientos almacenados donde se usaba "Execute sp_Executesql", EXECUTE no era suficiente. Las tablas involucradas deben tener permisos para las acciones que se realizan dentro de "sp_Executesql".
Me temo que al usar consultas SQL dinámicas tendrá que otorgar permisos sobre el objeto subyacente. He actualizado la respuesta para reflejar eso. –
@Noel - Estás en lo cierto. Descubrí que necesitaba permitir el acceso del lector de datos a las tablas para los usuarios. Afortunadamente, ese no era un problema para mi situación, ya que a todos los usuarios se les permitía ver todos los datos. – webworm
En otra respuesta, @RemusRusanu vincula a una alternativa: 1) Crear un certificado; 2) Crear un usuario asociado con ese certificado; 3) Conceder a ese usuario los derechos apropiados [a los recursos protegidos]; y 4) Firme el sproc con el certificado, cada vez que cambie el sproc (stackoverflow.com/a/4081604/6894566, vinculándolo a: sommarskog.se/grantperm.html#Certificates). La firma agrega los derechos de usuario del certificado al token de usuario actual, que SQL Server preserva al llamar a los procedimientos del sistema y al SQL dinámico invocado a través de EXEC() o sp_executesql. Entonces el sproc tiene éxito. – iokevins