recorrer openjson near incorrect convert array sql-server

sql-server - openjson - select json sql server



El permiso EXECUTE fue denegado en el objeto ''xxxxxxx'', base de datos ''zzzzzzz'', esquema ''dbo'' (11)

Estoy teniendo problemas para ejecutar una función.

Esto es lo que hice:

  1. Cree una función usando SQL Server Management Studio. Fue creado con éxito.
  2. 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''.


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 red mundial) también tiene permiso para crear y colocar objetos dentro de su base de datos. ¡Think SQL Injection!

Recomiendo otorgar privilegios de ejecución solo al usuario específico en el objeto dado de la siguiente manera:

grant execute on storedProcedureNameNoquotes to myusernameNoquotes

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


En el servidor Sql:

solo ve a security->schema->dbo .

Haga doble clic en dbo, luego haga clic en la permission tab->(blue font)view database permission y siéntase libre para desplazarse por los campos obligatorios como "execute". Ayúdese a elegir usando grant controles de grant o deny . Espero que esto ayude :)


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

Usando Microsoft SQL Server Management Studio:

  1. Ir a: Bases de datos
  2. Haga clic derecho en dbo.my_database
  3. Elija: Propiedades
  4. En el panel lateral izquierdo, haga clic en: Permisos
  5. Seleccione el Usuario o Rol y en el Panel de Nombre
  6. Buscar Ejecutar en en permisos y marca de verificación: Conceder, Con concesión o Denegar

La mejor solución que encontré es crear una nueva función de base de datos, es decir,

CREATE ROLE db_executor;

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

GRANT EXECUTE TO db_executor;

Ahora cuando vaya a las propiedades del usuario y vaya a Asignación de usuarios y seleccione la base de datos donde ha agregado un nuevo rol, ahora se verá un nuevo rol en la membresía de la función de Base de datos para: sección

Para más detalles leer el artículo completo


Me he enfrentado al mismo problema y lo resolví al otorgarle también permiso a db_owner al usuario de la base de datos.



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, podría otorgar acceso así:

USE zzzzzzz; GRANT EXEC ON dbo.xxxxxxx TO PUBLIC


Puedes dar permiso a todos para ejecutar:

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

"Public" es la función de base de datos predeterminada de la que todos los usuarios son miembros.


Si haces que este usuario sea especial para una base de datos específica, entonces tal vez no lo configures como db_owner en "mapeo de usuario" de propiedades


Si tiene problemas como la pregunta anterior sobre la excepción lanzada cuando se ejecuta la solución, el problema es el permiso, no otorgado correctamente 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 rol oa quién le está otorgando el acceso.

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

/ ****** Objeto: StoredProcedure [dbo]. [GetAllEmployees] Fecha del script: 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


necesitas ejecutar algo como esto

GRANT Execute ON [dbo].fnc_whatEver TO [domain/user]