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 |
Zobacz także