Szukam najlepszego sposobu na wyłączenie dostępu do sys.tables
/ Information Schema
dla użytkownika / grupy w SQL Server.
Znalazłem ten wątek z 2008 roku
Pokazuje sposób odmowy dostępu w następujący [sys].[something]
sposób:
DENY SELECT ON [sys].[columns] TO DenySystemTableSelectRole
GO
DENY SELECT ON [sys].[tables] TO DenySystemTableSelectRole
GO
DENY SELECT ON [sys].[syscolumns] TO DenySystemTableSelectRole
GO
DENY SELECT ON [sys].[sysobjects] TO DenySystemTableSelectRole
GO
Ale nie ma mowy, jak wyłączyć dostęp w Information Schema
:
DENY SELECT ON INFORMATION_SCHEMA.TABLES To DenySystemTableSelectRole
To wydaje się nie działać.
Jak mogę wyłączyć dostęp do Information_schema?
Czy jest łatwiejszy sposób zablokowania dostępu do wszystkich sys
/ information_schema
?
Aktualizacja: w rzeczywistości nie mogę uruchomić obu następujących instrukcji:
DENY SELECT ON [sys] TO reducedDBO
GO
DENY SELECT ON INFORMATION_SCHEMA To reducedDBO
GO
Próbowałem uruchomić je na konkretnej bazie danych, na której istnieje Użytkownik, a także próbowałem na „głównym”.
Nadal mogę biegać:
SELECT * from
INFORMATION_SCHEMA.TABLES
-> nadal zwraca wyniki
SELECT * from
sys.TABLES
-> brak wyników
Uwzględnienie SCHEMA::
w zapytaniu umożliwiło utworzenie zabezpieczeń
DENY SELECT ON SCHEMA::[sys] TO reducedDBO
GO
DENY SELECT ON SCHEMA::INFORMATION_SCHEMA To reducedDBO
GO
Ale teraz nadal mogę wybrać wszystkie informacje z bazy danych.
Rzuciłem okiem na kartę „Zabezpieczenia” w oknie właściwości użytkownika w Management Studio 2008, wygląda to tak:
Wpis, który blokuje wybór sys.tables
Schemat: sys, Nazwa: tabele, Typ: Widok
Uprawnienia do sys.tables: Uprawnienie: Wybierz, Udzielający: dbo, Odmowa jest zaznaczona
Wpis, który nie blokuje żadnego wyboru
Schemat :, Nazwa: INFORMACJE_SCHEMA, Typ: Schemat
Uprawnienia dla INFORMACJE_SCHEMA: Zezwolenie: Wybierz, Udzielający: dbo, Odmowa NIE jest zaznaczona (próbowałem to sprawdzić, ale nie ma szans ..)
Pozwolenie: Wybierz, Udzielający: INFORMACJE_SCHEMA, Odmowa jest zaznaczona
Próbowałem ustawić uprawnienia w interfejsie GUI, ale wtedy pojawia się ten sam błąd, że ustawienie uprawnień będzie możliwe tylko w głównej bazie danych. Ale nie mam dodanego użytkownika / loginu do głównego zabezpieczenia DB.
Rozwiązanie:
Jedynym sposobem mogę zrobić deny
pracę za information_schema
było dodać użytkownika do master-db i uruchomić deny select
na wzorcu:
DENY SELECT ON [sys].[tables] TO reducedDBO
GO
DENY SELECT ON INFORMATION_SCHEMA.TABLES To reducedDBO
GO
I jak w tym kodzie, można go wykonać tylko dla pojedynczych tabel.