Użytkownicy nie mogą przeglądać tabel w schemacie innym niż domyślny w SSMS

10

Mam problem z ustawieniem VIEW DEFINITIONuprawnień odpowiednio na poziomie schematu dla jednego z moich użytkowników. Stworzyłem schemat TestSchemai dodałem kilka tabel. Użytkownik ma obecnie uprawnienia ustawione na dostęp i modyfikowanie tabeli ( SELECT, UPDATE, DELETE, etc) przez dbo_datareaderi dbo_datawriterról. Jednak nie widzą żadnej z tabel w eksploratorze obiektów SSMS.

Próbowałem przyznać uprawnienia do wyświetlania definicji:

grant view definition on SCHEMA :: [TestSchema] to [User]

To nie zadziałało. Próbowałem ustawić uprawnienia na poziomie tabeli:

grant view definition on [TestSchema].[NewTable] to [User]

To też nie działało. Potem spróbowałem tylko ogólnej dotacji:

grant view definition to [User]

I że zrobił pracę; widzą teraz TestSchema, podobnie jak inne schematy, do których nie powinni mieć dostępu.

Moim celem jest umożliwienie użytkownikowi przeglądania wszystkich tabel w ramach danego schematu. Jak to osiągnąć? Jeśli powinienem być w stanie to zrobić domyślnie, jakie uprawnienia powinienem szukać, aby dowiedzieć się, dlaczego nie mogę?

eykanal
źródło
W mojej instancji 2008R2, gdy udzielam db_datareader lub db_datawriter, widzą wszystkie schematy. Zdaję sobie sprawę, że nie tego szukasz, ale oznacza to, że istnieje znacząca różnica między twoją konfiguracją a moją, więc nie mogę jej naprawdę przetestować. Czy wersja jest inna, czy zmodyfikowano jakieś inne zabezpieczenia?
cfradenburg
@cfradenburg - Trudno powiedzieć; jest to serwer zarządzany przez IT, więc nie jestem pewien, co oni zrobili, i jestem początkującym SQL Server, więc nie wiem, czego szukać. Chyba część mojego pytania brzmi: jakie inne uprawnienia / role / ??? powinienem szukać, czy można to po prostu naprawić za pomocą uprawnień?
eykanal
Czy użytkownik może przeszukiwać tabele? Jeśli mogą zapytać, może to być po prostu problem w SSMS.
user9164,
@ user9164 Tak, użytkownicy mogą wyszukiwać tabele; to tylko kwestia oglądania ich w SSMS.
eykanal

Odpowiedzi:

11

Krótka odpowiedź: Nie używaj db_datareaderlub db_datawriterlub ich ekwiwalenty zaprzeczyć. Służą wyłącznie do kompatybilności wstecznej. Korzystanie z nich spowoduje problemy takie jak ten, przed którym stoisz.

Jeśli chcesz nadać głównej Alice uprawnienia SELECT, INSERT, UPDATE i DELETE wszystkim obiektom wycenionym w tabeli w schemacie Sprzedaż, skorzystaj z następujących opcji.

GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::Sales TO Alice ;

Jeśli chcesz udzielić głównej Alicji uprawnień SELECT, INSERT, UPDATE i DELETE wszystkim obiektom o wartościach tabelowych we wszystkich schematach, skorzystaj z następujących poleceń.

GRANT SELECT, INSERT, UPDATE, DELETE TO Alice ;

Widoczność metadanych będzie wtedy działać poprawnie.

Greenstone Walker
źródło
Czy masz źródło bitu „kompatybilności wstecznej”? Rozumiem, że schematy są przestarzałe, ale nie mogę znaleźć nic na temat ról.
Stijn
0

Spójrz na główne zasady, inne uprawnienia, w których może istnieć odmowa, która powoduje problem. Pamiętaj, że odmowa zawsze będzie obowiązywać ponad stypendium. A ponieważ to nie jest twój serwer, na koncie może znajdować się coś, co utworzył dział IT.

Użyj czegoś takiego na poziomie serwera:

    use master
    go
    SELECT a.*,b.name as 'Login ID' FROM sys.server_permissions as A inner join 
    sys.server_principals as B on a.grantee_principal_id = b.principal_id
    where b.name = 'login ID of the account'
    GO

I coś takiego na poziomie bazy danych

SELECT a.*,b.name as 'Login ID' FROM sys.database_permissions as A 
inner join sys.server_principals as B on a.grantee_principal_id = b.principal_id
where b.name = 'test'
GO
Nick Winstanley
źródło
Dzięki za komentarz, wypróbuję to, gdy wrócę do pracy w poniedziałek.
eykanal
0

Zdarzyło mi się to, kiedy uaktualniłem nasz SQL Server z 2008R2 do 2014. db_datareader lub db_datawriter lub ich odmowy odpowiedniki działają doskonale w 2008R2, ale nie działają w 2014.

Przykład udzielenia zezwolenia w programie SQL Server 2014

Jeśli chcesz nadać użytkownikowi Alice uprawnienia SELECT, INSERT, UPDATE i DELETE do wszystkich obiektów wycenianych w tabeli w schemacie Sprzedaż, skorzystaj z następujących opcji.

WYBIERZ, WSTAW, AKTUALIZUJ, USUŃ NA SCHEMACIE :: Sprzedaż do Alice; Jeśli chcesz udzielić głównej Alicji uprawnień SELECT, INSERT, UPDATE i DELETE wszystkim obiektom o wartościach tabelowych we wszystkich schematach, skorzystaj z następujących poleceń.

WYBIERZ, WSTAW, AKTUALIZUJ, USUŃ DO Alice; Widoczność metadanych będzie wtedy działać poprawnie.

Odwołanie [Greenstone Walker].

Sundeep
źródło
1
Sundeep, spróbuj wyjaśnić odpowiedź zamiast podawać tylko link. Jeśli potrzebujesz pomocy, zapoznaj się z przewodnikiem po witrynie
LowlyDBA