Logins, Users & Rechten
1. Login vs User
| Login | User | |
|---|---|---|
| Niveau | SQL Server engine (server-niveau) | Database (database-niveau) |
| Opgeslagen in | master database |
User database |
| Geeft toegang tot | De SQL Server instantie | Één specifieke database |
| Rechten | Server roles | Database rechten (lezen, schrijven, uitvoeren, …) |
- Een login kan ge-associeerd worden met meerdere users (één per database)
- Een login wordt gekoppeld aan één of meerdere server roles
2. Types Login
| Type | Beschrijving |
|---|---|
| Windows login (user account) | Windows-gebruiker authenticeert via Active Directory |
| Windows login (group account) | Volledige Windows AD-groep krijgt toegang |
| SQL Server login | Wachtwoord beheerd door SQL Server zelf |
| Certificate login | (nvt) |
| Asymmetric key login | (nvt) |
3. Types User
| Type | Beschrijving |
|---|---|
| Windows user | Kan Windows user of groep zijn — connectie enkel naar deze database |
| SQL user with password | Wachtwoord gevalideerd door de database — enkel naar deze database |
| SQL user with login | Gekoppeld aan een login — kan naar meerdere databases |
| SQL user without login | Heeft geen wachtwoord — kan niet verbinden, maar kan objecten bezitten |
| User mapped to a certificate | Speciaal doel |
| User mapped to an asymmetric key | Speciaal doel |
4. Login aanmaken
Object Explorer → Security → rechtermuisklik op Logins → New Login...
Kies tussen: - Windows authentication (zoek AD-gebruiker of groep op) - SQL Server authentication (vul wachtwoord in, stel policy in)
Stel in: Default database, Server Roles, User Mapping.
USE [master];
GO
-- Windows-authenticated login — user account
CREATE LOGIN [DataJBE\bbibber]
FROM WINDOWS WITH DEFAULT_DATABASE = [master];
GO
-- Windows-authenticated login — local group
CREATE LOGIN [DataJBE\Developers]
FROM WINDOWS WITH DEFAULT_DATABASE = [AdventureWorks2019];
GO
-- SQL Server-authenticated login
CREATE LOGIN [JuniorDBA]
WITH PASSWORD = '-p@ssw0rd-' MUST_CHANGE,
CHECK_EXPIRATION = ON,
CHECK_POLICY = ON,
DEFAULT_DATABASE = [ClassicModels];
GO
Naamgevingsrichtlijnen voor logins
- Windows login (user): gebruik altijd de volledig gekwalificeerde naam
DOMEIN\gebruikersnaam
bv.DataJBE\jbeysen— nooit alleen de gebruikersnaam - Windows login (groep): idem,
DOMEIN\Groepsnaam
bv.DataJBE\SQL_Admins - SQL Server login: kies een naam die de functie of persoon duidelijk omschrijft
bv.AppServiceAccount,ReportingUser— vermijd generieke namen zoalssaofadmin - Gebruik nooit spaties in SQL Server loginnamen
- Voor serviceaccounts: gebruik een dedicated account per applicatie, niet één gedeeld account
- Schakel het ingebouwde
sa-account altijd uit in productie en hernoem het indien mogelijk
5. Login wijzigen
6. User aanmaken
Object Explorer → database → Security → rechtermuisklik op Users → New User...
Koppel aan een bestaande login en wijs database roles toe.
7. Rechten toewijzen
Database Roles
| Role | Rechten |
|---|---|
db_owner |
Volledige controle over de database |
db_datareader |
Alle tabellen lezen |
db_datawriter |
Alle tabellen lezen en schrijven |
db_ddladmin |
DDL-statements uitvoeren (CREATE, ALTER, DROP) |
dbcreator (server role) |
Databases aanmaken, wijzigen, verwijderen |
Granulaire rechten
-- Leesrecht op één specifieke tabel
GRANT SELECT ON Customers TO [Fanny];
GO
-- Recht intrekken
REVOKE SELECT ON Customers FROM [Fanny];
GO
-- Recht expliciet weigeren
DENY SELECT ON Customers TO [Fanny];
GO
GRANT vs DENY
DENY heeft voorrang op GRANT. Als een gebruiker via een rol GRANT heeft maar via een expliciete DENY, geldt de weigering.