SQL Server - udzielanie uprawnień do całego schematu vs. obiekt?


25

Jestem bardzo zielony, jeśli chodzi o świat zarządzania uprawnieniami do baz danych w SQL Sever.

Uprośćmy przykład.

Powiedzmy, że konto „admin” jest właścicielem schematów A, B i C.

Istnieje jeszcze inne „konto” konta, do którego chcesz mieć pełne uprawnienia (aktualizacja / usuwanie / wstawianie / wybieranie / zmiana) do dowolnego obiektu (tabeli / widoku) utworzonego na podstawie schematów A, B i C.

czy to możliwe? Czy też musisz wykonywać instrukcję grantu za każdym razem, gdy dodajesz tabelę / widok w ramach tych schematów? (wydaje mi się trochę głupie).

Odpowiedzi:


36

Możesz GRANTschematu uprawnień, które są skuteczne dla wszystkiego, co istnieje i wszystko, co będzie w tym schemacie.

Przyznaj uprawnienia do schematu

GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA :: <schema> TO <user>;

Ponadto, jeśli chcesz następnie odmówić uprawnień do określonego obiektu w tym schemacie, możesz to zrobić.

Odmawianie uprawnień do obiektu

DENY INSERT ON OBJECT::<schema>.<object> TO <user>;

1
Użyj również nawiasów kwadratowych, jeśli schemat lub nazwa użytkownika ma znaki specjalne. np..... SCHEMA :: [schema] TO [company-name/joshua.duxbury]
— Joshua Duxbury

Nie działa na platformie Azure, jakiś pomysł, dlaczego? (polecenia działają, ale pojawia się SSMS i mówi: „nie jesteś właścicielem Db .. bla bla bla. Może nie będziesz w stanie zapisać tabeli” i oczywiście nie możesz (zrobiłeś Grant ALL dla bazy danych (pokazuje uprawnienia „Baza danych”, „<nazwa db>>”, TheUserId, „Utwórz tabelę” i state_desc „GRANT”) Czy jest jeszcze jakaś inna magia, która jest potrzebna? Czy może Azure można używać tylko przez
— Dbo

13

Aby jeszcze bardziej uprościć, możesz użyć ról do wykonania zadania, którego szukasz.

Po przypisaniu uprawnień do roli możesz po prostu dodać użytkowników do roli. W ten sposób nie musisz zarządzać uprawnieniami dla poszczególnych użytkowników. Użytkownicy dziedziczą uprawnienia nadane roli.

Poniżej znajduje się przykład na dobry początek:

 -- Create the database role
CREATE ROLE TableSelector AUTHORIZATION [dbo]
GO
 ---- Grant access rights to a specific schema in the database
GRANT 
      SELECT, INSERT, UPDATE, DELETE, ALTER 

ON SCHEMA::dbo
      TO TableSelector 
GO

-- Add an existing user to the new role created 
EXEC sp_addrolemember 'TableSelector', 'MyDBUser'
GO

-- Revoke access rights on a schema from a role 
DENY ALTER  -- you can customize here ...
ON SCHEMA::dbo
      TO TableSelector 
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.