Permiso SHOWPLAN y lotes Transact-SQL

Un lote Transact-SQL consta de una o varias instrucciones. En este tema se describe cómo SQL Server comprueba el permiso SHOWPLAN en diversas opciones de instrucción SET del plan de presentación cuando se utilizan con lotes Transact-SQL.

Nota de seguridadNota de seguridad

Los usuarios que tienen el permiso SHOWPLAN, ALTER TRACE o VIEW SERVER STATE pueden ver consultas capturadas en la salida del plan de presentación. Estas consultas pueden contener información confidencial, como contraseñas. Por consiguiente, se recomienda conceder estos permisos solo a los usuarios que tengan autorización para ver información confidencial, como los miembros del rol de base de datos fijo db_owner o los miembros del rol fijo de servidor sysadmin. También se recomienda guardar solo los archivos del plan de presentación o los archivos de seguimiento que contengan eventos relacionados con el plan de presentación en una ubicación que utilice el sistema de archivos NTFS, así como restringir el acceso a los usuarios que tengan autorización para ver información confidencial.

Lotes que contienen instrucciones USE o SET

No se realiza ninguna comprobación de permisos SHOWPLAN en las instrucciones USE o SET para ninguna opción SET del plan de presentación (SHOWPLAN_TEXT, SHOWPLAN_ALL, SHOWPLAN_XML, STATISTICS PROFILE o STATISTICS XML). Para SHOWPLAN_TEXT, SHOWPLAN_ALL y SHOWPLAN_XML, que generan una salida estimada del plan de ejecución, no se ejecuta ninguna de las instrucciones Transact-SQL del lote, excepto las instrucciones USE database_name, que se ejecutan para estas opciones SET de Showplan.

Ejemplos de comprobación de los permisos de SHOWPLAN

La base de datos de contexto se establece en lotes mediante una instrucción USE database_name. Las bases de datos que contienen objetos, como tablas o vistas, a las que se hace referencia en las instrucciones Transact-SQL se comprueban para ver si incluyen el permiso SHOWPLAN. Sin embargo, el permiso SHOWPLAN no se comprueba en las bases de datos contextuales a no ser que la instrucción Transact-SQL referencia a objetos de la base de datos contextual.

Si un lote contiene una instrucción USE database_name, la base de datos contextual cambia. En este caso, el permiso SHOWPLAN no se comprueba en la base de datos contextual en vigor cuando se produce una instrucción determinada en un lote.

Por ejemplo, en el siguiente lote, el permiso SHOWPLAN se comprueba en la base de datos AdventureWorks2008R2 para ambas instrucciones SELECT. El permiso SHOWPLAN no se comprueba en las bases de datos master ni tempdb, a las que se hace referencia en las instrucciones USE:

SET SHOWPLAN_XML ON
GO
USE tempdb
SELECT * FROM AdventureWorks2008R2.Person.Address
USE master
SELECT * FROM AdventureWorks2008R2.Person.Address
GO

Comprobación del permiso SHOWPLAN para SQL dinámico

  • Para las instrucciones SQL dinámico con el formato EXEC (command_string) o EXEC (character_string), no se realizan comprobaciones del permiso SHOWPLAN en la instrucción, incluida la cadena incrustada.

  • Para las instrucciones SQL dinámico que ejecutan un procedimiento almacenado con formato EXEC dbo.mi_procedimiento_almacenado, no se comprueba el permiso SHOWPLAN en la instrucción EXEC. Sin embargo, puesto que Showplan se genera para todo el cuerpo del procedimiento almacenado, las bases de datos que contienen objetos a los que se hace referencia en las instrucciones del procedimiento almacenado se comprueban para ver si contienen el permiso SHOWPLAN.

En el siguiente ejemplo se muestra cómo se comprueban los permisos SHOWPLAN en las instrucciones SQL dinámico. Para la instrucción SELECT, el permiso SHOWPLAN se comprueba en la base de datos AdventureWorks2008R2. No se lleva a cabo ninguna comprobación del permiso SHOWPLAN en la instrucción EXEC en sí, en la base de datos tempdb ni en la base de datos master:

SET SHOWPLAN_XML ON
GO
USE tempdb
EXEC ('USE master; SELECT * FROM AdventureWorks2008R2.Person.Address');

En el siguiente ejemplo, donde se usa SET STATISTICS XML, si el lote se envía a la base de datos master, no se comprueba ningún permiso SHOWPLAN en la instrucción SET. No se comprueba ningún permiso SHOWPLAN en la instrucción USE tempdb. Sin embargo, puesto que el permiso CONNECT se comprueba en la instrucción USE, el usuario ya debe existir en la base de datos tempdb y contar con el permiso CONNECT en la base de datos tempdb. No se comprueba ningún permiso SHOWPLAN en la instrucción EXEC porque no genera ninguna salida Showplan. No se comprueba ningún permiso SHOWPLAN en la instrucción USE master. Sin embargo, el permiso SHOWPLAN se comprueba en la base de datos AdventureWorks2008R2 para la instrucción SELECT:

SET STATISTICS XML ON
GO
USE tempdb
EXEC ('USE master; SELECT * FROM AdventureWorks2008R2.Person.Address');

Nota

El permiso SHOWPLAN no se comprueba para las consultas que hacen referencia a versiones anteriores de SQL Server. Sin embargo, para las partes de las consultas que se ejecutan en SQL Server 2005 y versiones posteriores, se comprueba el permiso SHOWPLAN.

Lotes que contienen errores

Si se utiliza una de las opciones de instrucción SET de Showplan con un lote Transact-SQL que genera un error de ejecución de la instrucción o un error de comprobación del permiso, la base de datos contextual se determina de la siguiente manera dependiendo del modo de opción SET utilizado:

  • SHOWPLAN_TEXT, SHOWPLAN_ALL y SHOWPLAN_XML

    La base de datos contextual que estaba en vigor antes del inicio de la ejecución del lote permanece vigente. No se genera ninguna salida de Showplan para el lote entero si se detecta algún error de ejecución de la instrucción o error de comprobación del permiso. Todas las comprobaciones de permiso e instrucciones deben ejecutarse correctamente o, de lo contrario, no se generará ninguna salida de Showplan.

  • STATISTICS PROFILE y STATISTICS XML

    La base de datos contextual que estaba vigente cuando la última instrucción se ha ejecutado correctamente permanece en vigor. La salida de Showplan se genera para cada instrucción del lote en el que la instrucción y las comprobaciones de permiso se han ejecutado correctamente. La salida de Showplan se genera para cada instrucción del lote que se ejecuta correctamente y cuyas comprobaciones de permiso han sido satisfactorias.

Vea también

Conceptos