Freigeben über


Metadatensichtbarkeitskonfiguration

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)