Übung: Steuern, wer auf Ihre Datenbank zugreifen kann

Abgeschlossen

Auch wenn Sie über das Netzwerk eine Verbindung mit der Datenbank herstellen können, bedeutet dies nicht, dass Sie auch auf die Daten selbst zugreifen können. Mit einem mehrstufigen Ansatz können Sie sicherstellen, dass nur Benutzer auf die Daten zugreifen können, die diesen Zugriff wirklich benötigen. An dieser Stelle kommen die Authentifizierung und die Autorisierung ins Spiel.

Authentifizierung

Die Authentifizierung ist der Prozess der Überprüfung einer Identität. Diese Identität könnte ein Benutzer, ein Dienst, der auf einem System ausgeführt wird, oder ein System selbst (z. B. eine VM) sein. Durch den Prozess der Authentifizierung stellen Sie sicher, dass die Person oder das System das ist, was sie oder es vorgibt zu sein. SQL-Datenbank unterstützt zwei Arten der Authentifizierung: SQL-Authentifizierung und Microsoft Entra-Authentifizierung.

SQL-Authentifizierung

Die SQL-Authentifizierungsmethode verwendet einen Benutzernamen und ein Kennwort. Benutzerkonten können in der Hauptdatenbank angelegt werden und können in allen Datenbanken des Servers Berechtigungen erhalten. Sie können auch Benutzer in der Datenbank selbst erstellen, die als eigenständige Benutzer bezeichnet werden, und ihnen nur Zugriff auf diese Datenbank gewähren. Beim Erstellen des logischen Servers für die Datenbank haben Sie Anmeldedaten eines Serveradministrators mit Benutzername und Kennwort angegeben. Mit diesen Anmeldeinformationen können Sie sich bei jeder Datenbank auf diesem Server als Datenbankbesitzer bzw. dbo (Database Owner) authentifizieren.

Microsoft Entra-Authentifizierung

Diese Authentifizierungsmethode verwendet von Microsoft Entra ID verwaltete Identitäten und wird für verwaltete und integrierte Domänen unterstützt. Verwenden Sie nach Möglichkeit immer die Microsoft Entra-Authentifizierung (integrierte Sicherheit). Mithilfe der Microsoft Entra-Authentifizierung können Sie die Identitäten von Datenbankbenutzern und anderen Microsoft-Diensten an einer zentralen Stelle verwalten. Die zentrale ID-Verwaltung ermöglicht eine einheitliche Verwaltung von Datenbankbenutzern und vereinfacht die Berechtigungsverwaltung. Wenn Sie die Microsoft Entra-Authentifizierung verwenden möchten, müssen Sie einen weiteren Serveradministrator namens Microsoft Entra-Administrator erstellen, der zum Verwalten von Microsoft Entra-Benutzern und -Gruppen berechtigt ist. Dieser Administrator kann außerdem die gleichen Vorgänge wie ein regulärer Serveradministrator ausführen.

Autorisierung

Die Autorisierung bezieht sich auf die Aktionen, die eine Identität in einer Azure SQL-Datenbank ausführen kann. Diese Autorisierung wird anhand von Berechtigungen gesteuert, die dem Benutzerkonto und Mitgliedschaften in Datenbankrollen direkt erteilt werden. Eine Datenbankrolle wird verwendet, um Berechtigungen zu gruppieren, um so die Verwaltung zu vereinfachen. Fügen Sie einen Benutzer zu einer Rolle hinzu, um die Berechtigungen zu erteilen, die in der Rolle enthalten sind. Diese Berechtigungen können es beispielsweise ermöglichen, sich bei der Datenbank anzumelden, eine Tabelle zu lesen oder Spalten zu einer Datenbank hinzuzufügen und daraus zu entfernen. Als bewährte Methode sollten Sie Benutzern nur die minimal erforderlichen Berechtigungen erteilen. Der Prozess der Autorisierung für SQL- und Microsoft Entra-Benutzer*innen ist identisch.

In diesem Beispiel ist das Serveradministratorkonto, mit dem Sie eine Verbindung herstellen, Mitglied der Rolle „db_owner“ und verfügt daher über alle Berechtigungen in der Datenbank.

Authentifizierung und Autorisierung in der Praxis

Es wird empfohlen, ein dediziertes Konto für die Authentifizierung der Anwendung zu verwenden. Auf diese Weise können Sie die Berechtigungen für die Anwendung beschränken und die Risiken schädlicher Aktivitäten reduzieren, falls Ihr Anwendungscode anfällig für einen Angriff durch Einschleusung von SQL-Befehlen ist. Wir empfehlen, einen eigenständigen Datenbankbenutzer zu erstellen, wodurch sich Ihre App direkt bei der Datenbank authentifizieren kann. Weitere Informationen finden Sie unter Eigenständige Datenbankbenutzer – machen Sie Ihre Datenbank portabel.

Verwenden Sie die Microsoft Entra-Authentifizierung zur zentralen Verwaltung von Identitäten von Datenbankbenutzer*innen und als Alternative zur SQL Server-Authentifizierung.

Sehen Sie sich an, wie man einen Benutzer einrichtet und ihm Zugriff auf eine Datenbank gewährt. In diesem Fall verwenden Sie für den Benutzer die SQL-Authentifizierung. Bei Verwendung der Microsoft Entra-Authentifizierung wäre der Prozess aber im Wesentlichen identisch.

Erstellen eines Datenbankbenutzers

Erstellen Sie einen neuen Benutzer, um ihm Zugriff zu gewähren.

  1. Stellen Sie in Cloud Shell auf Ihrer appServer-VM erneut eine Verbindung mit Ihrer Datenbank als Ihr ADMINUSER her.

    sqlcmd -S tcp:serverNNNNN.database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    
  2. Führen Sie den folgenden Befehl aus, um einen neuen Benutzer zu erstellen. Dieser Benutzer ist ein eigenständiger Benutzer, der nur Zugriff auf die Datenbank marketplace hat. Sie können das Kennwort nach Bedarf anpassen, sollten es sich aber merken, da Sie es später noch benötigen.

    CREATE USER ApplicationUser WITH PASSWORD = 'YourStrongPassword1';
    GO
    

Mit diesen Anmeldeinformationen kann sich der Benutzer bei der Datenbank authentifizieren, ist aber nicht autorisiert, auf Daten zuzugreifen. Gewähren Sie diesem Benutzer Zugriff.

Gewähren von Berechtigungen für einen Benutzer

Machen Sie den Benutzer zu einem Mitglied der Rollen db_datareader und db_datawriter, sodass er zum Lesen und Schreiben in der Datenbank berechtigt ist. Außerdem sollten Sie verhindern, dass dieser Benutzer auf eine Tabelle mit Adressen zugreift.

  1. Führen Sie bei bestehender Verbindung mit sqlcmd auf appServer das folgende T-SQL aus, um dem von Ihnen erstellten Benutzer die Rollen db_datareader und db_datawriter zu erteilen.

    ALTER ROLE db_datareader ADD MEMBER ApplicationUser;
    ALTER ROLE db_datawriter ADD MEMBER ApplicationUser;
    GO
    
  2. Sie können den Zugriff noch weiter einschränken. Sie könnten einem Benutzer mithilfe des Operators DENY den Zugriff auf andere Elemente in der Datenbank verweigern. Führen Sie das folgende T-SQL aus, um dem Benutzer ApplicationUser die Fähigkeit zum Auswählen von Daten aus der Tabelle SalesLT.Address zu verweigern.

    DENY SELECT ON SalesLT.Address TO ApplicationUser;
    GO
    

Melden Sie sich als dieser Benutzer an und sehen Sie sich die entsprechende Konfiguration an.

  1. Während Sie sich noch in der T-SQL-Eingabeaufforderung befinden, geben Sie exit ein, um Ihre Sitzung zu beenden.

  2. Melden Sie sich wieder bei der Datenbank an, aber dieses Mal als der Benutzer, den Sie erstellt haben.

    sqlcmd -S tcp:serverNNNNN.database.windows.net,1433 -d marketplaceDb -U 'ApplicationUser' -P '[password]' -N -l 30
    
  3. Führen Sie die folgende Abfrage aus. Durch diese Abfrage werden Daten aus einer Tabelle abgerufen, auf die der Benutzer zugreifen kann.

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

    Sie sollten eine Liste mit Kunden erhalten.

    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. Sehen Sie sich an, was passiert, wenn Sie versuchen eine Abfrage für eine Tabelle auszuführen, auf die Sie keinen Zugriff haben.

    SELECT * FROM SalesLT.Address;
    GO
    

    Sie sollten eine Meldung erhalten, dass Sie keinen Zugriff auf diese Tabelle haben.

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

Wie Sie hier sehen, können Sie den Zugriff auf Daten weiter einschränken, indem Sie explizit den Zugriff auf Tabellen verweigern, obwohl Sie Lese-/Schreibzugriff auf diese Datenbank gewährt haben. Falls es mehrere Benutzer mit ähnlichen Zugriffsrechten gibt, können Sie benutzerdefinierte Rollen mit den richtigen Berechtigungen erstellen und so die Verwaltung vereinfachen.

Es ist wichtig, dass Sie Ihre Datenbank richtig sichern und nur bei Bedarf Zugriff gewähren. Die Azure SQL-Datenbank bietet die integrierte Fähigkeit, das Authentifizieren und Autorisieren von Identitäten für den Zugriff auf die Daten in Ihrer Datenbank vollständig zu kontrollieren.