SHOWPLAN-Berechtigung und Transact-SQL-Batches

Ein Transact-SQL-Batch besteht aus einer oder mehreren Anweisungen. In diesem Thema wird beschrieben, wie die SHOWPLAN-Berechtigung von SQL Server 2005 für verschiedene Showplan-SET-Anweisungsoptionen geprüft wird, wenn diese Optionen für Transact-SQL-Batches verwendet werden.

Batches mit USE- oder SET-Anweisungen

Für die USE- und SET-Anweisungen der Showplan-SET-Optionen (SHOWPLAN_TEXT, SHOWPLAN_ALL, SHOWPLAN_XML, STATISTICS PROFILE und STATISTICS XML) werden keine Überprüfungen der SHOWPLAN-Berechtigung ausgeführt. Für SHOWPLAN_TEXT, SHOWPLAN_ALL und SHOWPLAN_XML, durch die die Ausgabe des geschätzten Ausführungsplanes generiert wird, wird mit Ausnahme der USE database_name-Anweisungen (die für diese Showplan-SET-Optionen ausgeführt werden) keine der Transact-SQL-Anweisungen im Batch ausgeführt.

Überprüfen der SHOWPLAN-Berechtigung (Beispiele)

Die Kontextdatenbank wird mithilfe der USE database_name-Anweisung in Batches eingerichtet. Für die Datenbanken, die Objekte beinhalten (z. B. Tabellen oder Sichten), auf die durch Transact-SQL-Anweisungen verwiesen wird, wird die SHOWPLAN-Berechtigung überprüft. Für Kontextdatenbanken wird die SHOWPLAN-Berechtigung jedoch nur überprüft, wenn durch die Transact-SQL-Anweisung auf Objekte in der Kontextdatenbank verwiesen wird.

Wenn ein Batch eine USE database_name-Anweisung enthält, ändert sich die Kontextdatenbank. In diesem Fall wird die SHOWPLAN-Berechtigung für die Kontextdatenbank, die beim Auftreten einer bestimmten Anweisung in einem Batch in Kraft ist, nicht überprüft.

Im folgenden Batch wird die SHOWPLAN-Berechtigung beispielsweise für die AdventureWorks-Datenbank für beide SELECT-Anweisungen überprüft. Die SHOWPLAN-Berechtigung wird weder für die master- noch für die tempdb-Datenbank überprüft, auf die durch USE-Anweisungen verwiesen wird:

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

Überprüfen der SHOWPLAN-Berechtigung für dynamische SQL-Anweisungen

  • Bei dynamischen SQL-Anweisungen der Form EXEC (command_string) und EXEC (character_string), werden keine Überprüfungen der SHOWPLAN-Berechtigungen für die Anweisungen (einschließlich der eingebetteten Zeichenfolgen) ausgeführt.
  • Bei dynamischen SQL-Anweisungen zur Ausführung einer gespeicherten Prozedur der Form EXEC dbo.my_stored_procedure, wird keine Überprüfung der SHOWPLAN-Berechtigung für die Anweisung selbst ausgeführt. Da jedoch ein Showplan für den gesamten Hauptteil der gespeicherten Prozedur erstellt wird, wird die SHOWPLAN-Berechtigung für alle Datenbanken überprüft, die Objekte beinhalten, auf die durch Anweisungen in der gespeicherten Prozedur verwiesen wird.

Im folgenden Beispiel ist dargestellt, wie SHOWPLAN-Berechtigungen für dynamische SQL-Anweisungen überprüft werden. Für die SELECT-Anweisung wird die SHOWPLAN-Berechtigung für die AdventureWorks-Datenbank überprüft. Für die EXEC-Anweisung selbst, die tempdb-Datenbank oder die master-Datenbank werden keine Überprüfungen der SHOWPLAN-Berechtigung ausgeführt:

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

Im folgenden Beispiel wird SET STATISTICS XML verwendet. Wenn das Batch an die master-Datenbank gesendet wird, wird die SHOWPLAN-Berechtigung für die SET-Anweisung nicht überprüft. Für die USE tempdb-Anweisung wird die SHOWPLAN-Berechtigung nicht überprüft. Da jedoch die CONNECT-Berechtigung für die USE-Anweisung überprüft wird, muss der Benutzer bereits in der tempdb-Datenbank vorhanden sein und über die CONNECT-Berechtigung für die tempdb-Datenbank verfügen. Für die EXEC-Anweisung wird keine Überprüfung der SHOWPLAN-Berechtigung ausgeführt, da durch diese Anweisung keine Showplanausgabe generiert wird. Für die USE master-Anweisung wird die SHOWPLAN-Berechtigung nicht überprüft. Für die SELECT-Anweisung wird die SHOWPLAN-Berechtigung jedoch für die AdventureWorks-Datenbank überprüft:

SET STATISTICS XML ON
GO
USE tempdb
EXEC ('USE master; SELECT * FROM AdventureWorks.Person.Address');
ms178086.note(de-de,SQL.90).gifHinweis:
Für Abfragen, die auf frühere Versionen von SQL Server verweisen, wird die SHOWPLAN-Berechtigung nicht überprüft. Für Teile dieser Abfragen, die in SQL Server 2005 ausgeführt werden, wird die SHOWPLAN-Berechtigung jedoch überprüft.

Batches mit Fehlern

Wenn eine der Showplan-SET-Anweisungsoptionen in Verbindung mit einem Transact-SQL-Batch verwendet wird, das bei der Ausführung der Anweisung oder der Überprüfung der Berechtigung einen Fehler erstellt, wird die Kontextdatenbank in Abhängigkeit vom verwendeten SET-Optionsmodus folgendermaßen festgestellt:

  • SHOWPLAN_TEXT, SHOWPLAN_ALL und SHOWPLAN_XML
    Die Kontextdatenbank, die vor Beginn der Batchausführung in Kraft war, bleibt weiterhin in Kraft. Wenn bei der Ausführung von Anweisungen oder der Überprüfung von Berechtigungen Fehler auftreten, wird für das gesamte Batch keine Showplanausgabe generiert. Eine Showplanausgabe wird nur erstellt, wenn alle Berechtigungsüberprüfungen und Anweisungen erfolgreich ausgeführt werden.
  • STATISTICS PROFILE und STATISTICS XML
    Die Kontextdatenbank, die zum Zeitpunkt der erfolgreichen Ausführung der letzten Anweisung in Kraft war, bleibt weiterhin in Kraft. Die Showplanausgabe wird für jede Anweisung im Batch generiert, sofern die Anweisung und die Überprüfung der Berechtigung erfolgreich ausgeführt wurden. Die Showplanausgabe wird für jede erfolgreich ausgeführte Anweisung im Batch erstellt, sofern die Überprüfung der Berechtigung erfolgreich verläuft.

Siehe auch

Konzepte

Showplansicherheit

Hilfe und Informationen

Informationsquellen für SQL Server 2005