Tengo una base de datos donde todo el acceso se controla mediante procedimientos almacenados. Al DBA le gustaría evitar que los usuarios tengan acceso directo de lectura/escritura a las tablas subyacentes, lo que puedo entender. Por lo tanto, todas las actualizaciones y selecciones de datos se realizan a través de procedimientos almacenados. Básicamente, ha creado un rol que tiene permisos de EJECUTAR para todos los procedimientos almacenados en la base de datos y le otorga a los usuarios ese rol.Permisos al usar "Ejecutar sp_Executesql"
El problema es que uno de los procedimientos almacenados crea dinámicamente una consulta SQl y la ejecuta mediante "Execute sp_Executesql". Sin entrar en gran detalle, la consulta se genera dinámicamente porque cambia significativamente dependiendo de muchos parámetros de entrada del usuario. El procedimiento almacenado en cuestión es solo una instrucción SELECT sql; sin embargo, estoy descubriendo que simplemente dar al procedimiento almacenado el permiso EXECUTE no es suficiente. Las tablas subyacentes a las que se hace referencia dentro del procedimiento almacenado que utilizan "Execute sp_Executesql" deben tener acceso de "lector de datos" o el procedimiento almacenado falla.
¿Alguna idea sobre cómo corregir esto? Realmente quería restringir el acceso a las tablas solo a los procedimientos almacenados, pero necesito encontrar una forma de evitar los procedimientos almacenados que hacen uso de "Execute sp_Executesq" l. Gracias.
se puede lograr mejores serverfault avdice. Mi consejo: habla con el dba y explica la situación. Trabaja con ellos para obtener los permisos correctos. –