validar usuarios usuario tutorial permisos net mvc espaƱol control contraseƱa autenticacion asp asp.net security sql-server-2008 stored-procedures user-defined-types

asp.net - tutorial - usuarios roles y permisos c# mvc



El permiso EXECUTE se deniega en los tipos de tabla definidos por el usuario? (2)

Realmente espero que ya hayas resuelto esto, ya que la pregunta tiene casi 4 meses, pero en caso de que no lo hayas, esta es la respuesta que creo yo.

GRANT EXEC ON TYPE::[schema].[typename] TO [User] GO

Tengo una pregunta sobre los tipos de tabla definidos por el usuario en SQL Server 2008.

Para la necesidad de una aplicación ASP.NET, definimos nuestros propios tipos de tabla en SQL Server 2008 para usarlos como parámetros en los procedimientos almacenados (al ejecutar el comando sql en la aplicación ASP.NET pasamos el objeto DataTable como parámetro para el procedimiento almacenado) mira aquí para un ejemplo )

El problema es que cuando ejecutamos el comando Sql (ejecutar procedimiento almacenado) desde ASP.NET obtenemos un error:

El permiso EXECUTE fue denegado en el objeto ''ourTableType'', base de datos ''ourDatabase'', esquema ''ourSchema''.

¿Por qué es así? ¿Por qué tenemos que establecer el permiso en los tipos de tabla definidos por el usuario? ¿Por qué no es suficiente tener un permiso establecido solo en el procedimiento almacenado que lo usa? Y si tenemos que configurarlo sin importar qué, ¿por qué no hay ningún tipo de permiso EXECUTE para establecer en la ventana de propiedades en absoluto (solo puedo ver Control , References , Take Ownership , View Definition )?

Lo que tampoco entiendo es que al configurar el permiso para Control en la ventana de propiedades se resuelve el problema y el procedimiento almacenado se ejecuta sin problemas.


Si su procedimiento almacenado está utilizando sql dinámico, lo que significa que @sql se genera y luego se ejecuta a través de exec @sql , necesitará permiso otorgado en las tablas subyacentes.

Una solución temporal es modificar el procedimiento almacenado para ejecutarlo como un usuario diferente . Si lo haces funcionar como SELF, se ejecutará debajo del creador del proceso almacenado, que es extremadamente peligroso. Aún así, si no tienes otra opción:

CREATE PROCEDURE dbo.usp_Demo WITH EXECUTE AS SELF