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.
![](https://www.mssqltips.com/tipimages/1593_i1.gif)
![](https://www.mssqltips.com/tipimages/1593_i2.gif)
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
![](https://www.mssqltips.com/images/Free-Download_20190509.png)
![](https://www.mssqltips.com/images/nav_nexttip_clickhere_rev1.png)
Sobre el autor
![](https://www.mssqltips.com/images/NitinRana.jpg)
- Más consejos para desarrolladores de bases de datos…