Tengo problemas para ejecutar una función.
Esto es lo que hice:
- Cree una función con SQL Server Management Studio. Fue creado con éxito.
- Luego intenté ejecutar la función recién creada y esto es lo que obtengo:
El permiso EXECUTE fue denegado en el objeto 'xxxxxxx', base de datos 'zzzzzzz', esquema 'dbo'.
sql-server
Upendra Parmar
fuente
fuente
GO
yCreate
enGOCreate
. Otros errores de sintaxis también parecen dar este error.Respuestas:
Parece que necesita otorgar el permiso de ejecución al usuario (o un grupo del que forman parte) para el procedimiento almacenado en cuestión.
Por ejemplo, podría otorgar acceso así:
fuente
GRANT EXEC TO PUBLIC
para otorgar acceso a todos los objetos en la base de datosLa mejor solución que encontré es crear un nuevo rol de base de datos, es decir
y luego otorgue a ese rol permiso ejecutivo.
Ahora, cuando vaya a las propiedades del usuario, vaya a Asignación de usuario y seleccione la base de datos donde ha agregado una nueva función, ahora la nueva función será visible en la membresía de la función de base de datos para: sección
Para más detalles lea el artículo completo
fuente
EXEC sp_addrolemember @rolename = N'db_executor', @membername = N'processAPI'
En SQL Server Management Studio:
solo ve a
security->schema->dbo
.Haga doble clic en dbo, luego haga clic en
permission tab->(blue font)view database permission
y siéntase libre de desplazarse por los campos obligatorios como"execute".
Ayudarse a sí mismo para elegir usargrant
odeny
controles. Espero que esto ayude :)fuente
necesitas ejecutar algo como esto
fuente
[domain\user]
lugar de'domain\user'
Esto funcionará si está intentando otorgar permiso a usuarios o roles.
Usando Microsoft SQL Server Management Studio:
fuente
Dar ese permiso puede ser peligroso, especialmente si su aplicación web usa ese mismo nombre de usuario.
Ahora el usuario web (y toda la red mundial) también tiene permiso para crear y soltar objetos dentro de su base de datos. Piensa en la inyección SQL!
Recomiendo otorgar privilegios de ejecución solo al usuario específico en el objeto dado de la siguiente manera:
Ahora el usuario myusernameNoquotes puede ejecutar el procedimiento almacenadoProcedureNameNoquotes sin otros permisos innecesarios a sus datos valiosos.
fuente
No tiene derecho a ejecutarlo, aunque tiene permisos suficientes para crearlo.
Para obtener más información, vea Permisos de objeto GRANT (Transact-SQL)
fuente
Si tiene problemas como la pregunta anterior con respecto a la excepción lanzada cuando se ejecuta la solución, el problema es el permiso, no otorgado adecuadamente a los usuarios de ese grupo para acceder a la base de datos / procedimiento almacenado. Todo lo que necesita hacer es hacer algo como lo que tengo a continuación, reemplazando el mío con el nombre de su base de datos, los procedimientos almacenados (función) y el tipo de permiso o función o a quién le está otorgando el acceso.
/ ****** Objeto: StoredProcedure [dbo]. [GetAllEmployees] Fecha del script: 27/01/2016 16:27:27 ****** /
fuente
Puede dar permiso a todos para ejecutar:
"Público" es la función de base de datos predeterminada de la que todos los usuarios son miembros.
fuente
Me he enfrentado al mismo problema y lo resolví dando permiso a db_owner también para el usuario de la base de datos.
fuente
Si hace que este usuario sea especial para una base de datos específica, tal vez no lo configure como db_owner en la "asignación de usuario" de propiedades
fuente
será mejor que modifique las funciones del servidor, que fue diseñado para privilegios de seguridad. agregue el rol de servidor sysadmin a su usuario. para una mejor seguridad, puede tener sus roles de servidor personalizados. pero este enfoque te dará lo que quieres por ahora.
Buena suerte
fuente
A continuación, le mostramos cómo dar permiso a un usuario que no sea público,
Consulta directa:
Use MyDatabase Grant execute on [dbo].[My-procedures-name] to [IIS APPPOOL\my-iis-pool] Go
fuente