Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Sichtbarkeit von Metadaten ist auf Sicherungsobjekte beschränkt, die ein Benutzer besitzt oder auf die der Benutzer eine Berechtigung erhalten hat. Die folgende Abfrage gibt beispielsweise eine Zeile zurück, wenn dem Benutzer eine Berechtigung wie SELECT oder INSERT in der Tabelle myTablegewährt wurde.
SELECT name, object_id
FROM sys.tables
WHERE name = 'myTable';
GO
Wenn der Benutzer jedoch keine Berechtigung auf myTable hat, gibt die Abfrage eine leere Ergebnismenge zurück.
Umfang und Auswirkungen der Metadaten-Sichtbarkeitskonfiguration
Die Metadatensichtbarkeitskonfiguration gilt nur für die folgenden Securables.
| Katalogansichten | Gespeicherte Prozeduren des Datenbankmoduls sp_help |
| Metadaten, die integrierte Funktionen verfügbarmachen | Informationsschemaansichten |
| Kompatibilitätsansichten | Erweiterte Eigenschaften |
Die Metadatensichtbarkeitskonfiguration gilt nicht für die folgenden Sicherheitsobjekte.
| Tabellen des Protokollversandsystems | SQL Server Agent-Systemtabellen |
| Datenbankwartungsplan-Systemtabellen | Backup-Systemtabellen |
| Tabellen des Replikationssystems | Replikation und SQL Server-Agent sp_help gespeicherte Prozeduren |
Eingeschränkte Metadatenzugänglichkeit bedeutet Folgendes:
Anwendungen, die den öffentlichen Metadatenzugriff voraussetzen, werden nicht funktionieren.
Abfragen für Systemansichten geben möglicherweise nur eine Teilmenge von Zeilen oder manchmal ein leeres Resultset zurück.
Metadatenmittierende, integrierte Funktionen wie OBJECTPROPERTYEX können NULL zurückgeben.
Das Datenbankmodul kann mit den gespeicherten Prozeduren sp_help nur eine Teilmenge von Zeilen oder NULL zurückgeben.
SQL-Module wie gespeicherte Prozeduren und Trigger werden unter dem Sicherheitskontext des aufrufenden Benutzers ausgeführt und haben daher einen begrenzten Zugang zu Metadaten. Wenn die gespeicherte Prozedur beispielsweise im folgenden Code versucht, auf Metadaten für die Tabelle myTable zuzugreifen, für die der Aufrufer keine Rechte besitzt, wird ein leeres Resultset zurückgegeben. In früheren Versionen von SQL Server wird eine Zeile zurückgegeben.
CREATE PROCEDURE assumes_caller_can_access_metadata
BEGIN
SELECT name, id
FROM sysobjects
WHERE name = 'myTable';
END;
GO
Damit Aufrufer Metadaten anzeigen können, können Sie den Aufrufenden DIE ANSICHTSDEFINITION-Berechtigung für einen geeigneten Bereich erteilen: Objektebene, Datenbankebene oder Serverebene. Daher gibt die gespeicherte Prozedur eine Zeile zurück, wenn der Aufrufer im vorherigen Beispiel die Berechtigung VIEW DEFINITION auf myTable besitzt. Weitere Informationen finden Sie unter GRANT (Transact-SQL) und GRANT-Datenbankberechtigungen (Transact-SQL).
Sie können die gespeicherte Prozedur auch so ändern, dass sie unter den Anmeldeinformationen des Besitzers ausgeführt wird. Wenn der Prozedurbesitzer und der Tabellenbesitzer derselbe Besitzer sind, gilt die Besitzerkette und der Sicherheitskontext des Prozedurbesitzers ermöglicht den Zugriff auf die Metadaten für myTable. In diesem Szenario gibt der folgende Code eine Zeile mit Metadaten an den Aufrufer zurück.
Hinweis
Im folgenden Beispiel wird die Sys.objects-Katalogansicht anstelle der Sys.sysobjects-Kompatibilitätsansicht verwendet.
CREATE PROCEDURE does_not_assume_caller_can_access_metadata
WITH EXECUTE AS OWNER
AS
BEGIN
SELECT name, id
FROM sys.objects
WHERE name = 'myTable'
END;
GO
Hinweis
Sie können EXECUTE AS verwenden, um vorübergehend zum Sicherheitskontext des Aufrufers zu wechseln. Weitere Informationen finden Sie unter EXECUTE AS (Transact-SQL).
Vorteile und Beschränkungen der Metadatensichtbarkeitskonfiguration
Die Konfiguration der Metadatensichtbarkeit kann in Ihrem gesamten Sicherheitsplan eine wichtige Rolle spielen. Es gibt jedoch Fälle, in denen ein qualifizierter und bestimmter Benutzer die Offenlegung einiger Metadaten erzwingen kann. Es wird empfohlen, Metadatenberechtigungen als eine von vielen Verteidigungsmechanismen bereitzustellen.
Theoretisch ist es möglich, die Emission von Metadaten in Fehlermeldungen zu erzwingen, indem die Reihenfolge der Prädikatauswertung in Abfragen manipuliert wird. Die Möglichkeit solcher Test- und Fehlerangriffe ist nicht spezifisch für SQL Server. Es wird durch die assoziativen und kommutativen Transformationen impliziert, die in relationaler Algebra zulässig sind. Sie können dieses Risiko mindern, indem Sie die in Fehlermeldungen zurückgegebenen Informationen einschränken. Um die Sichtbarkeit von Metadaten auf diese Weise weiter einzuschränken, können Sie den Server mit ablaufverfolgungskennzeichnung 3625 starten. Dieses Ablaufverfolgungskennzeichen schränkt die Menge der Informationen ein, die in Fehlermeldungen angezeigt werden. Dies wiederum hilft, erzwungene Offenlegungen zu verhindern. Der Kompromiss besteht darin, dass Fehlermeldungen kurz und knapp sind und zum Debuggen möglicherweise schwierig zu verwenden sind. Weitere Informationen finden Sie unter Startoptionen des Datenbankmoduldiensts und Ablaufverfolgungskennzeichnungen (Transact-SQL).
Die folgenden Metadaten unterliegen nicht der erzwungenen Offenlegung:
Der in der spalte provider_string von sys.servers gespeicherte Wert. Ein Benutzer, der nicht über die Berechtigung ALTER ANY LINKED SERVER verfügt, wird in dieser Spalte einen NULL-Wert sehen.
Quelldefinition eines benutzerdefinierten Objekts, z. B. einer gespeicherten Prozedur oder eines Triggers. Der Quellcode ist nur sichtbar, wenn einer der folgenden Werte zutrifft:
Der Benutzer verfügt über die VIEW DEFINITION-Berechtigung für das Objekt.
Der Benutzer ist nicht von der VIEW DEFINITION-Berechtigung für das Objekt ausgeschlossen worden und verfügt über die Berechtigung CONTROL, ALTER oder TAKE OWNERSHIP für das Objekt. Alle anderen Benutzer sehen NULL.
Die Definitionsspalten in den folgenden Katalogansichten:
sys.all_sql_modules sys.sql_modules sys.server_sql_modules sys.check_constraints sys.default_constraints sys.computed_columns sys.numbered_procedures Die Spalte "ctext " in der Syscomments-Kompatibilitätsansicht .
Die Ausgabe der sp_helptext Prozedur.
Die folgenden Spalten in den Informationsschema-Ansichten:
INFORMATION_SCHEMA.CHECK_CONSTRAINTS.CHECK_CLAUSE INFORMATION_SCHEMA.SPALTEN.COLUMN_DEFAULT INFORMATION_SCHEMA. DOMÄNEN. DOMAIN_DEFAULT INFORMATION_SCHEMA. ROUTINE_COLUMNS. COLUMN_DEFAULT INFORMATION_SCHEMA.ROUTINEN.ROUTINE_DEFINITION INFORMATION_SCHEMA. ANSICHTEN. VIEW_DEFINITION OBJECT_DEFINITION()-Funktion
Der wert, der in der spalte password_hash von sys.sql_logins gespeichert ist. Ein Benutzer, der nicht über die Berechtigung CONTROL SERVER verfügt, sieht in dieser Spalte einen NULL.
Hinweis
Die SQL-Definitionen integrierter Systemprozeduren und -funktionen werden in der sys.system_sql_modules Katalogansicht, der sp_helptext gespeicherten Prozedur und der funktion OBJECT_DEFINITION() öffentlich sichtbar.
Allgemeine Prinzipien der Sichtbarkeit von Metadaten
Im Folgenden sind einige allgemeine Grundsätze aufgeführt, die sie in Bezug auf die Sichtbarkeit von Metadaten berücksichtigen sollten:
Implizite Berechtigungen für festgelegte Rollen
Berechtigungsbereich
Priorität von DENY
Sichtbarkeit von Unterkomponentenmetadaten
Feste Rollen und implizite Berechtigungen
Metadaten, auf die durch feste Rollen zugegriffen werden kann, sind von den entsprechenden impliziten Berechtigungen abhängig.
Geltungsbereich von Berechtigungen
Berechtigungen auf einem Bereich bedeuten, dass Metadaten in diesem Bereich und in allen eingeschlossenen Bereichen angezeigt werden können. Die SELECT-Berechtigung für ein Schema impliziert beispielsweise, dass der Gewährungsempfänger über die SELECT-Berechtigung für alle Objekte verfügt, die in diesem Schema enthalten sind. Die Gewährung der SELECT-Berechtigung für ein Schema ermöglicht es einem Benutzer daher, die Metadaten des Schemas sowie alle Tabellen, Ansichten, Funktionen, Prozeduren, Warteschlangen, Synonyme, Typen und XML-Schemasammlungen darin anzuzeigen. Weitere Informationen zu Bereichen finden Sie unter Berechtigungshierarchie (Datenbankmodul).
Priorität von DENY
DENY hat in der Regel Vorrang vor anderen Berechtigungen. Wenn z. B. einem Datenbankbenutzer eine EXECUTE-Berechtigung für ein Schema gewährt wird, die EXECUTE-Berechtigung für eine gespeicherte Prozedur in diesem Schema jedoch verweigert wurde, kann der Benutzer die Metadaten für diese gespeicherte Prozedur nicht anzeigen.
Wenn einem Benutzer die EXECUTE-Berechtigung für ein Schema verweigert wurde, er jedoch die EXECUTE-Berechtigung für eine gespeicherte Prozedur in diesem Schema erhalten hat, kann er die Metadaten für diese gespeicherte Prozedur nicht anzeigen.
Ein weiteres Beispiel: Wenn einem Benutzer die EXECUTE-Berechtigung für eine gespeicherte Prozedur erteilt und verweigert wurde, was durch die verschiedenen Rollenmitgliedschaften möglich ist, hat DENY Vorrang, und der Benutzer kann die Metadaten der gespeicherten Prozedur nicht anzeigen.
Sichtbarkeit von Unterkomponentenmetadaten
Die Sichtbarkeit von Unterkomponenten, z. B. Indizes, Checkeinschränkungen und Trigger, wird durch Berechtigungen für das übergeordnete Element bestimmt. Diese Unterkomponenten verfügen nicht über zulässige Berechtigungen. Wenn einem Benutzer beispielsweise eine Berechtigung für eine Tabelle erteilt wurde, kann der Benutzer die Metadaten für die Tabellen, Spalten, Indizes, Check-Einschränkungen, Trigger und andere solche Unterkomponenten anzeigen.
Metadaten, auf die für alle Datenbankbenutzer zugegriffen werden kann
Auf einige Metadaten muss für alle Benutzer in einer bestimmten Datenbank zugegriffen werden können. Beispielsweise verfügen Dateigruppen nicht über ermächtigungsfähige Berechtigungen; Daher kann einem Benutzer keine Berechtigung zum Anzeigen der Metadaten einer Dateigruppe erteilt werden. Jeder Benutzer, der eine Tabelle erstellen kann, muss jedoch auf Dateigruppenmetadaten zugreifen können, um die ON-Dateigruppe oder TEXTIMAGE_ON Filegroup-Klauseln der CREATE TABLE-Anweisung zu verwenden.
Die Metadaten, die von den Funktionen DB_ID() und DB_NAME() zurückgegeben werden, sind für alle Benutzer sichtbar.
In der folgenden Tabelle sind die Katalogansichten aufgeführt, die für die öffentliche Rolle sichtbar sind.
| sys.partition_functions | sys.partition_range_values |
| sys.partition_schemes | sys.data_spaces |
| sys.filegroups | sys.destination_data_spaces |
| sys.database_files | sys.allocation_units |
| sys.partitions | sys.messages |
| sys.schemas | sys.configurations |
| sys.sql_abhängigkeiten | sys.type_assembly_usages |
| sys.parameter_type_usages | sys.column_type_usages |
Siehe auch
GRANT (Transact-SQL)
VERWEIGERN (Transact-SQL)
REVOKE (Transact-SQL)
EXECUTE AS-Klausel (Transact-SQL)
Katalogsichten (Transact-SQL)
Kompatibilitätsansichten (Transact-SQL)