Konfiguracja widoczność metadanych

W starszych wersjach SQL Server, metadane dla wszystkich obiektów w bazie danych jest widoczne dla członków public rolę.Oznacza to, że każdy użytkownik, który jest zalogowany do wystąpienie SQL Server można wyświetlić metadane dla każdego obiektu na serwerze, nawet te obiekty, których użytkownik nie ma żadnych praw.

W SQL Server 2005 i później, widoczność metadane jest ograniczony do securables, że albo właścicielem jest użytkownik lub na który została przyznana użytkownika niektóre uprawnienia.Na przykład, kwerenda zwraca zaznacz wiersz, jeśli użytkownik ma uprawnienia takie jak następujące lub wstawianie tabela myTable.

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

Jednakże jeśli użytkownik nie ma żadnych uprawnień myTable, kwerenda zwraca zestaw wyników puste.

Zakresu i skutków konfiguracji widoczność metadanych

Konfiguracja widoczność metadanych dotyczy tylko następujących securables.

Wykaz widoków

Aparat baz danych sp_help stored procedures

Uwidacznianie funkcje wbudowane metadanych

Informacje o schemacie widoków

Widoki zgodności

Właściwości rozszerzone

Konfiguracja widoczność metadanych nie dotyczą następujących securables.

Dziennik wysyłki tabele systemowe

SQL Server Tabele systemowe Agent

Tabele systemowe planu konserwacji bazy danych

Tabele systemowe kopii zapasowej

Tabele systemowe replikacji

Replikacja i SQL Server agenta sp_help procedur przechowywanych

Metadane ograniczonej ułatwienia dostępu oznacza:

  • Aplikacje, które przyjęto publicznych dostęp do metadane zostaną przerwane.

  • Kwerendy dla widoków systemu może zwrócić tylko podzbiór wierszy, lub czasem pusty zestaw wyników.

  • funkcje wbudowane, wysyłających metadanych, takich jak OBJECTPROPERTYEX może zwrócić NULL.

  • The Aparat baz danych sp_help stored procedures might return only a subset of rows, or NULL.

Moduły SQL, takie jak procedury przechowywane i wyzwalacze, uruchamiane w kontekście zabezpieczeń wywołującego i dlatego ograniczonej ułatwienia dostępu metadane.Na przykład w poniższym kodzie, próba uzyskania dostępu do tabela metadane procedura składowana myTable na której obiekt wywołujący nie ma żadnych praw pusty zwróceniu zestaw wyników.W starszych wersjach SQL Server, wiersz jest zwracany.

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

Aby umożliwiają wyświetlanie metadanych, można udzielić wywołującym VIEW DEFINITION uprawnienia na odpowiednie zakres: poziomem obiektu, poziom bazy danych lub na poziomie serwera.Zatem w poprzednim przykładzie, jeśli obiekt wywołujący ma uprawnienie VIEW DEFINITION na myTable, procedura składowana zwraca wiersz.Aby uzyskać więcej informacji, zobacz UDZIEL (Transact-SQL) i UDZIEL uprawnień do bazy danych (Transact-SQL).

Można także modyfikować procedura składowana, aby ją wykonuje się zgodnie z poświadczenia właściciela.Podczas procedury właściciel lub właściciel tabela są tego samego właściciela, tworzenie łańcucha własności dotyczy i kontekstu zabezpieczeń właściciel procedury umożliwia dostęp do metadane dla myTable.W tym scenariuszu następujący kod zwraca wiersz metadane do obiektu wywołującego.

Ostrzeżenie

W poniższym przykładzie użyto sys.objects widok zamiast katalogu sys.sysobjects widok zgodności.

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

Ostrzeżenie

WYKONYWANIE jako można tymczasowo przełączyć kontekst zabezpieczeń wywołującego.Aby uzyskać więcej informacji, zobacz WYKONANIE jako języka Transact-SQL).

Aby uzyskać więcej informacji na temat Tworzenie łańcucha własności, zobacz Łańcuchy własności.

Korzyści i ograniczeń konfiguracji widoczność metadanych

Konfiguracja widoczność metadanych można odgrywają ważną rolę w ogólnego planu zabezpieczeń.Istnieją przypadki, w których wykwalifikowanej i określony użytkownik może wymusić ujawnienia niektóre metadane.Zaleca się, aby wdrożyć uprawnienia metadane jako jedną z wielu obronę dodatkami.

Teoretycznie możliwe jest wymusić emisji metadane komunikatów o błędach przez manipulowanie kolejność predykatu w kwerendach.Możliwość taka ataków prób i błędów nie jest specyficzny dla SQL Server.Jest ono implikowane przez przekształcenia asocjacyjnych i przemienne dozwolone w relacyjnych algebraiczną.Aby zmniejszyć ryzyko, ograniczając informacje zwrócone komunikaty o błędach.Bardziej ograniczyć widoczność metadane w ten sposób, można uruchomić serwer z flagą śledzenia 3625.Ta flaga śledzenia ogranicza ilość informacji wyświetlanych na komunikaty o błędach.Z kolei pomaga zapobiec wymuszone ujawniania informacji.Zależnościami jest, że komunikaty o błędach będą terse i może być trudne dla debugowania.Aby uzyskać więcej informacji, zobacz Za pomocą SQL Server opcje uruchamiania usługi i Flagi śledzenia (Transact-SQL).

Następujące metadane nie podlega ujawnienie wymuszony:

  • Wartość przechowywaną w provider_string kolumna sys.servers.Użytkownik nie ma uprawnień do zmiany dowolnego serwera POŁĄCZONEGO zobaczą wartość NULL w tym kolumna.

  • Definicja źródła obiektu użytkownika, takie jak procedura składowana lub wyzwalacza.źródło Kodu jest widoczny tylko podczas występuje jeden z następujących:

    • Użytkownik ma uprawnienia Wyświetlanie definicji obiektu.

    • Użytkownik nie odmówiono VIEW DEFINITION uprawnienia do obiektu i ma uprawnienia kontroli, zmiany lub własność obiektu.Inni użytkownicy zobaczą NULL.

  • Definicja kolumn można znaleźć w następujących widoki wykazu:

    sys.all_sql_modules

    sys.sql_modules

    sys.server_sql_modules

    sys.check_constraints

    sys.default_constraints

    sys.computed_columns

    sys.numbered_procedures

  • Ctext kolumna w syscomments widok zgodności.

  • Produkcja sp_helptext procedurę.

  • Następujące kolumny w widokach schematu informacji:

    INFORMATION_SCHEMA.CHECK_CONSTRAINTS.CHECK_CLAUSE

    INFORMATION_SCHEMA.KOLUMNY.COLUMN_DEFAULT

    INFORMATION_SCHEMA.DOMENY.DOMAIN_DEFAULT

    INFORMATION_SCHEMA.ROUTINE_COLUMNS.COLUMN_DEFAULT

    INFORMATION_SCHEMA.PROCEDUR.ROUTINE_DEFINITION

    INFORMATION_SCHEMA.WIDOKI.VIEW_DEFINITION

  • Funkcja OBJECT_DEFINITION()

  • Wartość przechowywana kolumna password_hash sys.sql_logins.Użytkownik nie ma uprawnień do sterowania serwera zostanie wyświetlony wartość NULL w tym kolumna.

Ostrzeżenie

Definicje SQL wbudowanej procedury i funkcje są publicznie widoczne przez sys.system_sql_modules wykazu widoku sp_helptext procedura składowana, a funkcja OBJECT_DEFINITION().

Ogólne zasady widoczności metadanych

Poniżej przedstawiono niektóre ogólne zasady należy rozważyć dotyczące widoczności metadane:

  • Uprawnienia niejawne stałe role

  • Zakres uprawnień

  • Pierwszeństwo ODMÓW

  • Widoczność podskładnik metadane

Stałe role i uprawnienia niejawne

Metadane, które jest możliwy przez stałe role zależy od ich odpowiednie uprawnienia niejawne.

Zakres uprawnień

Uprawnień na jeden zakres oznacza możliwość wyświetlania metadane w tym zakresie i na wszystkich ujęty zakresów.Na przykład uprawnienie SELECT schemat oznacza, że grantee ma uprawnienie SELECT na wszystkich securables, znajdujące się w tym schemacie.Dlatego udzielenie uprawnienie SELECT schemat umożliwia użytkownikowi oglądanie metadane schematu i również wszystkie tabele, widoki, funkcje, procedur, kolejek, synonimy, typów i kolekcji schematu XML w nim.Aby uzyskać więcej informacji na temat zakresów, zobacz Uprawnienia hierarchii (aparat bazy danych).

Pierwszeństwo ODMÓW

ODMÓW zazwyczaj ma pierwszeństwo przed innymi uprawnieniami.Na przykład jeśli użytkownik bazy danych jest uprawnienie EXECUTE na schemacie, ale odmówiono uprawnienia wykonywania na procedura składowana w tym schemacie, użytkownik nie może wyświetlić metadane dla tej procedura składowana.

Ponadto jeśli użytkownik odmowa uprawnień wykonywanie na schemacie, ale zostało udzielone uprawnienie EXECUTE procedura składowana w tym schemacie, użytkownik nie może wyświetlić metadane dla tej procedura składowana.

Innym przykładem Jeśli przyznane użytkownik i odmowa uprawnienie EXECUTE procedura składowana, która jest możliwe poprzez różne członkostwa roli, ODMÓW ma pierwszeństwo i użytkownik nie może wyświetlić metadane procedura składowana.

Widoczność podskładnik metadanych

Widoczność podskładniki, takie jak indeksy, sprawdź ograniczenia i wyzwalaczy jest określana przez uprawnienia do obiektu nadrzędnego.Te podskładniki uprawnień grantable.Na przykład, jeśli użytkownik ma uprawnienia niektóre na tabela, użytkownik może przeglądać metadane dla tabelas, kolumny, indeksy ograniczeń check, wyzwalaczy i innych Podskładniki:.

Metadane, które są dostępne dla wszystkich użytkowników bazy danych

Niektóre metadane muszą być dostępne dla wszystkich użytkowników w określonej bazie danych.Na przykład aplikacjami nie masz uprawnień conferrable; Dlatego użytkownik nie można udzielić uprawnień do wyświetlenia metadane grupa plików.Jednak każdy użytkownik, który można utworzyć tabela musi mieć dostęp do metadane grupa plików pozwala na filegroup lub TEXTIMAGE_ON filegroup klauzul instrukcja CREATE tabela.

Metadane, zwracane przez funkcje DB_ID() i DB_NAME() są widoczne dla wszystkich użytkowników.

W poniższej tabela przedstawiono widoki wykazu, które są widoczne dla public rolę.

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_dependencies

sys.type_assembly_usages

sys.parameter_type_usages

sys.column_type_usages