Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:Azure SQL Database
En esta guía de inicio rápido se describe cómo conectar una aplicación a una base de datos de Azure SQL Database y realizar consultas usando .NET y Entity Framework Core. En este inicio rápido se sigue el enfoque recomendado sin contraseña para conectarse a la base de datos. Puede consultar más información sobre las conexiones sin contraseña en Conexiones sin contraseña para servicios de Azure.
Requisitos previos
- Una suscripción de Azure.
- Una SQL Database configurada para la autenticación con Microsoft Entra ID (anteriormente Azure Active Directory). Puede crear uno mediante el inicio rápido: Creación de una base de datos única: Azure SQL Database.
- .NET 9.0 o posterior.
- Visual Studio o posterior con la carga de trabajo Desarrollo web y ASP.NET.
- La versión más reciente de la CLI de Azure.
- Versión más reciente de las herramientas de Entity Framework Core:
- Los usuarios de Visual Studio deben instalar las herramientas de la Consola del Administrador de paquetes para Entity Framework Core.
- Los usuarios de la CLI de .NET deben instalar las herramientas de la CLI de .NET para Entity Framework Core.
Configuración del servidor de bases de datos
Las conexiones seguras sin contraseña a Azure SQL Database requieren una cierta configuración de la base de datos. Compruebe la siguiente configuración en el servidor lógico de Azure para conectarse correctamente a Azure SQL Database tanto en el entorno local como en un entorno hospedado:
En el caso de las conexiones de desarrollo local, asegúrese de que el servidor lógico está configurado para permitir que la dirección IP de la máquina local y otros servicios de Azure se conecten:
Vaya a la página Redes del servidor.
Active o desactive el botón de radio Redes seleccionadas para mostrar opciones de configuración adicionales.
Seleccione Agregar la dirección IPv4 de cliente (xx.xx.xx.xx) para agregar una regla de firewall que habilitará las conexiones desde la dirección IPv4 del equipo local. Como alternativa, también puede seleccionar + Agregar una regla de firewall para especificar una dirección IP específica de su elección.
Asegúrese de que la casilla Permitir que los servicios y recursos de Azure accedan a este servidor esté seleccionada.
Advertencia
La habilitación de la opción Permitir que los servicios y recursos de Azure accedan a este servidor no es un procedimiento de seguridad recomendado para escenarios de producción. Las aplicaciones reales deben implementar enfoques más seguros, como restricciones de firewall más fuertes o configuraciones de red virtual.
Puede consultar más información sobre las configuraciones de seguridad de la base de datos en los siguientes recursos:
El servidor también debe tener habilitada la autenticación de Microsoft Entra y tener asignada una cuenta de administrador de Microsoft Entra. Para las conexiones de desarrollo local, la cuenta de administrador de Microsoft Entra debe ser una cuenta que también puede iniciar sesión en Visual Studio o en la CLI de Azure localmente. Puede comprobar si el servidor tiene habilitada la autenticación de Microsoft Entra en la página de Microsoft Entra ID del servidor lógico.
Si usa una cuenta personal de Azure, asegúrese de que ha instalado y configurado Microsoft Entra para Azure SQL Database con el fin de asignar su cuenta como administrador del servidor. Si usa una cuenta corporativa, es probable que Microsoft Entra ID ya esté configurado.
Creación del proyecto
En los pasos de esta sección se crea una API web mínima de .NET mediante la CLI de .NET o Visual Studio 2022.
En la barra de menús de Visual Studio, vaya a Archivo>nuevo>Proyecto....
En la ventana de diálogo, escriba ASP.NET en el cuadro de búsqueda de la plantilla de proyecto y seleccione el resultado de la API web de ASP.NET Core. Elija Siguiente en la parte inferior del cuadro de diálogo.
En Nombre del proyecto, escriba DotNetSQL. Deje los valores predeterminados para el resto de los campos y seleccione Siguiente.
En Framework, seleccione .NET 9.0 y desactive Usar controladores. En esta guía de inicio rápido se usa una plantilla de API mínima para simplificar la creación y configuración de puntos de conexión.
Seleccione Create. El nuevo proyecto se abre en el entorno de Visual Studio.
Incorporación de Entity Framework Core al proyecto
Para conectarse a Azure SQL Database mediante .NET y Entity Framework Core, debe agregar tres paquetes NuGet al proyecto siguiendo uno de los siguientes métodos:
En la ventana Explorador de soluciones, haga clic con el botón derecho en el nodo Dependencias y seleccione Administrar paquetes NuGet.
En la ventana resultante, busque EntityFrameworkCore. Busque e instale los siguientes paquetes:
-
Microsoft.EntityFrameworkCore: proporciona la funcionalidad esencial de Entity Framework Core. -
Microsoft.EntityFrameworkCore.SqlServer: proporciona componentes adicionales para conectarse al servidor lógico. -
Microsoft.EntityFrameworkCore.Design: proporciona compatibilidad con la ejecución de migraciones de Entity Framework. -
Microsoft.EntityFrameworkCore.Tools: proporciona compatibilidad con herramientas de consola del Administrador de paquetes de Visual Studio (solo PowerShell) -
Swashbuckle.AspNetCore: opcional: proporciona compatibilidad con la interacción de SwaggerUI con los puntos de conexión de la aplicación.
Adición del código para conectarse a Azure SQL Database
Las bibliotecas de Entity Framework Core se basan en las bibliotecas Microsoft.Data.SqlClient y Azure.Identity para implementar conexiones sin contraseña a Azure SQL Database. La biblioteca Azure.Identity proporciona una clase denominada DefaultAzureCredential que controla la autenticación sin contraseña en Azure.
DefaultAzureCredential admite varios métodos de autenticación y determina qué método se usa en tiempo de ejecución. Este enfoque permite que la aplicación use diferentes métodos de autenticación en distintos entornos (local frente a producción) sin implementar código específico del entorno. La introducción a la biblioteca de identidades de Azure explica el orden y las ubicaciones en las que DefaultAzureCredential busca las credenciales.
Complete los pasos siguientes para conectarse a Azure SQL Database por medio de Entity Framework Core y la clase DefaultAzureCredential subyacente:
Agregue una sección
ConnectionStringsal archivoappsettings.Development.jsonpara que coincida con el siguiente código. Reemplace<server>.database.windows.netpor el nombre del servidor de bases de datos sin contraseña al que desea conectarse y<database>por el nombre de la base de datos.{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "ConnectionStrings": { "AZURE_SQL_CONNECTIONSTRING": "Data Source=<server>.database.windows.net;Initial Catalog=<database>;Authentication=Active Directory Default;Encrypt=True;" } }Nota:
Recuerde actualizar los
<your database-server-name>marcadores de posición y<your-database-name>en la cadena de conexión de la base de datos. Las cadenas de conexión sin contraseña son seguras para confirmar el control de código fuente, ya que no contienen secretos como nombres de usuario, contraseñas o claves de acceso.La cadena de conexión sin contraseña incluye un valor de configuración de
Authentication=Active Directory Default, que permite a Entity Framework Core usarDefaultAzureCredentialpara conectarse a los servicios de Azure. Cuando la aplicación se ejecuta localmente, se autentica con el usuario con el que ha iniciado sesión en Visual Studio. Una vez que la aplicación se implementa en Azure, el mismo código detecta y aplica la identidad administrada asociada a la aplicación hospedada, que se configura más adelante.Reemplace el contenido del archivo
Program.cspor el código siguiente:using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; var builder = WebApplication.CreateBuilder(); builder.Services.AddOpenApi(); 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)); var app = builder.Build(); if (app.Environment.IsDevelopment()) { app.MapOpenApi(); app.UseSwaggerUI(options => { options.SwaggerEndpoint("/openapi/v1.json", "v1"); }); } app.MapGet("/", () => "Hello world!"); app.MapGet("/Person", (PersonDbContext context) => { return context.Person.ToList(); }); app.MapPost("/Person", (Person person, PersonDbContext context) => { context.Add(person); context.SaveChanges(); }); app.Run(); 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; } }El código anterior controla los pasos siguientes:
- Recupera la cadena de conexión a la base de datos sin contraseña del archivo
appsettings.Development.jsonpara el desarrollo local, o bien de las variables de entorno para escenarios de producción hospedados. - Registra la clase
DbContextde Entity Framework Core en el contenedor de inserción de dependencias de .NET. Puede obtener más información sobreDbContexten el artículo Introducción a EF Core, en la documentación de Entity Framework Core. - Configura la compatibilidad con OpenAPI de .NET 9.0 con SwaggerUI para proporcionar una interfaz de usuario que puede usar para interactuar con los puntos de conexión y la base de datos de la aplicación.
- Agrega puntos de conexión para recuperar y agregar entidades en la base de datos.
- Define una
Personclase para representar un único registro en laPersonstabla de base de datos y laPersonDbContextclase que se registró con el contenedor de inserción de dependencias de .NET.
- Recupera la cadena de conexión a la base de datos sin contraseña del archivo
Ejecución de las migraciones para crear la base de datos
Para actualizar el esquema de la base de datos con el fin de que coincida con el modelo de datos mediante Entity Framework Core, debe usar una migración. Las migraciones pueden crear y actualizar incrementalmente el esquema de una base de datos para mantenerlo sincronizado con el modelo de datos de una aplicación. Puede consultar más información sobre este patrón en Descripción general de las migraciones.
Abra una ventana de terminal en la raíz del proyecto.
Ejecute el siguiente comando para generar una migración inicial que pueda crear la base de datos:
Add-Migration InitialCreate
Debe aparecer la carpeta
Migrationsen el directorio del proyecto, junto con un archivo denominadoInitialCreatecon números únicos antepuestos. Ejecute la migración para crear la base de datos mediante el comando siguiente y las herramientas entity Framework Core crean el esquema de base de datos en Azure definido por laPersonDbContextclase .Update-Database
Prueba de la aplicación de forma local
La aplicación está lista para probarse localmente. Asegúrese de que ha iniciado sesión en Visual Studio o en la CLI de Azure con la misma cuenta que ha establecido como administrador de la base de datos.
Presione el botón Ejecutar en la parte superior de la ventana de Visual Studio para iniciar el proyecto de API.
En la página de la interfaz de usuario de Swagger, expanda el método POST y seleccione Probar.
Modifique el código JSON de ejemplo para incluir valores para el nombre y el nombre de familia. Seleccione Ejecutar para agregar un nuevo registro a la base de datos. La API devuelve una respuesta correcta.
Expanda el
GETmétodo en la página de la interfaz de usuario de Swagger y seleccione Pruébelo. Seleccione Ejecutar y se devolverá la persona que acaba de crear.
Implementación en Azure App Service
La aplicación está lista para implementarse en Azure. Visual Studio puede crear una instancia de Azure App Service e implementar la aplicación en un único flujo de trabajo.
Asegúrese de que la aplicación se detiene y se compila correctamente.
En la ventana Explorador de soluciones de Visual Studio, haga clic con el botón derecho en el nodo de proyecto del nivel superior y seleccione Publicar.
En el cuadro de diálogo de publicación, seleccione Azure como destino de implementación y, después, seleccione Siguiente.
Para el destino específico, elija Azure App Service (Windows) y seleccione Siguiente.
Seleccione el icono + verde para crear una nueva instancia de App Service para implementarla y escriba los siguientes valores:
- Nombre: deje el valor predeterminado.
- Nombre de la suscripción: seleccione la suscripción en la que se va a realizar la implementación.
- Grupo de recursos: seleccione Nuevo y cree un grupo de recursos denominado msdocs-dotnet-sql.
- Plan de hospedaje: seleccione Nuevo para abrir el cuadro de diálogo Plan de hospedaje. Deje los valores predeterminados como están y seleccione Aceptar.
- Seleccione Crear para cerrar el cuadro de diálogo original. Visual Studio crea un recurso de App Service en Azure.
Una vez creado el recurso, asegúrese de seleccionar en la lista de servicios de aplicaciones y, a continuación, seleccione Siguiente.
En el paso API Management, seleccione la casilla Omitir este paso en la parte inferior y elija Finalizar.
Seleccione Publicar en la esquina superior derecha del resumen del perfil de publicación para implementar la aplicación en Azure.
Cuando finalice la implementación, Visual Studio inicia el explorador para mostrar la aplicación hospedada. Debería ver el Hello world mensaje del punto de conexión predeterminado. Sin embargo, en este momento los puntos de conexión de base de datos no funcionan correctamente en Azure. Todavía debe configurar la conexión segura entre la instancia de App Service y la base de datos SQL para recuperar los datos.
Conexión de App Service a Azure SQL Database
Los pasos siguientes son necesarios para conectar la instancia de App Service a Azure SQL Database:
- Cree una identidad administrada para App Service. La
Microsoft.Data.SqlClientbiblioteca incluida en la aplicación detecta automáticamente la identidad administrada, al igual que detectó el usuario local de Visual Studio. - Cree un usuario de SQL Database y asócielo a la identidad administrada de App Service.
- Asigne roles de SQL al usuario de la base de datos que le concedan permisos de lectura, escritura y quizá otros permisos.
Hay varias herramientas disponibles para implementar estos pasos:
El conector de servicio es una herramienta que simplifica las conexiones autenticadas entre distintos servicios de Azure. Service Connector admite actualmente la conexión de una instancia de App Service a una base de datos SQL mediante la extensión sin contraseña de la CLI de Azure.
Instale o actualice la extensión sin contraseña de Service Connector:
az extension add --name serviceconnector-passwordless --upgradeEjecute el comando para conectar la
az webapp connection create sqlaplicación web a la base de datos mediante una identidad administrada asignada por el sistema. Reemplace los marcadores de posición por los valores adecuados: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
Puede comprobar los cambios realizados por el conector de servicio en la configuración de App Service.
Vaya a la página Identidad de la instancia de App Service. En la pestaña Asignado por el sistema, el Estado debe establecerse en Activado. Este valor significa que se habilitó una identidad administrada asignada por el sistema para la aplicación.
Vaya a la página Configuración de la instancia de App Service. En la pestaña Cadenas de conexión, debería ver una cadena de conexión denominada
AZURE_SQL_CONNECTIONSTRING. Seleccione el texto Haga clic aquí para mostrar el valor para ver la cadena de conexión sin contraseña que se ha generado. El nombre de esta cadena de conexión se alinea con el que configuró en la aplicación, por lo que se detecta automáticamente al ejecutarse en Azure.
Importante
Aunque esta solución proporciona un enfoque sencillo para empezar, no es un procedimiento recomendado para entornos de producción empresariales. En esos escenarios, la aplicación no debe realizar todas las operaciones con una sola identidad con privilegios elevados. Debe intentar implementar el principio de privilegios mínimos configurando varias identidades con permisos específicos para tareas específicas. Para obtener más información sobre cómo configurar los roles de base de datos y la seguridad, consulte:
Prueba de la aplicación implementada
Vaya a la dirección URL de la aplicación para probar que funciona la conexión a Azure SQL Database. Puede encontrar la dirección URL de la aplicación en la página de información general de App Service. Incluya la ruta de acceso /person al final de la dirección URL para ir al mismo punto de conexión que ha probado localmente.
La persona que creó localmente debe mostrarse en el explorador. Enhorabuena, la aplicación ahora está conectada a Azure SQL Database en entornos locales y hospedados.
Limpiar los recursos
Cuando haya terminado de trabajar con Azure SQL Database, elimine el recurso para evitar costos no previstos.
En la barra de búsqueda de Azure Portal, busque Azure SQL y seleccione el resultado coincidente.
Busque y seleccione la base de datos en la lista de bases de datos.
En la página Información general de Azure SQL Database, seleccione Eliminar.
En la página Está seguro de que quiere eliminar… de Azure que se abre, escriba el nombre de la base de datos para confirmar y, después, seleccione Eliminar.
Nota:
Si implementó la aplicación de ejemplo en Azure, asegúrese de buscar y eliminar también el recurso de App Service para evitar costos no deseados.
Contenido relacionado
- Tutorial: Protección de una base de datos en Azure SQL Database
- Autorización del acceso de base de datos a SQL Database, Instancia administrada de SQL y Azure Synapse Analytics
- Información general sobre las funciones de seguridad de Azure SQL Database y SQL Managed Instance
- Cuaderno de estrategias para abordar requisitos de seguridad comunes con Azure SQL Database y Azure SQL Managed Instance