Oefening: Bepalen wie toegang heeft tot uw database

Voltooid

Hoewel u mogelijk via het netwerk verbinding kunt maken met de database, betekent dit niet dat u daadwerkelijk toegang kunt krijgen tot de gegevens zelf. Als u een gelaagde benadering volgt, wilt u ervoor zorgen dat alleen gebruikers die toegang nodig hebben tot de gegevens, toegang hebben tot deze gegevens. Deze toegang is waar verificatie en autorisatie worden afgespeeld.

Verificatie

Verificatie is het proces van het verifiëren van een identiteit. Deze identiteit kan een gebruiker, een service zijn die wordt uitgevoerd op een systeem of een systeem zelf, zoals een virtuele machine. Via het verificatieproces zorgt u ervoor dat de persoon of het systeem is wie hij of zij beweert te zijn. SQL Database ondersteunt twee typen verificatie: SQL-verificatie en Microsoft Entra-verificatie.

SQL-verificatie

De SQL-verificatiemethode maakt gebruik van een gebruikersnaam en wachtwoord. Gebruikersaccounts kunnen worden gemaakt in de hoofddatabase en kunnen machtigingen worden verleend in alle databases op de server. U kunt ook gebruikers maken in de database zelf, ingesloten gebruikers genoemd, en hen alleen toegang geven tot die database. Toen u de logische server voor uw database hebt gemaakt, hebt u een serverbeheerder-aanmelding met een gebruikersnaam en wachtwoord opgegeven. Met behulp van deze referenties kunt u zich verifiëren bij elke database op die server als de eigenaar van de database of dbo.

Microsoft Entra-verificatie

Deze verificatiemethode maakt gebruik van identiteiten die worden beheerd door Microsoft Entra ID en wordt ondersteund voor beheerde en geïntegreerde domeinen. Gebruik waar mogelijk Microsoft Entra-verificatie (geïntegreerde beveiliging). Met Microsoft Entra-verificatie kunt u de identiteiten van databasegebruikers en andere Microsoft-services op één centrale locatie beheren. Centraal identiteitsbeheer biedt één plek voor het beheren van databasegebruikers en vereenvoudigt het machtigingenbeheer. Als u Microsoft Entra-verificatie wilt gebruiken, moet u een andere serverbeheerder maken met de naam Microsoft Entra-beheerder, die Microsoft Entra-gebruikers en -groepen mag beheren. Deze beheerder kan ook alle bewerkingen uitvoeren die reguliere serverbeheerders kunnen uitvoeren.

Autorisatie

Autorisatie verwijst naar wat een identiteit binnen een Azure SQL-database kan doen. Deze autorisatie wordt beheerd door machtigingen die rechtstreeks worden verleend aan het gebruikersaccount en databaserollidmaatschappen. Een databaserol wordt gebruikt om machtigingen samen te groeperen om het beheer te vereenvoudigen. Voeg een gebruiker toe aan een rol om de machtigingen te verlenen die de rol heeft. Deze machtigingen kunnen de mogelijkheid omvatten om u aan te melden bij de database, de mogelijkheid om een tabel te lezen en de mogelijkheid om kolommen toe te voegen aan en te verwijderen uit een database. Het wordt aanbevolen om gebruikers de minimaal benodigde bevoegdheden te verlenen. Het proces voor het verlenen van autorisatie aan zowel SQL- als Microsoft Entra-gebruikers is hetzelfde.

In het voorbeeld hier is het serverbeheerdersaccount waarmee u verbinding maakt lid van de db_owner-rol, die bevoegd is om iets in de database te doen.

Verificatie en autorisatie in de praktijk

Als best practice moet uw toepassing een specifiek account gebruiken om te verifiëren. Op deze manier kunt u de machtigingen die aan de toepassing worden verleend, beperken en het risico op schadelijke activiteiten verminderen in het geval uw toepassingscode kwetsbaar is voor SQL-injectieaanvallen. U wordt aangeraden een ingesloten databasegebruiker te maken, zodat uw app rechtstreeks kan worden geverifieerd bij de database. Zie Ingesloten databasegebruikers: een draagbare database maken voor meer informatie.

Gebruik Microsoft Entra-verificatie om identiteiten van databasegebruikers centraal te beheren en als alternatief voor SQL Server-verificatie.

Bekijk hoe u een gebruiker instelt en toegang verleent tot een database. In dit geval gebruikt u SQL-verificatie voor uw gebruiker, maar het proces zou in wezen hetzelfde zijn als u Microsoft Entra-verificatie gebruikt.

Een databasegebruiker maken

Maak een nieuwe gebruiker die u kunt gebruiken om toegang te verlenen.

  1. Maak in Cloud Shell op uw appServer-VM opnieuw verbinding met uw database als uw ADMINUSER.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    
  2. Voer de volgende opdracht uit om een nieuwe gebruiker te maken. Deze gebruiker is een ingesloten gebruiker die alleen toegang heeft tot de Marketplace-database . U kunt het wachtwoord desgewenst aanpassen, maar let erop dat u het nodig hebt voor een toekomstige stap.

    CREATE USER ApplicationUser WITH PASSWORD = 'YourStrongPassword1';
    GO
    

Met deze referenties kan de gebruiker zich verifiëren bij de database, maar ze zijn niet gemachtigd om toegang te krijgen tot gegevens. Deze gebruiker toegang verlenen.

Machtigingen verlenen aan een gebruiker

Maak de gebruiker lid van de db_datareader en db_datawriter rollen en geef toegang tot respectievelijk lezen en schrijven naar de database. U wilt ook voorkomen dat deze gebruiker toegang heeft tot een tabel met adressen.

  1. Terwijl u nog steeds verbinding hebt gemaakt met sqlcmd appServer, voert u de volgende T-SQL uit om de db_datareader gebruiker en db_datawriter de rollen die u hebt gemaakt, toe te kennen.

    ALTER ROLE db_datareader ADD MEMBER ApplicationUser;
    ALTER ROLE db_datawriter ADD MEMBER ApplicationUser;
    GO
    
  2. U kunt het toegangsbereik verder beperken. U kunt de toegang van een gebruiker tot andere elementen in de database weigeren met behulp van de operator DENY. Voer de volgende T-SQL uit om de gebruiker ApplicationUser de mogelijkheid te weigeren om gegevens uit de tabel SalesLT.Address te selecteren.

    DENY SELECT ON SalesLT.Address TO ApplicationUser;
    GO
    

Meld u nu aan als die gebruiker en bekijk deze configuratie in actie.

  1. Terwijl u zich nog steeds bij de T-SQL-prompt bevindt, voert u de exit sessie uit.

  2. Meld u nu weer aan bij de database, maar als de gebruiker die u hebt gemaakt.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U 'ApplicationUser' -P '[password]' -N -l 30
    
  3. Voer de volgende query uit. Met deze query worden gegevens opgehaald uit een tabel waartoe de gebruiker toegang heeft.

    SELECT FirstName, LastName, EmailAddress, Phone FROM SalesLT.Customer;
    GO
    

    U moet een overzicht van klanten terugkrijgen.

    FirstName      LastName       EmailAddress                    Phone
    -------------- -------------- ------------------------------- ------------
    Orlando        Gee            orlando0@adventure-works.com    245-555-0173
    Keith          Harris         keith0@adventure-works.com      170-555-0127
    Donna          Carreras       donna0@adventure-works.com      279-555-0130
    Janet          Gates          janet1@adventure-works.com      710-555-0173
    ...
    
  4. Bekijk wat er gebeurt wanneer u probeert een query uit te voeren op een tabel waartoe u geen toegang hebt.

    SELECT * FROM SalesLT.Address;
    GO
    

    U zou een bericht moeten krijgen dat u geen toegang hebt tot deze tabel.

    Msg 229, Level 14, State 5, Server server-22942, Line 1
    The SELECT permission was denied on the object 'Address', database 'marketplace', schema 'SalesLT'.
    

Zoals u hier kunt zien, kunt u, ook al hebt u lees-/schrijftoegang tot de database verleend, de toegang tot gegevens verder beveiligen door expliciet toegang tot tabellen te weigeren. Mocht u meerdere gebruikers hebben die een vergelijkbare toegang zouden delen, dan zou u aangepaste rollen kunnen maken met de juiste machtigingen en het beheer vereenvoudigen.

Het is belangrijk dat uw database goed is beveiligd en hiertoe alleen toegang wordt verleent voor zover dit nodig is. Azure SQL Database biedt de ingebouwde mogelijkheid tot volledige controle over de mogelijkheid om identiteiten te verifiëren en autoriseren, om toegang te verkrijgen tot de gegevens in uw database.