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 myTable
hat, 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 oderNULL
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 myTable
verfü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 vonsys.servers
gespeicherte Wert. Einem Benutzer, der keine ALTER ANY LINKED SERVER-Berechtigung hat, wird in dieser Spalte einNULL
-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ätsansichtsyscomments
.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 einNULL
-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)