Konfiguracja widoczność metadane

We wcześniejszych wersjach SQL Server, metadane dla wszystkich obiektów w bazie danych są widoczne dla członków publiczne roli.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, na którym użytkownik nie ma żadnych praw.

W SQL Server 2005 a później, jest ograniczona do securables, do którego należy albo użytkownik lub w którym użytkownik ma udzielonego uprawnienia niektóre widoczność metadane. Na przykład następujące zwraca kwerendy, a wiersz, jeśli użytkownikowi zostało udzielone uprawnienie takie jak SELECT lub INSERT w tabela myTable.

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

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

zakres i wpływu konfiguracja widoczność metadane

Metadane widoczność konfiguracja ma zastosowanie tylko do następujących securables.

Katalogowanie widoków

Database Enginesp_help przechowywane procedury

Metadane narażania funkcje wbudowane

Informacje o schemacie widoków

Zgodność widoków

Właściwości rozszerzone

Metadane widoczność konfiguracja nie ma zastosowania do następujących securables.

Wysyłanie tabele systemowe dziennika

SQL Server Tabele systemowe agenta

Tabele systemowe planu konserwacji bazy danych

Tabele systemowe kopia zapasowa

Tabele systemowe replikacja

Replikacja i SQL Server Agent sp_help przechowywane procedury

ułatwienia dostępu ograniczone metadane oznacza następujące czynności:

  • Aplikacje, które przyjęto publiczne metadane dostępu zostaną przerwane.

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

  • funkcje wbudowane, wysyłających metadane, takich jak OBJECTPROPERTYEX może zwracać wartości NULL.

  • The Database Enginesp_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 mają ograniczone metadane ułatwienia dostępu.Na przykład w poniższym kodzie, gdy procedura przechowywana próbuje uzyskać dostęp do metadane w tabela myTable w którym obiekt wywołujący nie ma żadnych praw, jest zwracany jest zestaw wyników puste. We wcześniejszych wersjach SQL Server, zwracana jest wiersz.

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

Aby zezwolić komputerom wywołującym na wyświetlanie metadane, można udzielić wywołującym definicja VIEW uprawnienia w odpowiedni zakres: poziom obiektu, poziom bazy danych lub na poziomie serwera. Dlatego w poprzednim przykładzie, jeśli obiekt wywołujący ma uprawnienie definicja VIEW na myTable, procedura przechowywana, zwraca wiersz. Aby uzyskać więcej informacji zobacz GRANT (Transact-SQL) i GRANT Database Permissions (Transact-SQL).

Można także zmodyfikować procedura przechowywana, aby go jest wykonywany przy użyciu poświadczenia właściciela.Właściciel procedury i właściciela tabela tego samego właściciela, tworzenie łańcucha własności ma zastosowanie, a w kontekście zabezpieczeń właściciela procedura umożliwia dostęp do metadane dla myTable. W tym scenariuszu w poniższym kodzie zwraca wiersz metadane do obiektu wywołującego.

Uwaga

W poniższym przykładzie użyto sys.Objects wykazu widoku zamiast sys.sysobjects zgodności widoku.

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

Uwaga

wykonać AS może być tymczasowo przełącza do kontekstu zabezpieczeń wywołującego.Aby uzyskać więcej informacji zobaczwykonać AS (języka Transact-SQL).

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

Zalety i ograniczenia konfiguracja widoczność metadane

Metadane widoczność konfiguracja można odgrywają ważną rolę w planie zabezpieczeń Ogólne.Istnieją jednak przypadki, w którym użytkownik wykwalifikowanych i oznaczany może wymusić ujawnienie niektóre metadane.Firma Microsoft zaleca, aby wdrożyć uprawnienia metadane jako jeden z wielu zabezpieczenia w głębokość.

Teoretycznie prawdopodobnie wymusić emisji metadane w komunikaty o błędach przy manipulowaniu kolejność obliczeń predykatu w kwerendach.Możliwość taka ataki prób i błędów nie jest specyficzny dla SQL Server. Jest ono implikowane przez charakteryzuje się skojarzeniowym i commutative przekształcenia w relacyjnych algebraicznie.Zagrożenie tego ryzyka można zmniejszyć, ograniczając informacje zwracane w komunikaty o błędach.Aby bardziej ograniczyć widoczność metadane w ten sposób, można uruchomić serwera flagą śledzenia 3625.Ta flaga śledzenia ogranicza ilość informacji wyświetlanych na komunikaty o błędach.Z kolei pomaga zapobiec wymuszone ujawnianie informacji.Zależnościami jest to, że komunikaty o błędach będą terse i może być trudne w użyciu do debugowania.Aby uzyskać więcej informacji zobacz Using the SQL Server Service Startup Options i Flagi śledzenia (Transact-SQL).

Następujące metadane nie podlega ujawnienie wymuszony:

  • Wartość przechowywana w provider_string kolumnasys.Servers.Użytkownik, który nie ma uprawnień ALTER jakiegokolwiek serwer połączony zobaczą wartości NULL w tej kolumnie.

  • Definicja urządzenie źródłowe obiektu przez użytkownika, takie jak procedura przechowywana lub wyzwalacza.Kod źródłowy jest widoczny tylko wtedy, gdy spełniony jest jeden z następujących czynności:

    • Użytkownik ma uprawnienia VIEW definicja obiektu.

    • Użytkownik nie odmówiono uprawnienia VIEW definicja obiektu i ma uprawnienia kontroli, ALTER lub UWZGLĘDNAIJĄ własności do obiektu.Wszyscy inni użytkownicy zobaczą wartości NULL.

  • Definicja kolumny 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

  • The ctext kolumna in the syscomments compatibility view.

  • Dane wyjściowe sp_helptext procedurę.

  • Następujące kolumny w widoku informacji o schemacie:

    INFORMATION_SCHEMA.CHECK_CONSTRAINTS.CHECK_CLAUSE

    INFORMATION_SCHEMA.COLUMNS.COLUMN_DEFAULT

    INFORMATION_SCHEMA.DOMAINS.DOMAIN_DEFAULT

    INFORMATION_SCHEMA.ROUTINE_COLUMNS.COLUMN_DEFAULT

    INFORMATION_SCHEMA.ROUTINES.ROUTINE_DEFINITION

    INFORMATION_SCHEMA.VIEWS.VIEW_DEFINITION

  • Funkcja OBJECT_DEFINITION()

  • Wartość przechowywana kolumna password_hash sys.sql_logins.Użytkownik, który nie ma uprawnień CONTROL SERVER zobaczą wartości NULL w tej kolumnie.

Uwaga

Definicje SQL wbudowany system procedury i funkcje są publicznie dostępne sys.system_sql_modules widoku katalogu sp_helptext przechowywane procedury i funkcja OBJECT_DEFINITION().

Ogólne zasady z widoczność metadane

Poniżej przedstawiono niektóre ogólne zasady, które należy wziąć pod uwagę dotyczącą widoczność metadane:

  • Uprawnienia niejawne stałe role

  • Zakres uprawnień

  • Pierwszeństwo DENY

  • Widoczność podskładnika metadane

Stałe ról i uprawnień niejawnego

Metadane, które mogą być udostępniane przez stałe role zależy od ich odpowiednie uprawnienia niejawne.

Zakres uprawnień

Uprawnienia na jeden zakres oznacza to możliwość wyświetlania metadane w tym zakresie i na wszystkich zakresów wpisane w nawiasie.Na przykład uprawnienie SELECT do schematu oznacza, że grantee ma uprawnienie SELECT na wszystkich securables, które znajdują się w tym schemacie.W związku z tym udzielania uprawnienie SELECT do schematu umożliwia oglądanie metadane schematu i również wszystkich tabel, widoków, funkcji, procedur, kolejki, synonimy, typów i kolekcji schematów XML znajdujące się w nim.Aby uzyskać więcej informacji o zakresach zobacz Hierarchia uprawnienia (aparat bazy danych).

Pierwszeństwo DENY

DENY zwykle ma wyższy priorytet niż inne uprawnienia.Na przykład jeśli jest udzielone uprawnienie wykonać schemat użytkownik bazy danych, ale odmówiono uprawnienia wykonać na procedura przechowywana w tym schemacie, użytkownik nie może przeglądać metadane dla tej procedura przechowywana.

Ponadto jeśli użytkownik jest zabroniony uprawnienie wykonać schematu, ale zostało udzielone uprawnienie wykonać do procedura przechowywana w tym schemacie, użytkownik nie może wyświetlać metadane dla tej procedura przechowywana.

Na przykład inny Jeśli użytkownik ma przyznane i odmowa uprawnienie wykonać do procedura przechowywana, co jest możliwe za pośrednictwem różnych członkostwo w roli, DENY ma pierwszeństwo i użytkownik nie mogą przeglądać metadane procedura przechowywana.

Widoczność podskładnika metadane

Widoczność podskładniki, takie jak indeksy, ograniczeń check i wyzwalacze zależy od uprawnień do obiektu nadrzędnego.Te podskładniki nie masz uprawnień grantable.Na przykład jeśli użytkownik ma odpowiednie niektóre uprawnienia zdefiniowane w tabela, użytkownik może przeglądać metadane dla tabel, kolumn, indeksów, ograniczeń typu check, wyzwalaczy i inne składniki podrzędne.

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

Niektóre metadane muszą być dostępne dla wszystkich użytkowników w konkretnej bazy danych.Na przykład filegroups nie masz uprawnień conferrable; dlatego użytkownik nie może uzyskać uprawnienia do wyświetlenia metadane grupa plików.Jednak każdy użytkownik, można utworzyć tabela musi mieć dostęp do metadane grupa plików umożliwia ON filegroup lub TEXTIMAGE_ON filegroup klauzul instrukcja.

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

Poniższa tabela zawiera listę widoki wykazu, które są widoczne dla publiczne roli.

sys.partition_functions

sys.partition_range_values

sys.partition_schemes

Indeks jest tylko pusta po użytkownik wykonuje polecenie Indeks więcej instrukcji ALTER START FULL zapełnianie lub klauzula START PRZYROSTOWE zapełnianie.

sys.filegroups

sys.destination_data_spaces

Indeks nie jest wypełniony wszelkie tokeny, będące częścią określonej stoplist.

Opcja zapełnianie nie można używać tylko wtedy, gdy CHANGE_TRACKING jest wyłączona.

sys.partitions

sp_tables_info_rowset2

sys.Schemas

sp_table_statistics_rowset; 2

sys.sql_dependencies

sys.type_assembly_usages

sys.parameter_type_usages

sys.column_type_usages