Situatie
Rolurile din Microsoft SQL Server reprezintă un element central al securității serverului de baze de date. Rolurile sunt utilizate pentru a controla accesul la obiecte și pentru a atribui permisiuni utilizatorilor și/sau grupurilor de securitate. Rolurile din SQL Server sunt similare cu grupurile de utilizatori din Windows.
Roluri predefinite în SQL Server
SQL Server include mai multe roluri predefinite (fixe) la nivel de server și de bază de date. SQL Server 2022 introduce, de asemenea, roluri fixe suplimentare la nivel de server, care oferă permisiuni mai detaliate, bazate pe Principiul privilegiului minim:
Roluri fixe la nivel de server – roluri încorporate utilizate pentru a atribui permisiuni în SQL Server. De exemplu, aceste roluri permit utilizatorilor să modifice configurația serverului, să creeze baze de date și să efectueze alte sarcini administrative.
Roluri fixe la nivel de bază de date – permit gestionarea permisiunilor asupra bazelor de date. Aceste roluri sunt utilizate în mod obișnuit atunci când se acordă permisiuni pentru crearea de tabele sau interogarea datelor.
Permisiunile atribuite rolurilor fixe din SQL Server nu pot fi modificate. Administratorul poate crea, de asemenea, roluri de server sau de bază de date definite de utilizator, cu un set personalizat de permisiuni.
Solutie
Gestionarea rolurilor utilizatorilor cu Microsoft SQL Server Management Studio
Utilizați Microsoft SQL Server Management Studio (SSMS) pentru a vizualiza o listă a rolurilor fixe din SQL Server. Porniți SSMS și conectați-vă la database engine.
Rolurile fixe ale serverului sunt disponibile în secțiunea Security > Server roles. Următoarele roluri fixe ale serverului sunt disponibile în SQL Server 2019 și versiunile anterioare:
- sysadmin
- serveradmin
- securityadmin
- processadmin
- setupadmin
- bulkadmin
- diskadmin
- dbcreator
- public
SQL Server 2022 și versiunile ulterioare
Începând cu SQL Server 2022, Microsoft a introdus roluri de server fixe suplimentare, bazate pe principiul privilegiului minim. Aceste roluri oferă permisiuni de administrare mai detaliate și este de recomandat să le utilizați în locul rolurilor tradiționale, cu drepturi mai largi, ori de câte ori este posibil.
Printre cele mai utilizate roluri fixe de server din SQL Server 2022 se numără:
– ##MS_DatabaseConnector: Permite membrilor să se conecteze la orice bază de date fără a fi necesar un cont de utilizator specific în cadrul acelei baze de date.
– ##MS_LoginManager: Permite crearea, modificarea și gestionarea datelor de autentificare SQL Server fără a acorda privilegii complete de administrator de securitate.
– ##MS_DatabaseManager: Permite crearea, modificarea și ștergerea bazelor de date. Persoana care creează baza de date devine proprietarul acesteia (dbo).
– ##MS_ServerStateManager: Acordă permisiuni pentru vizualizarea și gestionarea setărilor și operațiunilor legate de starea serverului.
– ##MS_ServerStateReader: Permite vizualizarea informațiilor privind starea serverului, inclusiv a vizualizărilor de gestionare dinamică (DMV) și a datelor de monitorizare.
– ##MS_ServerPerformanceStateReader: Permite în mod specific vizualizarea informațiilor privind starea serverului legate de performanță și a datelor de diagnosticare.
– ##MS_ServerSecurityStateReader: Permite vizualizarea stării serverului legate de securitate și a metadatelor de securitate.
– ##MS_DefinitionReader: Acordă acces pentru a vizualiza definițiile metadatelor pentru obiectele serverului și ale bazelor de date.
– ##MS_PerformanceDefinitionReader: Permite vizualizarea definițiilor obiectelor și a metadatelor legate de performanță.
– ##MS_SecurityDefinitionReader: Permite vizualizarea definițiilor obiectelor, a permisiunilor și a metadatelor legate de securitate.
Nota bene: Rolurile clasice fixe ale serverului rămân disponibile din motive de compatibilitate cu versiunile anterioare. Cu toate acestea, SQL Server 2022 introduce rolurile ##MS_*## pentru a susține principiul privilegiului minim, acordând permisiuni de administrare cu un domeniu de aplicare mai restrâns.
Roluri de bază de date
Fiecare bază de date are propriul set de roluri fixe la nivel de bază de date. Extindeți secțiunea Database > Security > Roles > Database Roles:
- db_owner
- db_securityadmin
- db_accessadmin
- db_backupoperator
- db_ddladmin
- db_datawriter
- db_datareader
- db_denydatawriter
- db_denydatareader
- public
Vizualizati apartenența la roluri de utilizator în SSMS
Puteți vizualiza rolurile atribuite unui anumit utilizator/cont de autentificare în SQL Server Management Studio. Pentru a vizualiza rolurile la nivel de server, urmați pașii de mai jos:
- Desfaceți meniul Security > Logins.
- Apăsati click dreapta pe contul de autentificare și selectați Properties.
- Deschideți tab-ul Server Roles.
- Verificați rolurile de server atribuite contului de autentificare.
Pentru a vizualiza rolurile la nivel de bază de date:
- Desfășurați Databases > DatabaseName > Security > Users.
- Click dreapta pe utilizator și selectați Properties.
- Deschideți pagina Membership.
- Verificați rolurile de bază de date atribuite utilizatorului.
Această metodă oferă o modalitate rapidă de a verifica atribuirea rolurilor fără a utiliza interogări Transact-SQL. Acestea sunt rolurile standard fixe disponibile în majoritatea bazelor de date ale utilizatorilor. Unele baze de date de sistem (cum ar fi msdb) includ roluri predefinite suplimentare pentru SQL Agent și operațiunile de întreținere.
Membrii unui rol de bază de date pot fi:
- Grupuri și conturi de utilizator din Windows și/sau Active Directory
- Date de autentificare SQL Server
- Alte roluri (nu adăugați roluri de bază de date definite de utilizator ca membri ai rolurilor fixe; acest lucru ar putea fi folosit pentru escaladarea privilegiilor)
Exemplu: atribuirea unor roluri fixe din SQL Server unui cont de utilizator din Active Directory
Pentru a atribui mai multe roluri fixe din SQL Server unui cont de utilizator din Active Directory, putem actiona astfel:
1. Mai întâi, adăugați utilizatorul AD la conturile de autentificare din SQL Server. Desfaceți meniul Security > Logins și selectați „New Login”;
2. Selectați autentificarea Windows și click pe butonul „Search”;
3. Selectați domeniul dvs. ca locație de căutare, introduceți numele de utilizator AD și apoi click pe „Check names”;
4. Apoi, accesați secțiunea „Server Roles” și selectați rolurile globale de server pe care doriți să le acordați utilizatorului.
5. Noul cont de utilizator AD ar trebui să apară în lista de autentificări a serverului SQL.
6. Dacă doriți să adăugați sau să eliminați roluri de utilizator, deschideți proprietățile contului și efectuați modificările în fila „Server Roles”.
Dacă doriți să acordați un rol la nivel de bază de date unui utilizator AD, adăugați mai întâi contul acestuia la lista utilizatorilor bazei de date, apoi deschideți proprietățile rolului bazei de date și adăugați utilizatorul ca membru al rolului.
Nota bene: Rețineți că trebuie să acordați doar permisiunile minime necesare. Trebuie să evitați atribuirea rolului de administrator de sistem (sysadmin) decât dacă este absolut necesar. De asemenea, rețineți că membrii rolului de administrator de sistem (sysadmin) ocolesc toate verificările de permisiuni și au acces nelimitat la toate resursele SQL Server.
Cum se adaugă sau se afișează rolurile utilizatorilor în SQL Server cu ajutorul interogărilor Transact-SQL
Puteți utiliza interogări în limbajul T-SQL pentru a adăuga sau a elimina roluri SQL Server pentru utilizatori.
Deschideți SSMS și faceți clic pe „New Query” (Interogare nouă).
Puteți utiliza următoarea interogare pentru a afișa toate rolurile de server fixe și definite de utilizator disponibile pe instanța SQL Server:
SELECT name
FROM sys.server_principals
WHERE type = ‘R’
ORDER BY name;
Puteți utiliza interogarea de mai jos pentru a afișa toate rolurile din baza de date selectată în prezent:
SELECT name
FROM sys.database_principals
WHERE type = ‘R’
ORDER BY name;
Pentru a adăuga un utilizator AD la conturile de autentificare ale serverului SQL, utilizați următoarea interogare:
CREATE LOGIN [class\ion.popescu]
FROM WINDOWS;
GO
Acum puteți atribui un rol de server unui utilizator:
ALTER SERVER ROLE serveradmin
ADD MEMBER [class\ion.popescu];
Atribuiți un rol la nivel de bază de date:
USE DBNAME;
GOCREATE USER [class\ion.popescu]
FOR LOGIN [class\ion.popescu];ALTER ROLE db_backupoperator
ADD MEMBER [class\ion.popescu];
Pentru a elimina un utilizator din rolul de server, executați:
ALTER SERVER ROLE serveradmin
DROP MEMBER [class\ion.popescu];
Sau dintr-un rol de bază de date:
ALTER ROLE db_backupoperator
DROP MEMBER [class\ion.popescu];
Enumerați rolurile de pe serverul de liste la care un utilizator este membru:
SELECT r.name as Role, m.name as Principal
from
master.sys.server_role_members rm
inner join
master.sys.server_principals r on r.principal_id = rm.role_principal_id and r.type = ‘R’
inner join
master.sys.server_principals m on m.principal_id = rm.member_principal_id
WHERE m.name = ‘class\ion.popescu’
Cum se verifică apartenența/membership la un rol curent
Pentru a verifica rapid dacă utilizatorul conectat în prezent aparține unui anumit rol de server/bază de date, puteți folosi funcțiile integrate de verificare a apartenenței la roluri.
Pentru a verifica apartenența la un rol de server, utilizați următoarea interogare:
SELECT IS_SRVROLEMEMBER(‘sysadmin’);
Pentru a verifica dacă un utilizator face parte dintr-un rol din baza de date:
SELECT IS_ROLEMEMBER(‘db_owner’);
O valoare de returnare egală cu 1 indică faptul că utilizatorul curent este membru al rolului, 0 indică faptul că nu este, iar NULL înseamnă că rolul sau entitatea nu au putut fi validate.
Interogare privind rolurile atribuite utilizatorilor într-o anumită bază de date:
use DBNAME;
select P.Name, R.Name
from sys.database_principals P
left outer join sys.database_role_members RM on P.principal_id=RM.member_principal_id
left outer join sys.database_principals R on R.principal_id=RM.role_principal_id
where P.Name = ‘class\ion.popescu’
ORDER BY R.Name;
Leave A Comment?