Konfigurieren der Sichtbarkeit von MetadatenMetadata Visibility Configuration

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.The visibility of metadata is limited to securables that a user either owns or on which the user has been granted some permission. Beispielsweise gibt die folgende Abfrage eine Zeile zurück, wenn dem Benutzer eine Berechtigung, wie etwa SELECT, für die myTable-Tabelle erteilt wurde.For example, the following query returns a row if the user has been granted a permission such as SELECT or INSERT on the table myTable.

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

Wenn der Benutzer jedoch keine Berechtigungen für myTablehat, gibt die Abfrage ein leeres Resultset zurück.However, if the user does not have any permission on myTable, the query returns an empty result set.

Gültigkeitsbereich und Auswirkung der Konfiguration der MetadatensichtbarkeitScope and Impact of Metadata Visibility Configuration

Die Konfiguration der Metadatensichtbarkeit gilt nur für die folgenden sicherungsfähigen Elemente:Metadata visibility configuration only applies to the following securables.

KatalogsichtenCatalog views DatenbankmodulDatabase Engine sp_help stored procedures sp_help stored procedures
Metadaten ausgebende integrierte FunktionenMetadata exposing built-in functions InformationsschemasichtenInformation schema views
KompatibilitätssichtenCompatibility views Erweiterte EigenschaftenExtended properties

Die Konfiguration der Metadatensichtbarkeit gilt nicht für die folgenden sicherungsfähigen Elemente:Metadata visibility configuration does not apply to the following securables.

ProtokollversandsystemtabellenLog shipping system tables SQL ServerSQL Server -Agents Agent system tables
Systemtabellen für Datenbank-WartungspläneDatabase maintenance plan system tables SicherungssystemtabellenBackup system tables
ReplikationssystemtabellenReplication system tables Gespeicherte SQL ServerSQL Server sp_help -Prozeduren für Replikations- und -AgentsReplication and SQL ServerSQL Server Agent sp_help stored procedures

Der eingeschränkte Metadatenzugriff bedeutet Folgendes:Limited metadata accessibility means the following:

  • Anwendungen, die einen public -Metadatenzugriff voraussetzen, funktionieren nicht.Applications that assume public metadata access will break.

  • Abfragen für Systemsichten geben möglicherweise nur eine Teilmenge von Zeilen zurück oder manchmal ein leeres Resultset.Queries on system views might only return a subset of rows, or sometimes an empty result set.

  • Metadaten ausgebende integrierte Funktionen, wie z. B. OBJECTPROPERTYEX, können NULL zurückgeben.Metadata-emitting, built-in functions such as OBJECTPROPERTYEX may return NULL.

  • Die gespeicherten DatenbankmodulDatabase Engine sp_help geben möglicherweise nur eine Teilmenge von Zeilen oder NULL zurück.The DatenbankmodulDatabase Engine sp_help stored procedures might return only a subset of rows, or NULL.

    SQL-Module, wie z. B. gespeicherte Prozeduren und Trigger, werden im Sicherheitskontext des Aufrufers ausgeführt und haben deshalb einen eingeschränkten Metadatenzugriff.SQL modules, such as stored procedures and triggers, run under the security context of the caller and, therefore, have limited metadata accessibility. 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.For example, in the following code, when the stored procedure tries to access metadata for the table myTable on which the caller has no rights, an empty result set is returned. In früheren Versionen von SQL ServerSQL Serverwird eine Zeile zurückgegeben.In earlier releases of SQL ServerSQL Server, a row is returned.

CREATE PROCEDURE assumes_caller_can_access_metadata  
BEGIN  
SELECT name, id   
FROM sysobjects   
WHERE name = 'myTable';  
END;  
GO  

Um Aufrufern das Anzeigen von Metadaten zu ermöglichen, können Sie ihnen die VIEW DEFINITION-Berechtigung für einen geeigneten Gültigkeitsbereich erteilen: für die Objektebene, für die Datenbankebene oder für die Serverebene.To allow callers to view metadata, you can grant the callers VIEW DEFINITION permission at an appropriate scope: object level, database level or server level. Wenn der Aufrufer im vorigen Beispiel über die VIEW DEFINITION-Berechtigung für myTable verfügt, gibt die gespeicherte Prozedur eine Zeile zurück.Therefore, in the previous example, if the caller has VIEW DEFINITION permission on myTable, the stored procedure returns a row. Weitere Informationen finden Sie unter GRANT (Transact-SQL) und GRANT (Datenbankberechtigungen)(Transact-SQL).For more information, see GRANT (Transact-SQL) and GRANT Database Permissions (Transact-SQL).

Sie können die gespeicherte Prozedur auch so ändern, dass sie unter den Anmeldeinformationen des Besitzers ausgeführt wird.You can also modify the stored procedure so that it executes under the credentials of the owner. 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.When the procedure owner and the table owner are the same owner, ownership chaining applies, and the security context of the procedure owner enables access to the metadata for myTable. In diesem Szenario gibt der folgende Code eine Zeile aus Metadaten an den Aufrufer zurück.Under this scenario, the following code returns a row of metadata to the caller.

Hinweis

Das folgende Beispiel verwendet die sys.objects -Katalogsicht anstelle der sys.sysobjects -Kompatibilitätssicht.The following example uses the sys.objects catalog view instead of the sys.sysobjects compatibility view.

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.You can use EXECUTE AS to temporarily switch to the security context of the caller. Weitere Informationen finden Sie unter EXECUTE AS (Transact-SQL).For more information, see EXECUTE AS (Transact-SQL).

Vorteile und Einschränkungen der Konfiguration der MetadatensichtbarkeitBenefits and Limits of Metadata Visibility Configuration

Die Konfiguration der Metadatensichtbarkeit kann eine wichtige Rolle in Ihrem allgemeinen Sicherheitsplan spielen.Metadata visibility configuration can play an important role in your overall security plan. Es gibt jedoch Fälle, in denen ein technisch versierter Benutzer das Anzeigen einiger Metadaten erzwingen kann, wenn er das will.However, there are cases in which a skilled and determined user can force the disclosure of some metadata. Wir empfehlen deshalb, dass Sie neben anderen Schutzmaßnahmen Metadatenberechtigungen bereitstellen.We recommend that you deploy metadata permissions as one of many defenses-in-depth.

Es ist theoretisch möglich, die Ausgabe von Metadaten in Fehlermeldungen zu erzwingen, indem die Reihenfolge der Prädikatauswertung in Abfragen verändert wird.It is theoretically possible to force the emission of metadata in error messages by manipulating the order of predicate evaluation in queries. Die Möglichkeit solcher Trial and Error-Angriffe ist nicht SQL ServerSQL Server-spezifisch.The possibility of such trial-and-error attacks is not specific to SQL ServerSQL Server. Dies wird durch die in relationaler Algebra zulässigen, assoziativen und kommutativen Transformationen impliziert.It is implied by the associative and commutative transformations permitted in relational algebra. Sie können dieses Risiko verringern, indem Sie die in Fehlermeldungen zurückgegebenen Informationen einschränken.You can mitigate this risk by limiting the information returned in error messages. Um die Sichtbarkeit von Metadaten auf diese Weise noch stärker einzuschränken, können Sie den Server mit dem Ablaufverfolgungsflag 3625 starten.To further restrict the visibility of metadata in this way, you can start the server with trace flag 3625. Mit diesem Ablaufverfolgungsflag wird die in Fehlermeldungen angezeigte Menge an Informationen eingeschränkt.This trace flag limits the amount of information shown in error messages. Auf diese Weise können Sie die erzwungene Anzeige von Daten verhindern.In turn, this helps to prevent forced disclosures. Der Nachteil hierbei ist jedoch, dass die Fehlermeldungen nicht ausführlich sind und sie u. U. nicht zu Debugzwecken verwendet werden können.The tradeoff is that error messages will be terse and might be difficult to use for debugging purposes. Weitere Informationen finden Sie unter Startoptionen für den Datenbankmoduldienst und Ablaufverfolgungsflags (Transact-SQL).For more information, see Database Engine Service Startup Options and Trace Flags (Transact-SQL).

Für die folgenden Metadaten ist die erzwungene Anzeige nicht möglich:The following metadata is not subject to forced disclosure:

  • Der in der provider_string -Spalte von sys.serversgespeicherte Wert.The value stored in the provider_string column of sys.servers. Ein Benutzer, der keine ALTER ANY LINKED SERVER-Berechtigung hat, sieht in dieser Spalte einen NULL-Wert.A user that does not have ALTER ANY LINKED SERVER permission will see a NULL value in this column.

  • Quellendefinition eines benutzerdefinierten Objekts wie z. B. eine gespeicherte Prozedur oder ein Trigger.Source definition of a user-defined object such as a stored procedure or trigger. Der Quellencode ist nur sichtbar, wenn eine der folgenden Aussagen zutrifft:The source code is visible only when one of the following is true:

    • Der Benutzer hat die VIEW DEFINITION-Berechtigung für das Objekt.The user has VIEW DEFINITION permission on the object.

    • Dem Benutzer wurde nicht die VIEW DEFINITION-Berechtigung für das Objekt verweigert, und er hat die CONTROL-, ALTER- oder TAKE OWNERSHIP-Berechtigung für das Objekt.The user has not been denied VIEW DEFINITION permission on the object and has CONTROL, ALTER, or TAKE OWNERSHIP permission on the object. Alle anderen Benutzer sehen NULL.All other users will see NULL.

  • Die Definitionsspalten in den folgenden Katalogsichten:The definition columns found in the following catalog views:

    sys.all_sql_modulessys.all_sql_modules sys.sql_modulessys.sql_modules
    sys.server_sql_modulessys.server_sql_modules sys.check_constraintssys.check_constraints
    sys.default_constraintssys.default_constraints sys.computed_columnssys.computed_columns
    sys.numbered_proceduressys.numbered_procedures
  • Die ctext -Spalte in der syscomments -Kompatibilitätssicht.The ctext column in the syscomments compatibility view.

  • Die Ausgabe der sp_helptext -Prozedur.The output of the sp_helptext procedure.

  • Die folgenden Spalten in den Informationsschemasichten:The following columns in the information schema views:

    INFORMATION_SCHEMA.CHECK_CONSTRAINTS.CHECK_CLAUSEINFORMATION_SCHEMA.CHECK_CONSTRAINTS.CHECK_CLAUSE INFORMATION_SCHEMA.COLUMNS.COLUMN_DEFAULTINFORMATION_SCHEMA.COLUMNS.COLUMN_DEFAULT
    INFORMATION_SCHEMA.DOMAINS.DOMAIN_DEFAULTINFORMATION_SCHEMA.DOMAINS.DOMAIN_DEFAULT INFORMATION_SCHEMA.ROUTINE_COLUMNS.COLUMN_DEFAULTINFORMATION_SCHEMA.ROUTINE_COLUMNS.COLUMN_DEFAULT
    INFORMATION_SCHEMA.ROUTINES.ROUTINE_DEFINITIONINFORMATION_SCHEMA.ROUTINES.ROUTINE_DEFINITION INFORMATION_SCHEMA.VIEWS.VIEW_DEFINITIONINFORMATION_SCHEMA.VIEWS.VIEW_DEFINITION
  • OBJECT_DEFINITION()-FunktionOBJECT_DEFINITION() function

  • Der in der password_hash-Spalte von sys.sql_loginsgespeicherte Wert.The value stored in the password_hash column of sys.sql_logins. Einem Benutzer, der nicht über die CONTROL SERVER-Berechtigung verfügt, wird in dieser Spalte ein NULL-Wert angezeigt.A user that does not have CONTROL SERVER permission will see a NULL value in this column.

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.The SQL definitions of built-in system procedures and functions are publicly visible through the sys.system_sql_modules catalog view, the sp_helptext stored procedure, and the OBJECT_DEFINITION() function.

Allgemeine Prinzipien der Sichtbarkeit von MetadatenGeneral Principles of Metadata Visibility

Es folgen einige allgemeine Prinzipien, die im Hinblick auf die Sichtbarkeit von Metadaten beachtet werden müssen:The following are some general principles to consider regarding metadata visibility:

  • Feste Rollen und implizite BerechtigungenFixed roles implicit permissions

  • Geltungsbereich von BerechtigungenScope of permissions

  • Vorrang von DENYPrecedence of DENY

  • Sichtbarkeit der Metadaten von TeilkomponentenVisibility of subcomponent metadata

Feste Rollen und implizite BerechtigungenFixed Roles and Implicit Permissions

Auf welche Metadaten feste Rollen zugreifen können, richtet sich nach den impliziten Berechtigungen der jeweiligen Rolle.Metadata that can be accessed by fixed roles depends upon their corresponding implicit permissions.

Geltungsbereich von BerechtigungenScope of Permissions

Berechtigungen in einem Geltungsbereich implizieren die Sichtbarkeit von Metadaten in diesem Geltungsbereich sowie in allen eingeschlossenen Geltungsbereichen.Permissions at one scope imply the ability to see metadata at that scope and at all enclosed scopes. So impliziert z. B. die SELECT-Berechtigung für ein Schema, dass der Empfänger dieser Berechtigung die SELECT-Berechtigung auch für alle in diesem Schema enthaltenen sicherungsfähigen Elemente hat.For example, SELECT permission on a schema implies that the grantee has SELECT permission on all securables that are contained by that schema. Das Erteilen der SELECT-Berechtigung für ein Schema ermöglicht deshalb einem Benutzer, die Metadaten des Schemas sowie aller Tabellen, Sichten, Funktionen, Prozeduren, Warteschlangen, Synonyme, Typen und XML-Schemaauflistungen, die im Schema enthalten sind, anzuzeigen.The granting of SELECT permission on a schema therefore enables a user to see the metadata of the schema and also all tables, views, functions, procedures, queues, synonyms, types, and XML schema collections within it. Weitere Informationen zu Bereichen finden Sie unter Berechtigungshierarchie (Datenbankmodul).For more information about scopes, see Permissions Hierarchy (Database Engine).

Vorrang von DENYPrecedence of DENY

DENY hat üblicherweise Vorrang vor anderen Berechtigungen.DENY typically takes precedence over other permissions. Wenn einem Datenbankbenutzer z. B. die EXECUTE-Berechtigung für ein Schema erteilt wurde, ihm aber die EXECUTE-Berechtigung für eine gespeicherte Prozedur in diesem Schema verweigert wurde, kann der Benutzer die Metadaten für diese gespeicherte Prozedur nicht anzeigen.For example, if a database user is granted EXECUTE permission on a schema but has been denied EXECUTE permission on a stored procedure in that schema, the user cannot view the metadata for that stored procedure.

Wenn andererseits einem Benutzer 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 sehen.Additionally, if a user is denied EXECUTE permission on a schema but has been granted EXECUTE permission on a stored procedure in that schema, the user cannot view the metadata for that stored procedure.

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.For another example, if a user has been granted and denied EXECUTE permission on a stored procedure, which is possible through your various role memberships, DENY takes precedence and the user cannot view the metadata of the stored procedure.

Sichtbarkeit der Metadaten von TeilkomponentenVisibility of Subcomponent Metadata

Die Sichtbarkeit von Teilkomponenten wie z. B. Indizes, CHECK-Einschränkungen und Triggern wird durch die Berechtigungen für das übergeordnete Element bestimmt.The visibility of subcomponents, such as indexes, check constraints, and triggers is determined by permissions on the parent. Für diese Teilkomponenten gibt es keine erteilbaren Berechtigungen.These subcomponents do not have grantable permissions. 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.For example, if a user has been granted some permission on a table, the user can view the metadata for the tables, columns, indexes, check constraints, triggers, and other such subcomponents.

Metadaten, auf die alle Datenbankbenutzer Zugriff habenMetadata That Is Accessible to All Database Users

Auf einige Metadaten muss der Zugriff durch alle Benutzer in einer bestimmten Datenbank gewährt werden.Some metadata must be accessible to all users in a specific database. So haben z. B. Dateigruppen keine übertragbaren Berechtigungen. Deshalb kann einem Benutzer nicht die Berechtigung zum Zugriff auf die Metadaten einer Dateigruppe erteilt werden.For example, filegroups do not have conferrable permissions; therefore, a user cannot be granted permission to view the metadata of a filegroup. 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.However, any user that can create a table must be able to access filegroup metadata to use the ON filegroup or TEXTIMAGE_ON filegroup clauses of the CREATE TABLE statement.

Die von den Funktionen DB_ID() und DB_NAME() zurückgegebenen Metadaten sind für alle Benutzer sichtbar.The metadata that is returned by the DB_ID() and DB_NAME() functions is visible to all users.

In der folgenden Tabelle sind die Katalogsichten aufgeführt, die für die public -Rolle sichtbar sind.The following table lists the catalog views that are visible to the public role.

sys.partition_functionssys.partition_functions sys.partition_range_valuessys.partition_range_values
sys.partition_schemessys.partition_schemes sys.data_spacessys.data_spaces
sys.filegroupssys.filegroups sys.destination_data_spacessys.destination_data_spaces
sys.database_filessys.database_files sys.allocation_unitssys.allocation_units
sys.partitionssys.partitions sys.messagessys.messages
sys.schemassys.schemas sys.configurationssys.configurations
sys.sql_dependenciessys.sql_dependencies sys.type_assembly_usagessys.type_assembly_usages
sys.parameter_type_usagessys.parameter_type_usages sys.column_type_usagessys.column_type_usages

Siehe auchSee Also

GRANT (Transact-SQL) GRANT (Transact-SQL)
DENY (Transact-SQL) DENY (Transact-SQL)
REVOKE (Transact-SQL) REVOKE (Transact-SQL)
EXECUTE AS-Klausel (Transact-SQL) EXECUTE AS Clause (Transact-SQL)
Katalogsichten (Transact-SQL) Catalog Views (Transact-SQL)
Kompatibilitätssichten (Transact-SQL) Compatibility Views (Transact-SQL)