2010-09-14 74 views
116

Tengo problemas para ejecutar una función.El permiso EXECUTE fue denegado en el objeto 'xxxxxxx', base de datos 'zzzzzzz', esquema 'dbo'

Aquí es lo que hice:

  1. crear una función utilizando SQL Server Management Studio. Fue creado con éxito.
  2. Luego trató de ejecutar la función de nueva creación, y esto es lo que me sale:

el permiso de ejecución fue denegada el el objeto 'xxxxxxx', la base de datos 'zzzzzzz', esquema 'dbo'.

+0

Lo contesté en este acoplamiento: http://stackoverflow.com/questions/3708759/the-execute-permission-was-denied-on- the-object-zzzzzz-database-xxxxxx-schem/26589377 # 26589377 –

+0

Si tiene el rol db_owner, el usuario puede ejecutar también (no es igual a otorgar a exec ...) – hazjack

+0

Recibí este error cuando había un error de sintaxis en mi SQL Declaración. Esencialmente, había combinado 'GO' y' Create' en 'GOCreate'. Otros errores de sintaxis también parecen dar este error. –

Respuesta

125

Parece que debe otorgar el permiso de ejecución al usuario (o un grupo del que forma parte) para el procedimiento almacenado en cuestión.

Por ejemplo, usted podría acceso concesión de este modo:

USE zzzzzzz; 
GRANT EXEC ON dbo.xxxxxxx TO PUBLIC 
+2

Hola, sé que fue hace un tiempo, pero tengo una pregunta. ¿Podría tal acción tener algunos problemas de seguridad? ¿Abre sp para ser utilizado por todos? –

+7

Sí, permite que cualquiera que tenga una conexión con el DB ejecute el procedimiento almacenado. Esperaría que las personas preocupadas por la seguridad otorguen acceso al ** grupo relevante en * su * base de datos **. –

+7

También puede usar 'GRANT EXEC TO PUBLIC' para otorgar acceso a todos los objetos en la base de datos – sohaiby

37

necesita ejecutar algo como esto

GRANT Execute ON [dbo].fnc_whatEver TO [domain\user] 
+2

Esto era lo que necesitaba, pero tenía que hacer '[dominio \ usuario]' 'en lugar de" dominio \ user'' –

2

me he enfrentado el mismo problema y lo resolvió dar permiso db_owner como también para el usuario de base de datos.

+11

no creo que esto es una buena solución ... porque no puedo dar mi web aplicar este permiso ... no sé quién vote vote –

+6

No recomendado, ya que esto es muy inseguro. Debe crear roles apropiados en lugar de utilizar db_owner que tiene el control total sobre toda la base de datos – Yetiish

1

Puede dar a todos los permisos de ejecución:

GRANT Execute on [dbo].your_object to [public] 

"público" es la función de base de datos por defecto que todos los usuarios son un miembro de.

7

Dar tal permiso puede ser peligroso, especialmente si su aplicación web usa ese mismo nombre de usuario.

Ahora el usuario de la web (y toda la world wide web) también tiene permiso para crear y colocar objetos dentro de su base de datos. ¡Think SQL Injection!

recomiendo conceder privilegios de ejecución sólo para el usuario específico en el objeto dado de la siguiente manera:

grant execute on storedProcedureNameNoquotes to myusernameNoquotes 

Ahora los myusernameNoquotes usuario puede ejecutar storedProcedureNameNoquotes procedimiento sin otros permisos innecesarios a sus datos valiosos.

1

Si haces este usuario especial para una base de datos específica, entonces tal vez no se establece como db_owner en "correspondencia de usuario" de las propiedades

62

mejor solución que he encontrado es crear una nueva función de base, es decir

CREATE ROLE db_executor; 

y luego otorgue ese permiso de ejecución de funciones.

GRANT EXECUTE TO db_executor; 

Ahora cuando vaya a las propiedades del usuario y van a Asignación de usuarios y seleccione la base de datos donde se ha añadido nuevo papel, ahora nuevo papel será visible en la pertenencia a funciones de base de datos: sección

For more detail read full article

+2

Esta respuesta es mejor si se necesita conceder EJECUTAR para todos los SP a un inicio de sesión de usuario en particular - sin usar pública o db_owner. Parece la respuesta más prudente y útil aquí. – jcollum

+1

Por alguna razón, esta es la única respuesta que funciona para mí en SQL Server 2012. Darle permiso explícito a mi usuario EXECUTE no funciona. Solo funciona si hereda el permiso a través de un rol. – Keith

44

en SQL Server:

sólo tiene que ir a security->schema->dbo.

clic doble DBO, a continuación, haga clic en permission tab->(blue font)view database permission y sentirse libre para desplazarse por los campos requeridos como "execute". ayudarse a sí mismo para elegir el uso de grant o deny controles. Esperamos que esto ayude :)

3

Si tiene problemas como la pregunta preguntar anteriormente en relación con la excepción lanzada cuando se ejecuta la solución, el problema es el permiso, no concedido debidamente a los usuarios de ese grupo para acceder a la base de datos de 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 rol oa quién le está otorgando el acceso.

USE [StableEmployee] 
GO 
GRANT EXEC ON dbo.GetAllEmployees TO PUBLIC 

/****** Objeto:. StoredProcedure [dbo] [GetAllEmployees] Guión Fecha: 01/27/2016 16:27:27 ******/

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER procedure [dbo].[GetAllEmployees] 
as 
Begin 
Select EmployeeId, Name, Gender, City, DepartmentId 
From tblEmployee 

End 
19

Esto funcionará si está intentando otorgar permiso a Usuarios o roles.

Uso de Microsoft SQL Server Management Studio:

  1. Ir a: Bases de datos
  2. click derecho en dbo.my_database
  3. Elija: Propiedades
  4. En el panel izquierdo, haga clic en: Permisos
  5. Seleccione el usuario o la función y en el Panel de nombres
  6. Buscar Ejecutar adentro en permisos y marca de cotejo: Grant, With Grant, o Deny
Cuestiones relacionadas