SQL Server: concedere le autorizzazioni a un intero schema rispetto a un oggetto?


25

Sono molto green quando si tratta del mondo della gestione delle autorizzazioni del database in SQL Sever.

Facciamo un esempio semplice.

Supponiamo che l'account "admin" sia il proprietario degli schemi A, B e C.

C'è un altro 'minion' di account che si desidera avere diritti completi (aggiorna / cancella / inserisci / seleziona / altera) su qualsiasi oggetto (tabella / vista) creato con gli schemi A, B e C.

È possibile? Oppure devi eseguire una dichiarazione di sovvenzione ogni volta che aggiungi una tabella / vista in questi schemi? (mi sembra un po 'sciocco).

Risposte:


36

È possibile GRANTschema autorizzazioni che sono efficaci per tutto ciò che esiste e tutto ciò che esisterà in quello schema.

Concedere le autorizzazioni dello schema

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

Inoltre, se si desidera negare le autorizzazioni per un determinato oggetto all'interno di quello schema, è possibile farlo.

Negazione delle autorizzazioni per gli oggetti

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

1
Utilizzare anche parentesi quadre se lo schema o il nome utente ha caratteri speciali. ad es..... SCHEMA :: [schema] TO [company-name/joshua.duxbury]
Joshua Duxbury,

Non funziona in Azure, hai idea del perché? (i comandi funzionano, ma SSMS viene visualizzato e dice "non sei il proprietario del Db ... blah blah blah. Potresti non essere in grado di salvare la tabella" e abbastanza sicuro, non puoi (hai concesso TUTTO al database (mostra le autorizzazioni "Database", "<nome db>", TheUserId, "Crea tabella" e state_desc di "GRANT") C'è qualche altra magia necessaria? O Azure è utilizzabile solo dal Dbo?
Traderhut Games

13

Per semplificare ulteriormente, è possibile utilizzare i ruoli per svolgere il lavoro che si sta cercando.

Dopo aver assegnato le autorizzazioni al ruolo, puoi semplicemente aggiungere utenti al ruolo. In questo modo non è necessario gestire le autorizzazioni per i singoli utenti. Gli utenti ereditano le autorizzazioni concesse al ruolo.

Di seguito è riportato un esempio per iniziare:

 -- 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 
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.