Share via


Se connecter à Azure SQL Database et l’interroger à l’aide de .NET et Entity Framework Core

S’applique à Azure SQL Database

Ce démarrage rapide explique comment connecter une application à une base de données dans Azure SQL Database et effectuer des requêtes à l’aide de .NET et Entity Framework Core. Ce guide de démarrage rapide suit l’approche sans mot de passe recommandée pour se connecter à la base de données. Vous pouvez en apprendre plus sur les connexions sans mot de passe sur le Hub des connexions sans mot de passe.

Prérequis

Configurer le serveur de base de données

Les connexions sécurisées et sans mot de passe à Azure SQL Database nécessitent certaines configurations de base de données. Vérifiez les paramètres suivants sur votre serveur logique dans Azure pour vous connecter correctement à Azure SQL Database dans les environnements locaux et hébergés :

  1. Pour les connexions de développement local, vérifiez que votre serveur logique est configuré pour autoriser l’adresse IP de votre ordinateur local et d’autres services Azure à se connecter :

    • Accédez à la page Réseau de votre serveur.

    • Activez la case d’option Réseaux sélectionnés pour voir des options de configuration supplémentaires.

    • Sélectionnez Ajouter l’adresse IPv4 de votre client (xx.xx.xx.xx.xx.xx) pour ajouter une règle de pare-feu qui activera les connexions à partir de l’adresse IPv4 de votre ordinateur local. Vous pouvez également sélectionner + Ajouter une règle de pare-feu pour entrer une adresse IP spécifique de votre choix.

    • Vérifiez que la case Autoriser les services et les ressources Azure à accéder à ce serveur est cochée.

      Capture d’écran montrant comment configurer des règles de pare-feu.

      Avertissement

      L’activation du paramètre Autoriser les services et les ressources Azure à accéder à ce serveur n’est pas une pratique de sécurité recommandée pour les scénarios de production. Les applications réelles doivent implémenter des approches plus sécurisées, telles que des restrictions de pare-feu ou des configurations de réseau virtuel plus strictes.

      Vous pouvez en apprendre davantage sur les configurations de sécurité de base de données avec les ressources suivantes :

  2. Le serveur doit également activer l’authentification Microsoft Entra et disposer d’un compte d’administrateur Microsoft Entra affecté. Pour les connexions de développement local, le compte d'administrateur de Microsoft Entra doit être un compte que vous pouvez également connecter localement à Visual Studio ou à Azure CLI. Vous pouvez vérifier si l'authentification Microsoft Entra est activée sur la page Microsoft Entra ID de votre serveur logique.

    Capture d’écran montrant l’activation de l’authentification Microsoft Entra.

  3. Si vous utilisez un compte Azure personnel, assurez-vous d'avoir Microsoft Entra installé et configuré dans la base de données Azure SQL afin d'assigner votre compte en tant qu'administrateur de serveur. En revanche, si vous utilisez un compte d'entreprise, il est fort probable que Microsoft Entra ID soit déjà configuré pour vous.

Créer le projet

Les étapes à suivre de cette section permettent de créer une API web minimale .NET à l’aide de l’interface CLI .NET ou de Visual Studio 2022.

  1. Dans le menu Visual Studio, accédez à Fichier>Nouveau>Projet....

  2. Dans la fenêtre de boîte de dialogue, entrez ASP.NET dans la zone de recherche du modèle de projet, et sélectionnez le résultat API web ASP.NET Core. Choisissez Suivant en bas de la boîte de dialogue.

  3. Pour Nom du projet, entrez DotNetSQL. Conservez les valeurs par défaut pour le reste des champs, puis sélectionnez Suivant.

  4. Pour Framework, sélectionnez .NET 7.0 et décochez Utiliser des contrôleurs (décocher pour utiliser un minimum d’API). Ce guide de démarrage rapide utilise un modèle d’API minimale pour simplifier la création et la configuration du point de terminaison.

  5. Cliquez sur Créer. Le nouveau projet s’ouvre dans l’environnement Visual Studio.

Ajouter Entity Framework au projet

Pour vous connecter à Azure SQL Database à l’aide de .NET et Entity Framework Core, vous devez ajouter trois packages NuGet à votre projet à l’aide de l’une des méthodes suivantes :

  1. Dans la fenêtre Explorateur de solutions, cliquez avec le bouton droit sur le nœud Dépendances du projet, puis sélectionnez Gérer les packages NuGet.

  2. Dans la fenêtre résultante, recherchez EntityFrameworkCore. Localisez et installez les packages suivants :

  • Microsoft.EntityFrameworkCore : fournit les fonctionnalités essentielles d’Entity Framework Core
  • Microsoft.EntityFrameworkCore.SqlServer : fournit des composants supplémentaires pour se connecter au serveur logique
  • Microsoft.EntityFrameworkCore.Design : prend en charge l’exécution des migrations Entity Framework

Vous pouvez également exécuter la cmdlet Install-Package dans la fenêtre Console du Gestionnaire de package :

Install-Package Microsoft.EntityFrameworkCore
Install-Package Microsoft.EntityFrameworkCore.SqlServer
Install-Package Microsoft.EntityFrameworkCore.Design

Ajouter le code pour se connecter à Azure SQL Database

Les bibliothèques Entity Framework Core s’appuient sur les bibliothèques Microsoft.Data.SqlClient et Azure.Identity pour implémenter des connexions sans mot de passe à Azure SQL Database. La bibliothèque Azure.Identity fournit une classe appelée DefaultAzureCredential qui gère l’authentification sans mot de passe auprès d’Azure.

DefaultAzureCredential prend en charge plusieurs méthodes d’authentification et détermine laquelle utiliser au moment de l’exécution. Cette approche permet à votre application d’utiliser différentes méthodes d’authentification dans différents environnements (local ou production) sans implémenter de code spécifique à l’environnement. La Vue d’ensemble de la bibliothèque d’identités Azure explique l’ordre et les emplacements dans lesquels DefaultAzureCredential recherche les informations d’identification.

Effectuez les étapes suivantes pour vous connecter à Azure SQL Database à l’aide d’Entity Framework Core et de la classe sous-jacente DefaultAzureCredential :

  1. Ajoutez une section ConnectionStrings au fichier appsettings.Development.json afin qu’il corresponde au code suivant. Veillez à mettre à jour les espaces réservés <your database-server-name> et <your-database-name>.

    La chaîne de connexion sans mot de passe inclut une valeur de configuration de Authentication=Active Directory Default, qui permet à Entity Framework Core d’utiliser DefaultAzureCredential pour se connecter aux services Azure. Lorsque l’application s’exécute localement, elle s’authentifie auprès de l’utilisateur avec lequel vous êtes connecté à Visual Studio. Une fois l’application déployée sur Azure, le même code découvre et applique l’identité managée associée à l’application hébergée, que vous configurerez ultérieurement.

    Notes

    Les chaînes de connexion sans mot de passe peuvent être validées en toute sécurité dans le contrôle de code source, car elles ne contiennent pas de secrets, comme des noms d’utilisateur, des mots de passe ou des clés d’accès.

    {
        "Logging": {
            "LogLevel": {
                "Default": "Information",
                "Microsoft.AspNetCore": "Warning"
            }
        },
        "ConnectionStrings": {
            "AZURE_SQL_CONNECTIONSTRING": "Data Source=passwordlessdbserver.database.windows.net;
                Initial Catalog=passwordlessdb; Authentication=Active Directory Default; Encrypt=True;"
        }
    }
    
  2. Ajoutez le code suivant au fichier Program.cs situé au-dessus de la ligne de code qui lit var app = builder.Build();. Ce code effectue les configurations suivantes :

    • Récupère la chaîne de connexion de base de données sans mot de passe à partir du fichier appsettings.Development.json pour le développement local ou des variables d’environnement pour les scénarios de production hébergés.

    • Inscrit la classe Entity Framework Core DbContext auprès du conteneur d’injection de dépendances .NET.

      var connection = String.Empty;
      if (builder.Environment.IsDevelopment())
      {
          builder.Configuration.AddEnvironmentVariables().AddJsonFile("appsettings.Development.json");
          connection = builder.Configuration.GetConnectionString("AZURE_SQL_CONNECTIONSTRING");
      }
      else
      {
          connection = Environment.GetEnvironmentVariable("AZURE_SQL_CONNECTIONSTRING");
      }
      
      builder.Services.AddDbContext<PersonDbContext>(options =>
          options.UseSqlServer(connection));
      
  3. Ajoutez les points de terminaison suivants au bas du fichier Program.cs ci-dessus app.Run() pour récupérer et ajouter des entités dans la base de données à l’aide de la classe PersonDbContext.

    app.MapGet("/Person", (PersonDbContext context) =>
    {
        return context.Person.ToList();
    })
    .WithName("GetPersons")
    .WithOpenApi();
    
    app.MapPost("/Person", (Person person, PersonDbContext context) =>
    {
        context.Add(person);
        context.SaveChanges();
    })
    .WithName("CreatePerson")
    .WithOpenApi();
    

    Enfin, ajoutez les classes Person et PersonDbContext en bas du fichier Program.cs. La classe Personne représente un enregistrement unique dans la table de la base de données Persons. La classe PersonDbContext représente la base de données Personne et vous permet d’effectuer des opérations sur celle-ci via du code. Pour en savoir plus sur DbContext, consultez la documentation Prise en main pour Entity Framework Core.

    public class Person
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
    
    public class PersonDbContext : DbContext
    {
        public PersonDbContext(DbContextOptions<PersonDbContext> options)
            : base(options)
        {
        }
    
        public DbSet<Person> Person { get; set; }
    }
    

Exécuter les migrations pour créer la base de données

Pour mettre à jour le schéma de la base de données afin qu’il corresponde à votre modèle de données à l’aide d’Entity Framework Core, vous devez effectuer une migration. Les migrations peuvent créer et mettre à jour de manière incrémentielle un schéma de base de données pour le maintenir synchronisé avec le modèle de données de votre application. Pour en savoir plus sur ce modèle, consultez la vue d’ensemble des migrations.

  1. Ouvrez une fenêtre du terminal vers la racine de votre projet.

  2. Exécutez la commande suivante pour générer une migration initiale qui peut créer la base de données :

    Add-Migration InitialCreate
    
  3. Un dossier Migrations doit apparaître dans le répertoire de votre projet, ainsi qu’un fichier appelé InitialCreate avec des nombres uniques ajoutés. Exécutez la migration pour créer la base de données à l’aide de la commande suivante :

    Update-Database
    

    Les outils Entity Framework Core créent le schéma de base de données dans Azure défini par la classe PersonDbContext.

Tester l’application en local

L’application est prête à être testée localement. Vérifiez que vous êtes connecté à Visual Studio ou à Azure CLI avec le même compte que l’administrateur de votre base de données.

  1. Appuyez sur le bouton Exécuter en haut de Visual Studio pour lancer le projet d’API.

  2. Dans la page de l’interface utilisateur Swagger, développez la méthode POST, puis sélectionnez Essayer.

  3. Modifiez l’exemple JSON pour inclure des valeurs pour le prénom et le nom. Sélectionnez Exécuter pour ajouter un nouvel enregistrement à la base de données. L’API retourne une réponse de succès.

    Capture d’écran montrant comment tester l’API.

  4. Développez la méthode GET sur la page de l’interface utilisateur Swagger, puis sélectionnez Essayer. Sélectionnez Exécuter, et la personne que vous venez de créer est retournée.

Déployer dans Azure App Service

L’application est prête à être déployée sur Azure. Visual Studio peut créer une instance Azure App Service et déployer votre application au cours d’un même workflow.

  1. Vérifiez que l’application est arrêtée et générée correctement.

  2. Dans la fenêtre Explorateur de solutions de Visual Studio, cliquez avec le bouton droit sur le nœud de projet de niveau supérieur, puis sélectionnez Publier.

  3. Dans la boîte de dialogue de publication, sélectionnez Azure comme cible de déploiement, puis sélectionnez Suivant.

  4. Pour la cible spécifique, sélectionnez Azure App Service (Windows), puis Suivant.

  5. Sélectionnez l’icône verte + pour créer une instance App Service sur laquelle effectuer le déploiement, et entrez les valeurs suivantes :

    • Nom : conservez la valeur par défaut.

    • Nom de l’abonnement : sélectionnez l’abonnement à déployer.

    • Groupe de ressources : sélectionnez Nouveau et créez un nouveau groupe de ressources appelé msdocs-dotnet-sql.

    • Plan d’hébergement : sélectionnez Nouveau pour ouvrir la boîte de dialogue Plan d’hébergement. Laissez les valeurs par défaut et sélectionnez OK.

    • Sélectionnez Créer pour fermer la boîte de dialogue d’origine. Visual Studio crée la ressource App Service dans Azure.

      Capture d’écran montrant comment déployer avec Visual Studio.

  6. Une fois la ressource créée, vérifiez qu’elle est sélectionnée dans la liste des services d’application, puis sélectionnez Suivant.

  7. Dans l’étape Gestion des API, cochez la case Ignorer cette étape en bas, puis sélectionnez Terminer.

  8. Sélectionnez Publier en haut à droite du résumé du profil de publication pour déployer l’application sur Azure.

Une fois le déploiement terminé, Visual Studio lance le navigateur pour afficher l’application hébergée, mais à ce stade, l’application ne fonctionne pas correctement sur Azure. Vous devez toujours configurer la connexion sécurisée entre App Service et la base de données SQL pour récupérer vos données.

Connecter App Service à Azure SQL Database

Les étapes suivantes sont requises pour connecter l’instance App Service à Azure SQL Database :

  1. Créez une identité managée pour App Service. La bibliothèque Microsoft.Data.SqlClient incluse dans votre application découvre automatiquement l’identité managée, tout comme elle a découvert votre utilisateur Visual Studio local.
  2. Créez un utilisateur de base de données SQL et associez-le à l’identité managée App Service.
  3. Attribuez des rôles SQL à l’utilisateur de base de données qui octroient des autorisations de lecture, d’écriture et éventuellement d’autres autorisations.

Plusieurs outils sont disponibles pour implémenter ces étapes :

Service Connector est un outil qui simplifie les connexions authentifiées entre différents services dans Azure. Service Connector prend actuellement en charge la connexion d’App Service à une base de données SQL via Azure CLI à l’aide de la commande az webapp connection create sql. Cette commande unique effectue les trois étapes mentionnées ci-dessus pour vous.

az webapp connection create sql
-g <your-resource-group>
-n <your-app-service-name>
--tg <your-database-server-resource-group>
--server <your-database-server-name>
--database <your-database-name>
--system-identity

Vous pouvez vérifier les modifications apportées par Service Connector sur les paramètres App Service.

  1. Accédez à la page Identité de votre App Service. Sous l’onglet Affecté par le système , l’État doit être défini sur Activé. Cette valeur signifie qu’une identité managée affectée par le système a été activée pour votre application.

  2. Accédez à la page Configuration de votre App Service. Sous l’onglet Chaînes de connexion, vous devriez voir une chaîne de connexion appelée AZURE_SQL_CONNECTIONSTRING. Sélectionnez le texte Cliquer pour afficher la valeur pour afficher la chaîne de connexion sans mot de passe générée. Le nom de cette chaîne de connexion s’aligne sur celui que vous avez configuré dans votre application, de sorte qu’il est détecté automatiquement lors de l’exécution dans Azure.

Important

Bien que cette solution offre une approche simple pour la prise en main, il ne s’agit pas d’une bonne pratique pour les environnements de production d’entreprise. Dans ces scénarios, l’application ne doit pas effectuer toutes les opérations à l’aide d’une seule identité élevée. Vous devez essayer d’implémenter le principe de privilège minimum en configurant plusieurs identités avec des autorisations spécifiques pour des tâches spécifiques.

Vous pouvez en apprendre plus sur la configuration des rôles de base de données et la sécurité avec les ressources suivantes :

Tutoriel : Sécuriser une base de données dans Azure SQL Database

Autoriser l’accès base de données à SQL Database

Tester l’application déployée

Accédez à l’URL de l’application pour tester que la connexion à Azure SQL Database fonctionne. Vous pouvez localiser l’URL de votre application dans la page de vue d’ensemble d’App Service. Ajoutez le chemin d’accès /person à la fin de l’URL pour accéder au même point de terminaison que celui que vous avez testé localement.

La personne que vous avez créée localement devrait s’afficher dans le navigateur. Félicitations ! Votre application est maintenant connectée à Azure SQL Database dans les environnements locaux et hébergés.

Nettoyer les ressources

Une fois que vous avez terminé d’utiliser Azure SQL Database, supprimez la ressource pour éviter les coûts imprévus.

  1. Dans la barre de recherche du portail Azure, recherchez Azure SQL et sélectionnez le résultat correspondant.

  2. Recherchez et sélectionnez votre base de données dans la liste.

  3. Dans la page Vue d’ensemble d’Azure SQL Database, sélectionnez Supprimer.

  4. Dans la page Voulez-vous vraiment supprimer... qui s’ouvre, tapez le nom de la base de données pour confirmer, puis sélectionnez Supprimer.