Konfigurieren der Sichtbarkeit von Metadaten

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Die Sichtbarkeit von Metadaten ist auf sicherungsfähige Elemente eingeschränkt, bei denen der Benutzer entweder der Besitzer ist oder für die dem Benutzer eine Berechtigung erteilt wurde.

Beispielsweise gibt die folgende Abfrage eine Zeile zurück, wenn dem Benutzer eine Berechtigung, wie etwa SELECT, für die myTable-Tabelle erteilt wurde.

SELECT name, object_id  
FROM sys.tables  
WHERE name = N'myTable';  
GO  

Wenn der Benutzer jedoch keine Berechtigungen für myTablehat, gibt die Abfrage ein leeres Resultset zurück.

Gültigkeitsbereich und Auswirkung der Konfiguration der Metadatensichtbarkeit

Die Konfiguration der Metadatensichtbarkeit gilt nur für die folgenden sicherungsfähigen Elemente:

Katalogansichten

Metadaten ausgebende integrierte Funktionen

Kompatibilitätssichten

sp_help-gespeicherte Prozeduren von Datenbank-Engine

Informationsschemasichten

Erweiterte Eigenschaften

Die Konfiguration der Metadatensichtbarkeit gilt nicht für die folgenden sicherungsfähigen Elemente:

Protokollversandsystemtabellen

Systemtabellen für Datenbank-Wartungspläne

Replikationssystemtabellen

SQL Server-Agent-Systemtabellen

Sicherungssystemtabellen

Gespeicherte sp_help-Prozeduren für Replikation und SQL Server-Agents

Der eingeschränkte Metadatenzugriff bedeutet Folgendes:

  • Abfragen für Systemsichten geben möglicherweise nur eine Teilmenge von Zeilen zurück oder manchmal ein leeres Resultset.

  • Metadaten ausgebende, integrierte Funktionen wie OBJECTPROPERTYEX können NULL zurückgeben.

  • Die gespeicherten sp_help-Prozeduren der Datenbank-Engine geben möglicherweise nur eine Teilmenge von Zeilen oder NULL zurück.

  • Als Ergebnis funktionieren Anwendungen, die einen public -Metadatenzugriff voraussetzen, nicht.

SQL-Module, wie z. B. gespeicherte Prozeduren und Trigger, werden im Sicherheitskontext des Aufrufers ausgeführt und haben deshalb einen eingeschränkten Metadatenzugriff. Wenn z. B. im folgenden Code die gespeicherte Prozedur versucht, auf Metadaten aus der Tabelle myTable zuzugreifen, für die der Aufrufer keine Berechtigung hat, 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, object_id   
FROM sys.objects   
WHERE name = N'myTable';  
END;  
GO  

Um den Aufrufern die Ansicht von Metadaten zu ermöglichen, können Sie ihnen die Berechtigung VIEW DEFINITION oder ab SQL Server 2022 entweder VIEW SECUIRITY DEFINITION oder VIEW PERFORMANCE DEFINITION in einem geeigneten Umfang gewähren: Objektebene, Datenbankebene oder Serverebene. Wenn der Aufrufer im vorigen Beispiel über die VIEW DEFINITION-Berechtigung für myTableverfügt, gibt die gespeicherte Prozedur eine Zeile zurück. 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 Besitzer der Prozedur und der Besitzer der Tabelle identisch sind, gilt die Besitzverkettung, und der Sicherheitskontext des Prozedurbesitzers ermöglicht den Zugriff auf die Metadaten von myTable. In diesem Szenario gibt der folgende Code eine Zeile aus Metadaten an den Aufrufer zurück.

Hinweis

Das folgende Beispiel verwendet die sys.objects -Katalogsicht anstelle der sys.sysobjects -Kompatibilitätssicht.

CREATE PROCEDURE does_not_assume_caller_can_access_metadata  
WITH EXECUTE AS OWNER  
AS  
BEGIN  
SELECT name, object_id  
FROM sys.objects   
WHERE name = N'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 Einschränkungen der Konfiguration der Metadatensichtbarkeit

Die Konfiguration der Metadatensichtbarkeit kann eine wichtige Rolle in Ihrem allgemeinen Sicherheitsplan spielen. Es gibt jedoch Fälle, in denen ein technisch versierter Benutzer das Anzeigen einiger Metadaten erzwingen kann, wenn er das will. Wir empfehlen deshalb, dass Sie neben anderen Schutzmaßnahmen Metadatenberechtigungen bereitstellen.

Es ist theoretisch möglich, die Ausgabe von Metadaten in Fehlermeldungen zu erzwingen, indem die Reihenfolge der Prädikatauswertung in Abfragen verändert wird. Die Möglichkeit solcher Trial and Error-Angriffe ist nicht SQL Server-spezifisch. Dies wird durch die in relationaler Algebra zulässigen, assoziativen und kommutativen Transformationen impliziert. Sie können dieses Risiko verringern, indem Sie die in Fehlermeldungen zurückgegebenen Informationen einschränken. Um die Sichtbarkeit von Metadaten auf diese Weise noch stärker einzuschränken, können Sie den Server mit dem Ablaufverfolgungsflag 3625 starten. Mit diesem Ablaufverfolgungsflag wird die in Fehlermeldungen angezeigte Menge an Informationen eingeschränkt. Auf diese Weise können Sie die erzwungene Anzeige von Daten verhindern. Der Nachteil hierbei ist jedoch, dass die Fehlermeldungen nicht ausführlich sind und sie u. U. nicht zu Debugzwecken verwendet werden können. Weitere Informationen finden Sie unter Startoptionen für den Datenbank-Engine-Dienst und Ablaufverfolgungsflags (Transact-SQL).

Für die folgenden Metadaten ist die erzwungene Anzeige nicht möglich:

  • Der in der provider_string-Spalte von sys.servers gespeicherte Wert. Einem Benutzer, der keine ALTER ANY LINKED SERVER-Berechtigung hat, wird in dieser Spalte ein NULL-Wert angezeigt.

  • Quellendefinition eines benutzerdefinierten Objekts wie z. B. eine gespeicherte Prozedur oder ein Trigger. Der Quellencode ist nur sichtbar, wenn eine der folgenden Aussagen zutrifft:

    • Der Benutzer hat die VIEW DEFINITION-Berechtigung für das Objekt.

    • Dem Benutzer wurde die VIEW DEFINITION-Berechtigung für das Objekt nicht verweigert, und er hat die CONTROL-, ALTER- oder TAKE OWNERSHIP-Berechtigung für das Objekt. Allen anderen Benutzern wird NULL angezeigt.

  • Die Definitionsspalten in den folgenden Katalogsichten:

    • sys.all_sql_modules
    • sys.server_sql_modules
    • sys.default_constraints
    • sys.numbered_procedures
    • sys.sql_modules
    • sys.check_constraints
    • sys.computed_columns
  • Die ctext-Spalte in der Kompatibilitätsansicht syscomments.

  • Die Ausgabe der sp_helptext-Prozedur.

  • Die folgenden Spalten in den Informationsschemasichten:

    • INFORMATION_SCHEMA.CHECK_CONSTRAINTS.CHECK_CLAUSE
    • INFORMATION_SCHEMA.DOMAINS.DOMAIN_DEFAULT
    • INFORMATION_SCHEMA.ROUTINES.ROUTINE_DEFINITION
    • INFORMATION_SCHEMA.COLUMNS.COLUMN_DEFAULT
    • INFORMATION_SCHEMA.ROUTINE_COLUMNS.COLUMN_DEFAULT
    • INFORMATION_SCHEMA.VIEWS.VIEW_DEFINITION
  • OBJECT_DEFINITION()-Funktion

  • Der in der password_hash-Spalte von sys.sql_logins gespeicherte Wert. Benutzern, die nicht über CONTROL SERVER verfügen oder mit SQL Server 2022 die Berechtigung VIEW ANY CRYPTOGRAPHICALLY SECURED DEFINITION beginnen, wird in dieser Spalte ein NULL-Wert angezeigt.

Hinweis

Die SQL-Definitionen von integrierten Systemprozeduren und -funktionen sind über die sys.system_sql_modules-Katalogsicht, die gespeicherte Prozedur sp_helptext und mithilfe der OBJECT_DEFINITION()-Funktion öffentlich sichtbar.

Hinweis

Die gespeicherte Systemprozedur sp_helptext wird in Azure Synapse Analytics nicht unterstützt. Verwenden Sie stattdessen die sys.sql_modules-Objektkatalogsicht.

Allgemeine Prinzipien der Sichtbarkeit von Metadaten

Es folgen einige allgemeine Prinzipien, die im Hinblick auf die Sichtbarkeit von Metadaten beachtet werden müssen:

  • Feste Rollen und implizite Berechtigungen

  • Geltungsbereich von Berechtigungen

  • Vorrang von DENY

  • Sichtbarkeit der Metadaten von Teilkomponenten

Feste Rollen und implizite Berechtigungen

Auf welche Metadaten feste Rollen zugreifen können, richtet sich nach den impliziten Berechtigungen der jeweiligen Rolle.

Geltungsbereich von Berechtigungen

Berechtigungen in einem Geltungsbereich implizieren die Sichtbarkeit von Metadaten in diesem Geltungsbereich sowie in allen eingeschlossenen Geltungsbereichen. So impliziert z. B. die SELECT-Berechtigung für ein Schema, dass der Berechtigungsempfänger die SELECT-Berechtigung auch für alle in diesem Schema enthaltenen sicherungsfähigen Elemente hat. Das Erteilen der SELECT-Berechtigung für ein Schema ermöglicht es einem Benutzer also, die Metadaten des Schemas und aller Tabellen, Sichten, Funktionen, Prozeduren, Warteschlangen, Synonyme, Typen und XML-Schemasammlungen anzuzeigen, die im Schema enthalten sind. Weitere Informationen zu Bereichen finden Sie unter Berechtigungshierarchie (Datenbank-Engine).

Hinweis

Die UNMASK-Berechtigung wirkt sich nicht auf die Sichtbarkeit von Metadaten aus: Durch das Erteilen von UNMASK allein werden keine Metadaten offengelegt. UNMASK muss immer von einer SELECT-Berechtigung begleitet werden, damit sie wirksam ist. Beispiel: Das Erteilen von UNMASK für den Datenbankbereich und von SELECT für eine einzelne Tabelle führt dazu, dass der Benutzer nur die Metadaten der Tabelle sehen kann, für die er die SELECT-Berechtigung hat.

Vorrang von DENY

DENY hat üblicherweise Vorrang vor anderen Berechtigungen. Wenn einem Datenbankbenutzer z. B. die EXECUTE-Berechtigung für ein Schema erteilt, 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 zudem die EXECUTE-Berechtigung für ein Schema verweigert wurde, ihm aber die EXECUTE-Berechtigung für eine gespeicherte Prozedur in diesem Schema erteilt wurde, kann der Benutzer die Metadaten für diese gespeicherte Prozedur nicht anzeigen.

Wenn in einem anderen Beispiel einem Benutzer die EXECUTE-Berechtigung erteilt und verweigert wurde (was über die verschiedenen Rollenmitgliedschaften möglich ist), dann hat DENY Vorrang, und der Benutzer kann die Metadaten für die gespeicherte Prozedur nicht anzeigen.

Sichtbarkeit der Metadaten von Teilkomponenten

Die Sichtbarkeit von Teilkomponenten wie z. B. Indizes, CHECK-Einschränkungen und Triggern wird durch die Berechtigungen für das übergeordnete Element bestimmt. Für diese Teilkomponenten gibt es keine erteilbaren Berechtigungen. Wenn einem Benutzer z. B. einige Berechtigungen für eine Tabelle erteilt wurden, kann der Benutzer die Metadaten für Tabellen, Spalten, Indizes, CHECK-Einschränkungen, Trigger und andere Teilkomponenten der Tabelle anzeigen. Ein weiteres Beispiel ist das Erteilen von SELECT nur für eine einzige Spalte einer bestimmten Tabelle. Damit kann der Berechtigungsempfänger die Metadaten der gesamten Tabelle anzeigen, einschließlich aller Spalten. Sie können sich dies folgendermaßen vorstellen: Die Berechtigung VIEW DEFINITION funktioniert nur auf der Ebene der Entität (in diesem Fall der Tabelle) und ist für Unterentitätslisten (z. B. Spalten- oder Sicherheitsausdrücke) nicht verfügbar.

Der folgende Code veranschaulicht dieses Verhalten:

CREATE TABLE t1
(
    c1 int,
    c2 varchar
 );
GO
CREATE USER testUser WITHOUT LOGIN;
GO

EXECUTE AS USER='testUser';
SELECT OBJECT_SCHEMA_NAME(object_id), OBJECT_NAME(object_id), name FROM sys.columns;
SELECT * FROM sys.tables
-- this returns no data, as the user has no permissions
REVERT;
GO

-- granting SELECT on only 1 column of the table:
GRANT SELECT ON t1(c1) TO testUser;
GO
EXECUTE AS USER='testUser';
SELECT OBJECT_SCHEMA_NAME(object_id), OBJECT_NAME(object_id), name FROM sys.columns;
SELECT * FROM sys.tables
-- this returns metadata for all columns of the table and thge table itself
REVERT;
GO

DROP TABLE t1
DROP USER testUser

Metadaten, auf die alle Datenbankbenutzer Zugriff haben

Auf einige Metadaten muss der Zugriff durch alle Benutzer in einer bestimmten Datenbank gewährt werden. So haben z. B. Dateigruppen keine übertragbaren Berechtigungen. Deshalb kann einem Benutzer nicht die Berechtigung zum Zugriff auf die Metadaten einer Dateigruppe erteilt werden. Allerdings muss jeder Benutzer, der eine Tabelle erstellen kann, auch in der Lage sein, auf die Metadaten der Dateigruppe zuzugreifen, um die ON filegroup - oder TEXTIMAGE_ON filegroup -Klauseln der CREATE TABLE-Anweisung zu verwenden.

Die von den Funktionen DB_ID() und DB_NAME() zurückgegebenen Metadaten sind für alle Benutzer sichtbar.

In der folgenden Liste werden die Katalogsichten aufgeführt, die für die public-Rolle sichtbar sind.

sys.partition_functions

sys.partition_schemes

sys.filegroups

sys.database_files

sys.partitions

sys.schemas

sys.sql_dependencies

sys.parameter_type_usages

sys.partition_range_values

sys.data_spaces

sys.destination_data_spaces

sys.allocation_units

sys.messages

sys.configurations

sys.type_assembly_usages

sys.column_type_usages

Weitere Informationen

GRANT (Transact-SQL)
DENY (Transact-SQL)
REVOKE (Transact-SQL)
EXECUTE AS-Klausel (Transact-SQL)
Katalogsichten (Transact-SQL)
Kompatibilitätssichten (Transact-SQL)