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.
Gilt für:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL-Datenbank in Microsoft Fabric
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.
Die folgende Abfrage gibt beispielsweise eine Zeile zurück, wenn der Benutzer eine Berechtigung wie SELECT oder INSERT in der Tabelle myTableerteilt.
SELECT name, object_id
FROM sys.tables
WHERE name = N'myTable';
GO
Wenn der Benutzer jedoch keine Berechtigung auf myTable hat, gibt die Abfrage ein leeres Resultset zurück.
Umfang und Auswirkungen der Metadaten-Sichtbarkeitskonfiguration
Die Metadatensichtbarkeitskonfiguration gilt nur für die folgenden Sicherheitsobjekte:
- Katalogansichten
- Metadaten ausgebende integrierte Funktionen
- Kompatibilitätssichten
- Gespeicherte Prozeduren des Datenbankmoduls
sp_help - Informationsschemasichten
- Erweiterte Eigenschaften
Die Metadaten-Sichtbarkeitseinstellungen gelten nicht für die folgenden Sicherheitsobjekte:
- Protokollversandsystemtabellen
- Systemtabellen für Datenbank-Wartungspläne
- Replikationssystemtabellen
- SQL Server-Agent-Systemtabellen
- Sicherungssystemtabellen
- Gespeicherte Prozeduren für Replikation und SQL Server-Agent
sp_help
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
NULLzurückgeben. - Die gespeicherten
sp_help-Prozeduren der Datenbank-Engine geben möglicherweise nur eine Teilmenge von Zeilen oderNULLzurück. - Daher funktionieren Anwendungen, die von einem öffentlichen Metadatenzugriff ausgehen, nicht mehr.
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
Damit Aufrufer Metadaten anzeigen können, können Sie den Aufrufen VIEW DEFINITION die Berechtigung erteilen, oder in SQL Server 2022 (16.x) und höheren Versionen, entweder VIEW SECURITY DEFINITION oder VIEW PERFORMANCE DEFINITION in einem geeigneten Bereich: Objektebene, Datenbankebene oder Serverebene. Daher gibt die gespeicherte Prozedur im vorherigen Beispiel eine Zeile zurück, wenn der Aufrufer über die Berechtigung VIEW DEFINITION auf myTable verfügt. Weitere Informationen finden Sie unter GRANT - und GRANT-Datenbankberechtigungen.
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 verwenden EXECUTE AS , um vorübergehend zum Sicherheitskontext des Aufrufers zu wechseln. Weitere Informationen finden Sie unter EXECUTE AS.
Vorteile und Beschränkungen der Metadatensichtbarkeitskonfiguration
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.
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 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 Kompromiss besteht darin, dass Fehlermeldungen knapp sind und für Debugging-Zwecke möglicherweise schwer zu nutzen sind. Weitere Informationen finden Sie unter Startoptionen und Ablaufverfolgungskennzeichnungen des Datenbankmoduldiensts.
Die folgenden Metadaten unterliegen nicht der erzwungenen Offenlegung:
Der in der
provider_string-Spalte vonsys.serversgespeicherte Wert. Ein Benutzer, der nicht dieALTER ANY LINKED SERVERBerechtigung hat, sieht einenNULLWert in der Spalte.Quellendefinition eines benutzerdefinierten Objekts wie z. B. eine gespeicherte Prozedur oder ein Trigger. Der Quellcode ist nur sichtbar, wenn eine der folgenden Bedingungen zutrifft:
Der Benutzer verfügt
VIEW DEFINITIONüber die Berechtigung für das Objekt.Dem Benutzer wurde
VIEW DEFINITIONdie Berechtigung für das Objekt nicht verweigert und verfügt über die BerechtigungCONTROL,ALTERoderTAKE OWNERSHIPfür das Objekt. Alle anderen Benutzer sehenNULL.
Die Definitionsspalten in den folgenden Katalogsichten:
sys.all_sql_modulessys.server_sql_modulessys.default_constraintssys.numbered_proceduressys.sql_modulessys.check_constraintssys.computed_columns
Die
ctext-Spalte in der Kompatibilitätsansichtsyscomments.Die Ausgabe der
sp_helptext-Prozedur.Die folgenden Spalten in den Informationsschemasichten:
INFORMATION_SCHEMA.CHECK_CONSTRAINTS.CHECK_CLAUSEINFORMATION_SCHEMA.DOMAINS.DOMAIN_DEFAULTINFORMATION_SCHEMA.ROUTINES.ROUTINE_DEFINITIONINFORMATION_SCHEMA.COLUMNS.COLUMN_DEFAULTINFORMATION_SCHEMA.ROUTINE_COLUMNS.COLUMN_DEFAULTINFORMATION_SCHEMA.VIEWS.VIEW_DEFINITION
OBJECT_DEFINITION()FunktionDer in der
password_hash-Spalte vonsys.sql_loginsgespeicherte Wert. Ein Benutzer, der nicht über dieCONTROL SERVER- oder in SQL Server 2022 (16.x) und höheren Versionen über dieVIEW ANY CRYPTOGRAPHICALLY SECURED DEFINITION-Berechtigung verfügt, sieht einenNULL-Wert in dieser Spalte.
Die SQL-Definitionen integrierter Systemprozeduren und -funktionen sind öffentlich über die sys.system_sql_modules Katalogansicht, die sp_helptext gespeicherte Prozedur und die OBJECT_DEFINITION() Funktion sichtbar.
Hinweis
Die gespeicherte Systemprozedur sp_helptext wird in Azure Synapse Analytics nicht unterstützt. Verwenden Sie stattdessen die sys.sql_modules-Objektkatalogsicht.
Allgemeine Grundsätze 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
- Rangfolge 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. Beispielsweise SELECT bedeutet die Berechtigung für ein Schema, dass der Grantee SELECT über die Berechtigung für alle sicherungsfähigen Elemente verfügt, die in diesem Schema enthalten sind. Die Gewährung von SELECT Berechtigungen 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 (Datenbank-Engine).
Hinweis
Die UNMASK Berechtigung wirkt sich nicht auf die Sichtbarkeit von Metadaten aus: Die Gewährung UNMASK allein gibt keine Metadaten offen.
UNMASK muss immer von einer SELECT Berechtigung begleitet werden, um irgendwelche Auswirkungen zu haben. Beispiel: Die Gewährung UNMASK des Datenbankbereichs und die Gewährung SELECT einer einzelnen Tabelle hat das Ergebnis, dass der Benutzer nur die Metadaten der einzelnen Tabelle sehen kann, aus der sie auswählen können, nicht von anderen.
Vorrang von DENY
DENY hat in der Regel Vorrang vor anderen Berechtigungen. Wenn z. B. einem Datenbankbenutzer berechtigungen für ein Schema erteilt EXECUTE , aber die Berechtigung für eine gespeicherte Prozedur in diesem Schema verweigert EXECUTE wurde, kann der Benutzer die Metadaten für diese gespeicherte Prozedur nicht anzeigen.
Wenn einem Benutzer die Berechtigung für ein Schema verweigert wird EXECUTE, ihm jedoch die Berechtigung für eine gespeicherte Prozedur in diesem Schema gewährt wird EXECUTE, kann er die Metadaten für diese gespeicherte Prozedur nicht anzeigen.
Ein weiteres Beispiel: Wenn einem Benutzer über verschiedene Rollenmitgliedschaften die Berechtigung verliehen und gleichzeitig verweigert wird, hat die verweigerte Berechtigung EXECUTE Vorrang, und der Benutzer kann die Metadaten der gespeicherten Prozedur nicht anzeigen.
Sichtbarkeit der Metadaten von Teilkomponenten
Die Sichtbarkeit von Unterkomponenten, z. B. Indizes, Checkeinschränkungen und Trigger, werden durch Berechtigungen für das übergeordnete Element bestimmt. Diese Unterkomponenten verfügen nicht über zulässige 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 die Gewährung SELECT nur für eine einzelne Spalte einer bestimmten Tabelle: Dadurch kann der Grantee die Metadaten der gesamten Tabelle anzeigen, einschließlich aller Spalten. Eine Möglichkeit, sich dies vorzustellen, besteht darin, dass die VIEW DEFINITION Berechtigung nur auf Entitätsebene (in diesem Fall die Tabelle) funktioniert und für Unterentitätslisten (z. B. Spalten- oder Sicherheitsausdrücke) nicht verfügbar ist.
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 the table itself
;
REVERT;
GO
DROP TABLE t1;
DROP USER testUser;
Metadaten, auf die für alle Datenbankbenutzer zugegriffen werden kann
Auf einige Metadaten muss der Zugriff durch alle Benutzer in einer bestimmten Datenbank gewährt werden. 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 <filegroup>- oder TEXTIMAGE_ON <filegroup>-Klauseln der CREATE TABLE-Anweisung zu verwenden.
Die Metadaten, die von den DB_ID() Und-Funktionen DB_NAME() zurückgegeben werden, sind für alle Benutzer sichtbar.
In der folgenden Liste werden die Katalogsichten aufgeführt, die für die public-Rolle sichtbar sind.
sys.allocation_unitssys.column_type_usagessys.configurationssys.data_spacessys.database_filessys.destination_data_spacessys.filegroupssys.messagessys.parameter_type_usagessys.partition_functionssys.partition_range_valuessys.partition_schemessys.partitionssys.schemassys.sql_dependenciessys.type_assembly_usages