Exercice : Contrôler qui peut accéder à votre base de données

Effectué

Même si vous pouvez vous connecter à la base de données sur le réseau, cela ne signifie pas que vous pouvez réellement accéder aux données elles-mêmes. Avec une approche en couche, vous garantissez que seuls les utilisateurs qui ont besoin d’accéder aux données peuvent effectivement le faire. Cet accès constitue le point d’entrée de l’authentification et de l’autorisation dans le jeu.

Authentification

L’authentification est le processus de vérification d’une identité. Cette identité peut être un utilisateur, un service s’exécutant sur un système ou un système lui-même, comme par exemple une machine virtuelle. Le processus d’authentification vous permet de vérifier que la personne ou le système est bien celui qu’il prétend être. Azure SQL Database prend en charge deux types d’authentification : Authentification SQL et authentification Microsoft Entra.

Authentification SQL

La méthode d’authentification SQL utilise un nom d’utilisateur et un mot de passe. Vous pouvez créer des comptes d’utilisateur dans la base de données principale et accorder des autorisations dans toutes les bases de données sur le serveur. Vous pouvez également créer des utilisateurs dans la base de données elle-même, appelées utilisateurs autonomes, et leur donner accès uniquement à cette base de données. Quand vous avez créé le serveur logique pour votre base de données, vous avez spécifié une connexion Administrateur du serveur avec un nom d’utilisateur et un mot de passe. Ces informations d’identification vous permettent de vous authentifier sur n’importe quelle base de données de ce serveur comme propriétaire de la base de données ou dbo.

Authentification Microsoft Entra

Cette méthode d’authentification utilise des identités gérées par Microsoft Entra ID et est prise en charge pour les domaines gérés et intégrés. Utilisez l’authentification Microsoft Entra (sécurité intégrée) dans la mesure du possible. Avec l’authentification Microsoft Entra, vous pouvez gérer les identités des utilisateurs de base de données et d’autres services Microsoft dans un emplacement central. La gestion centralisée des ID fournit un emplacement unique pour gérer les utilisateurs de la base de données et simplifie la gestion des autorisations. Si vous souhaitez utiliser l’authentification Microsoft Entra, vous devez créer un autre administrateur de serveur appelé administrateur Microsoft Entra, qui est autorisé à administrer les utilisateurs et groupes Microsoft Entra. Cet administrateur peut aussi effectuer toutes les opérations d’un administrateur de serveur ordinaire.

Autorisation

L’autorisation désigne ce qu’une identité peut faire dans une base de données Azure SQL. Cette autorisation est contrôlée par des autorisations octroyées directement aux appartenances au compte d’utilisateur et au rôle de base de données. Un rôle de base de données est utilisé pour regrouper les autorisations pour faciliter l’administration. Ajoutez un utilisateur à un rôle pour accorder les autorisations dont dispose le rôle. Ces autorisations comprennent la possibilité de se connecter à la base de données, de lire une table et d’ajouter et supprimer des colonnes dans une base de données. Nous vous recommandons d’accorder aux utilisateurs des privilèges aussi réduits que possible. Le processus d’octroi d’autorisation aux utilisateurs SQL et Microsoft Entra est le même.

Dans cet exemple, le compte Administrateur du serveur avec lequel vous vous connectez appartient au rôle db_owner, qui est autorisé à effectuer tout type d’opérations dans la base de données.

L’authentification et l’autorisation en pratique

En guise de bonne pratique, votre application doit utiliser un compte dédié pour l’authentification. Cela vous permet de limiter les autorisations accordées à cette application et de réduire les risques d’activité malveillante, au cas où le code de l’application serait vulnérable à une attaque par injection de code SQL. Nous vous recommandons de créer un utilisateur de base de données autonome, qui permet à votre application de s’authentifier directement auprès de la base de données. Pour plus d’informations, consultez Utilisateurs de base de données autonome - Rendre votre base de données portable.

Utilisez l’authentification Microsoft Entra pour gérer de manière centralisée les identités des utilisateurs de base de données et comme alternative à l’authentification SQL Server.

Voyez comment configurer un utilisateur et lui accorder l’accès à une base de données. Dans ce cas, vous utilisez l’authentification SQL pour votre utilisateur, mais le processus serait essentiellement identique si vous utilisiez l’authentification Microsoft Entra.

Créer un utilisateur de base de données

Créez un utilisateur auquel vous pouvez accorder l’accès.

  1. Dans Cloud Shell, sur votre machine virtuelle appServer, reconnectez-vous à votre base de données comme ADMINUSER.

    sqlcmd -S tcp:serverNNNNN.database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    
  2. Exécutez la commande suivante pour créer un utilisateur. Cet utilisateur est un utilisateur autonome qui a uniquement accès à la base de données marketplace. Vous pouvez changer le mot de passe selon vos besoins, mais veillez à le noter quelque part pour l’utiliser dans les prochaines étapes.

    CREATE USER ApplicationUser WITH PASSWORD = 'YourStrongPassword1';
    GO
    

Avec ces informations d’identification, l’utilisateur peut s’authentifier sur la base de données, mais n’est pas autorisé à accéder aux données. Accordez-lui l’accès.

Accorder des autorisations à un utilisateur

Définissons l’utilisateur comme membre des rôles db_datareader et db_datawriter pour lui accorder l’accès en lecture et en écriture à la base de données, respectivement. Vous voulez aussi empêcher cet utilisateur d’accéder à une table avec des adresses.

  1. Tout en étant connecté à sqlcmd sur appServer, exécutez l’instruction T-SQL suivante pour accorder les rôles db_datareader et db_datawriter à l’utilisateur que vous venez de créer.

    ALTER ROLE db_datareader ADD MEMBER ApplicationUser;
    ALTER ROLE db_datawriter ADD MEMBER ApplicationUser;
    GO
    
  2. Vous pouvez encore réduire l’étendue de l’accès. Vous pouvez refuser l’accès d’un utilisateur à d’autres éléments au sein de la base de données en utilisant l’opérateur DENY. Exécutez l’instruction T-SQL suivante pour empêcher l’utilisateur ApplicationUser de sélectionner des données dans la table SalesLT.Address.

    DENY SELECT ON SalesLT.Address TO ApplicationUser;
    GO
    

Connectez-vous maintenant en tant qu’utilisateur et examinez cette configuration en action.

  1. Dans l’invite de commandes T-SQL, entrez exit pour quitter votre session.

  2. Reconnectez-vous à la base de données, mais avec l’utilisateur que vous venez de créer.

    sqlcmd -S tcp:serverNNNNN.database.windows.net,1433 -d marketplaceDb -U 'ApplicationUser' -P '[password]' -N -l 30
    
  3. Exécutez la requête suivante. Cette requête extrait des données d’une table à laquelle l’utilisateur a un accès autorisé.

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

    Vous obtenez une liste des clients.

    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. Découvrez ce qui se passe lorsque vous essayez d’interroger une table à laquelle vous n’avez pas accès.

    SELECT * FROM SalesLT.Address;
    GO
    

    Vous devez obtenir un message indiquant que vous n’avez pas accès à cette table.

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

Comme vous pouvez le voir, même si vous avez accordé l’accès en lecture/écriture à la base de données, vous pouvez sécuriser davantage l’accès aux données en refusant explicitement l’accès aux tables. Si vous avez plusieurs utilisateurs qui partagent un accès similaire, vous pouvez créer des rôles personnalisés avec les autorisations appropriées et simplifier votre administration.

Sécurisez bien votre base de données et accordez l’accès uniquement quand cela est nécessaire. Azure SQL Database intègre la possibilité de contrôler entièrement l’authentification et l’autorisation des identités pour accéder aux données de votre base de données.