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 de la función de base de datos fija db_owner o los miembros de la función fija 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 las dos instrucciones SELECT de la base de datos AdventureWorks. El permiso SHOWPLAN no se comprueba en las bases de datos maestra ni tempdb, a las que se hace referencia en las instrucciones USE:

SET SHOWPLAN_XML ON
GO
USE tempdb
SELECT * FROM AdventureWorks.Person.Address
USE master
SELECT * FROM AdventureWorks.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 de 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 AdventureWorks. No se lleva a cabo ninguna comprobación de permiso SHOWPLAN en la instrucción EXEC, la base de datos tempdb ni la base de datos master:

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

En el siguiente ejemplo, donde se utiliza 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, para la instrucción SELECT se comprueba el permiso SHOWPLAN en la base de datos AdventureWorks.

SET STATISTICS XML ON
GO
USE tempdb
EXEC ('USE master; SELECT * FROM AdventureWorks.Person.Address');
Nota de seguridadNota de seguridad

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 del plan de presentación se genera para cada instrucción del lote que se ejecuta correctamente y cuyas comprobaciones de permiso han tenido un resultado correcto.

Historial de cambios

Contenido actualizado

Se ha agregado una nota de seguridad sobre la protección de la información confidencial que puede aparecer en archivos del plan de presentación o en archivos de seguimiento.

Vea también

Conceptos