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).

użytkownik45867
źródło

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>;
Mark Sinkinson
źródło
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 
Kin Shah
źródło