Me gustaría configurar un usuario "lector" en mi instancia de SQL Server 2012. Me gustaría otorgarle el derecho de ejecutar cualquier procedimiento almacenado, función o instrucción SQL directa, que recupere datos de todas las tablas y vistas, pero no actualizar o insertar (es decir, leer cualquier cosa y no escribir nada).
¿Puedo configurar esto sin dar específicamente derechos a cada función o procedimiento almacenado por nombre, sino más bien otorgarle el derecho de ejecución en cualquier función o procedimiento almacenado, simplemente quitando el derecho de modificar tablas?
¿Cambiará algo si ejecuto SQL Server 2008 en su lugar?
Aclaraciones y adiciones:
- Si un procedimiento almacenado cambia datos, el usuario debe recibir un mensaje de error (ya sea negando la modificación o rechazando el acceso al procedimiento almacenado por completo).
- Si una posible solución implica negar permisos, ¿no puedo otorgar ciertos permisos en lugar de negarlos?
- ¿Se puede aplicar una denegación en todas las tablas, vistas, etc. (existentes ahora y en el futuro) en la base de datos en una sola declaración?
GRANT
otorgar permisos, DENY
denegar permisos y REVOKE
eliminar un GRANT
o DENY
. Sin GRANT
o DENY
el usuario puede heredar permisos, digamos al obtener acceso a un procedimiento almacenado.
DENY DELETE, INSERT, UPDATE
en una base de datos o esquema, creo que solo afectará las tablas y las vistas.