Sunt foarte verde când vine vorba de gestionarea permisiunilor bazelor de date din SQL Sever.
Să păstrăm un exemplu simplu.
Spuneți că contul „administrator” este proprietarul schemelor A, B și C.
Există un alt cont „minion” pe care doriți să-l aveți drepturi depline (actualizați / ștergeți / insert / select / alter) pe orice obiect (tabel / vizualizare) creat sub schemele A, B și C.
Este posibil? Sau trebuie să executați o declarație de grant de fiecare dată când adăugați un tabel / vizualizare în aceste scheme? (mi se pare un pic prostie).
Răspuns
Puteți GRANT
permisiuni de schemă care sunt eficiente pentru tot ceea ce există și pentru tot ce va exista în schema respectivă.
GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA :: <schema> TO <user>;
Mai mult decât atât, dacă doriți să refuzați permisiunile pentru o anumită obiect în schema respectivă, puteți face.
Refuzarea permisiunilor obiectului
DENY INSERT ON OBJECT::<schema>.<object> TO <user>;
Comentarii
Răspuns
Pentru a simplifica puțin mai mult, puteți utiliza rolurile pentru a face treaba pe care o căutați.
Odată ce ați atribuit permisiuni pentru rol, puteți doar să adăugați utilizatori la rol. Astfel, nu trebuie să gestionați permisiunile pentru utilizatori individuali. Utilizatorii moștenesc permisiunile acordate rolului.
Mai jos este un exemplu pentru a începe:
-- 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
.... SCHEMA :: [schema] TO [company-name/joshua.duxbury]