Övning – Kontrollera vilka som får åtkomst till din databas

Slutförd

Även om du kanske kan ansluta till databasen via nätverket betyder det inte att du faktiskt kan få åtkomst till själva data. Efter en metod med flera lager vill du se till att endast användare som behöver åtkomst till data faktiskt kan komma åt dem. Den här åtkomsten är den plats där autentisering och auktorisering kommer in för att spelas upp.

Autentisering

Autentisering är processen för att verifiera en identitet. Den här identiteten kan vara en användare, en tjänst som körs på ett system eller ett system, till exempel en virtuell dator. Genom autentiseringsprocessen ser du till att personen eller systemet är den som de påstår sig vara. SQL Database stöder två typer av autentisering: SQL-autentisering och Microsoft Entra-autentisering.

SQL-autentisering

SQL-autentiseringsmetoden använder ett användarnamn och lösenord. Användarkonton kan skapas i huvuddatabasen och kan beviljas behörigheter i alla databaser på servern. Du kan också skapa användare i själva databasen, som kallas inneslutna användare, och ge dem åtkomst till endast den databasen. När du skapade den logiska servern för databasen angav du en inloggning för serveradministratören med ett användarnamn och lösenord. Med dessa autentiseringsuppgifter kan du autentisera till valfri databas på servern som databasägare eller dbo.

Microsoft Entra-autentisering

Den här autentiseringsmetoden använder identiteter som hanteras av Microsoft Entra-ID och stöds för hanterade och integrerade domäner. Använd Microsoft Entra-autentisering (integrerad säkerhet) när det är möjligt. Med Microsoft Entra-autentisering kan du hantera identiteter för databasanvändare och andra Microsoft-tjänster på en central plats. Central ID-hantering ger en enda plats för hantering av databasanvändare och förenklar behörighetshanteringen. Om du vill använda Microsoft Entra-autentisering måste du skapa en annan serveradministratör med namnet Microsoft Entra-administratören, som kan administrera Microsoft Entra-användare och -grupper. Den här administratören kan också utföra alla åtgärder som en vanlig serveradministratören kan.

Auktorisering

Auktorisering innebär vad en identitet kan göra i en Azure SQL-databas. Den här auktoriseringen styrs av behörigheter som beviljas direkt till användarkontot och databasrollmedlemskapen. En databasroll används för att gruppera behörigheter för att underlätta administration. Lägg till en användare i en roll för att bevilja de behörigheter som rollen har. Dessa behörigheter kan omfatta möjligheten att logga in på databasen, möjligheten att läsa en tabell och möjligheten att lägga till och ta bort kolumner från en databas. Ett bra tips är att du ska ge användare så få behörigheter som möjligt. Processen för att bevilja auktorisering till både SQL- och Microsoft Entra-användare är densamma.

I exemplet här är det serveradministratörskonto som du ansluter till medlem i db_owner roll, som har behörighet att göra något i databasen.

Autentisering och auktorisering i praktiken

Som bästa praxis bör ditt program använda ett dedikerat konto för autentisering. På så vis kan du begränsa programmets behörigheter och minska riskerna för skadlig aktivitet om din programkod skulle vara sårbar för ett SQL-inmatningsangrepp. Vi rekommenderar att du skapar en innesluten databasanvändare som gör att din app kan autentisera direkt till databasen. Mer information finns i Användare av oberoende databas – göra databasen portabel.

Använd Microsoft Entra-autentisering för att centralt hantera identiteter för databasanvändare och som ett alternativ till SQL Server-autentisering.

Ta en titt på hur du konfigurerar en användare och ger dem åtkomst till en databas. I det här fallet använder du SQL-autentisering för din användare, men processen skulle vara i stort sett densamma om du använder Microsoft Entra-autentisering.

Skapa en databasanvändare

Skapa en ny användare som du kan använda för att bevilja åtkomst till.

  1. I Cloud Shell, på din virtuella appServer-dator , ansluter du till databasen igen som din ADMINUSER.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    
  2. Kör följande kommando för att skapa en ny användare. Den här användaren är en innesluten användare som bara tillåter åtkomst till Marketplace-databasen . Du kan justera lösenordet efter behov, men var säker och notera det eftersom du behöver det för ett framtida steg.

    CREATE USER ApplicationUser WITH PASSWORD = 'YourStrongPassword1';
    GO
    

Med dessa autentiseringsuppgifter kan användaren autentisera till databasen, men de har inte behörighet att komma åt några data. Ge den här användaren åtkomst.

Tilldela behörigheter till en användare

Gör användaren till medlem i rollerna db_datareader och db_datawriter och ge åtkomst till att läsa och skriva till databasen. Du vill också förhindra att den här användaren kommer åt en tabell med adresser.

  1. När du fortfarande är ansluten till sqlcmd på appServer kör du följande T-SQL för att bevilja rollerna db_datareader och db_datawriter till den användare som du skapade.

    ALTER ROLE db_datareader ADD MEMBER ApplicationUser;
    ALTER ROLE db_datawriter ADD MEMBER ApplicationUser;
    GO
    
  2. Du kan begränsa åtkomstomfånget ytterligare. Du kan neka en användare åtkomst till andra element i databasen med hjälp av DENY-operatorn. Kör följande T-SQL för att neka användaren ApplicationUser möjligheten att välja data i tabellen SalesLT.Address.

    DENY SELECT ON SalesLT.Address TO ApplicationUser;
    GO
    

Logga nu in som den användaren och ta en titt på den här konfigurationen i praktiken.

  1. När du fortfarande är i T-SQL-prompten anger du exit för att avsluta sessionen.

  2. Logga nu in på databasen igen, men som den användare som du skapade.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U 'ApplicationUser' -P '[password]' -N -l 30
    
  3. Kör följande fråga. Den här frågan hämtar data från en tabell som användaren har behörighet att komma åt.

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

    Du bör få en lista över kunder.

    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. Se vad som händer när du försöker köra frågor mot en tabell som du inte har åtkomst till.

    SELECT * FROM SalesLT.Address;
    GO
    

    Du bör få ett meddelande om att du saknar åtkomst till tabellen.

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

Som du ser här kan du, även om du har beviljat läs-/skrivåtkomst till databasen, ytterligare skydda åtkomsten till data genom att uttryckligen neka åtkomst till tabeller. Om du skulle ha flera användare med liknande åtkomst skulle du kunna skapa anpassade roller med rätt behörigheter och förenkla din administration.

Det är viktigt att skydda databasen korrekt och bara ge åtkomst när det är nödvändigt. Azure SQL Database har inbyggda funktioner för att fullständigt styra möjligheten att autentisera och auktorisera identiteter för åtkomst till data i databasen.