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 für verschiedene Showplan-SET-Anweisungsoptionen geprüft wird, wenn diese Optionen für Transact-SQL-Batches verwendet werden.
Sicherheitshinweis |
---|
Benutzer mit den Berechtigungen SHOWPLAN, ALTER TRACE oder VIEW SERVER STATE können Abfragen anzeigen, die in der Showplan-Ausgabe erfasst werden. Diese Abfragen enthalten möglicherweise vertrauliche Informationen wie Kennwörter. Daher wird empfohlen, diese Berechtigungen nur Benutzern zu gewähren, die zum Zugreifen auf vertrauliche Informationen berechtigt sind, z. B. Mitglieder der festen Datenbankrolle "db_owner" oder Mitglieder der festen Serverrolle "sysadmin". Darüber hinaus wird empfohlen, Showplan-Dateien oder Ablaufverfolgungsdateien, die Ereignisse mit Bezug zu Showplan enthalten, nur an einem Speicherort zu speichern, für den das NTFS-Dateisystem verwendet wird, und den Zugriff auf Benutzer zu beschränken, die zum Zugreifen auf vertrauliche Informationen berechtigt sind. |
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ührungsplans 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 in Batches mithilfe der USE database_name-Anweisung festgelegt. 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 AdventureWorks2008R2-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 AdventureWorks2008R2.Person.Address
USE master
SELECT * FROM AdventureWorks2008R2.Person.Address
GO
Überprüfen der SHOWPLAN-Berechtigung für dynamische SQL-Anweisungen
Bei dynamischen SQL-Anweisungen der Form EXEC (command_string) oder EXEC (character_string) werden keine Überprüfungen der SHOWPLAN-Berechtigungen für die Anweisung (einschließlich der eingebetteten Zeichenfolge) 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 AdventureWorks2008R2-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 AdventureWorks2008R2.Person.Address');
Im folgenden Beispiel wird SET STATISTICS XML verwendet. Wenn der 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 SHOWPLAN-Ausgabe 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 AdventureWorks2008R2-Datenbank überprüft:
SET STATISTICS XML ON
GO
USE tempdb
EXEC ('USE master; SELECT * FROM AdventureWorks2008R2.Person.Address');
Hinweis |
---|
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 und höheren Versionen 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.