Articles

Otorgar permiso de definición de vista a un usuario o rol en SQL Server

Posted by admin

By: Nitin Rana | Updated: 2008-09-29 | Comments (7) | Related: More > Views

Problem

in SQL Server 2005 por defecto los usuarios de una base de datos que solo están en publicrole no pueden ver las definiciones de un objeto mientras usan sp_help, sp_helptext o la función object_definition. A veces esto es útil para permitir que los desarrolladores u otros no administradores vean las definiciones de objetos en una base de datos, para que puedan crear objetos similares en una base de datos de prueba o desarrollo., En lugar de conceder permisos de mayor nivel, ¿hay alguna forma de permitir a los usuarios que solo tienen acceso público la capacidad de ver definiciones de objetos?

Solution

al emitir sp_help, sp_helptext o usar la función object_definition (), se producirán los siguientes errores en SQL 2005 si el Usuario no tiene permisos para ver los metadatos del objeto. He aquí un par de ejemplos de estos errores.,

EXEC sp_help Customer

devuelve lo siguiente:

Msg 15009, Level 16, State 1, Procedure sp_help, Line 66
The object 'Customer' does not exist in database 'MSSQLTIPS' or is invalid for this operation.

una selección contra la función OBJECT_DEFINITION devolverá un valor de NULL si el Usuario no tiene permisos para ver los metadatos.

SELECT object_definition (OBJECT_ID(N'dbo.vCustomer'))

Devuelve el siguiente:

NULL

Por defecto, los usuarios fueron capaces de ver las definiciones de objetos en SQL Server 2000, butin SQL Server 2005 esta funcionalidad fue removido para permitir otra capa de seguridad., Mediante el uso de una nueva característica llamada definición de vista, es posible permitir a los usuarios que solo tienen acceso público la capacidad de ver definiciones de objetos., emitir la siguiente declaración:

USE master GO GRANT VIEW ANY DEFINITION TO User1

para activar esta función para una base de datos y para todos los usuarios que tienen acceso público, puede emitir lo siguiente:

USE AdventureWorks GO GRANT VIEW Definition TO PUBLIC

si desea otorgar acceso solo al usuario «User1» de la base de datos, puede hacer lo siguiente el siguiente:

USE AdventureWorks GO GRANT VIEW Definition TO User1

para desactivar esta funcionalidad, emitiría los comandos revoke como uno de los siguientes:

USE master GO REVOKE VIEW ANY DEFINITION TO User1 -- or USE AdventureWorks GO REVOKE VIEW Definition TO User1 

si desea ver qué usuarios tienen este acceso, puede emitir lo siguiente en la base de datos.,

USE AdventureWorks GO sp_helprotect

Aquí hay dos filas que muestran dónde se ha concedido la acción de definición de vista. El PRIMERO en un objeto en particular y el segundo para todos los objetos de la base de datos.

para llevar esto un paso más allá, si no desea otorgar este permiso en allobjects, se puede usar el siguiente procedimiento almacenado para otorgar esto a todos los objetos o objetos particulares en una base de datos., Esto está configurado actualmente para todos los tipos de objetos, pero se puede cambiar incluyendo tipos de objeto menos en la cláusula WHERE.

para usar esto, puede crear este procedimiento almacenado en sus bases de datos de usuarios y luego otorgar los permisos al usuario apropiado en lugar de hacer que las cosas se abran para un usuario o todos los usuarios. Simplemente reemplace ChangeToYourDatabaseName para yourdatabase antes de crear.

una vez creado este procedimiento, puede conceder los permisos de la siguiente manera.Este ejemplo concede la definición de vista a un usuario » userXYZ «en la base de datos» MSSQLTIPS » para todos los tipos de objetos seleccionados.,s en Línea:

  • sp_helptext
  • sp_help
  • object_definition
  • Object_Id
  • Create Procedure
  • Schema_Name
  • Schema_ID
  • Reemplace
  • GRANT
  • VER DEFINICIÓN

Última actualización: 2008-09-29

Sobre el autor
Nitin Rana es un Microsoft Certified Professional y actualmente tiene más de 12 años de experiencia con SQL server core componentes.,ver todos mis consejos
recursos relacionados

  • Más consejos para desarrolladores de bases de datos…

Leave A Comment