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 2005 comprueba el permiso SHOWPLAN en diversas opciones de instrucción SET de Showplan cuando se utilizan con lotes Transact-SQL.
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 de Showplan (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 contextual se establece en lotes mediante la 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 haga 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 master 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] 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, el permiso SHOWPLAN se comprueba.
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
Seguridad del plan de presentación