Aracılığıyla paylaş


.NET ve Microsoft.Data.SqlClient kitaplığını kullanarak Azure SQL Veritabanı bağlanma ve sorgulama

Şunlar için geçerlidir:Azure SQL Veritabanı

Bu hızlı başlangıçta bir uygulamanın Azure SQL Veritabanı'deki bir veritabanına nasıl bağlandığı ve .NET ve Microsoft.Data.SqlClient kitaplığını kullanarak sorgular nasıl gerçekleştirebileceğiniz açıklanır. Bu hızlı başlangıç, veritabanına bağlanmak için önerilen parolasız yaklaşımı izler. Parolasız bağlantılar hakkında daha fazla bilgiyi parolasız hub'dan öğrenebilirsiniz.

Önkoşullar

  • Bir Azure aboneliği.
  • Microsoft Entra Id (eski adıyla Azure Active Directory) ile kimlik doğrulaması için yapılandırılmış bir Azure SQL veritabanı. "Hızlı Başlangıç: Veritabanı Oluştur’u kullanarak bir tane oluşturabilirsiniz."
  • Azure CLI'nın en son sürümü.
  • Visual Studio veya üzeri, ASP.NET ve web geliştirme iş yüküyle.
  • .NET 7.0 veya üzeri.

Veritabanını yapılandırma

Azure SQL Veritabanı için güvenli, parolasız bağlantılar için belirli veritabanı yapılandırmaları gerekir. Hem yerel hem de barındırılan ortamlardaki Azure SQL Veritabanı düzgün bir şekilde bağlanmak için Azure'daki mantıksal sunucunuzda aşağıdaki ayarları doğrulayın:

  1. Yerel geliştirme bağlantıları için mantıksal sunucunuzun yerel makine IP adresinizin ve diğer Azure hizmetlerinin bağlanmasına izin verecek şekilde yapılandırıldığından emin olun:

    • Sunucunuzun Ağ sayfasına gidin.

    • Ek yapılandırma seçeneklerini göstermek için Seçili ağlar radyo düğmesini değiştirin.

    • Yerel makinenizin IPv4 adresinden bağlantıları etkinleştirecek bir güvenlik duvarı kuralı eklemek için İstemci IPv4 adresinizi (xx.xx.xx.xx) ekle'yi seçin. Alternatif olarak, istediğiniz belirli bir IP adresini girmek için + Güvenlik duvarı kuralı ekle'yi de seçebilirsiniz.

    • Azure hizmetlerinin ve kaynaklarının bu sunucuya erişmesine izin ver onay kutusunun seçili olduğundan emin olun.

      Güvenlik duvarı kurallarını yapılandırmayı gösteren ekran görüntüsü.

      Uyarı

      Azure hizmetlerinin ve kaynaklarının bu sunucuya erişmesine izin ver ayarını etkinleştirmek, üretim senaryoları için önerilen bir güvenlik uygulaması değildir. Gerçek uygulamalar daha güçlü güvenlik duvarı kısıtlamaları veya sanal ağ yapılandırmaları gibi daha güvenli yaklaşımlar uygulamalıdır.

      Aşağıdaki kaynaklarda veritabanı güvenlik yapılandırmaları hakkında daha fazla bilgi edinebilirsiniz:

  2. Sunucuda ayrıca Microsoft Entra kimlik doğrulaması etkinleştirilmiş ve atanmış bir Microsoft Entra yönetici hesabı olmalıdır. Yerel geliştirme bağlantıları için, Microsoft Entra yönetici hesabı yerel olarak Visual Studio'da veya Azure CLI'da oturum açabileceğiniz bir hesap olmalıdır. Mantıksal sunucunuzun Microsoft Entra Id sayfasında sunucunuzda Microsoft Entra kimlik doğrulamasının etkinleştirilip etkinleştirilmediğini doğrulayabilirsiniz.

    Microsoft Entra kimlik doğrulamasını etkinleştirmeyi gösteren ekran görüntüsü.

  3. Kişisel bir Azure hesabı kullanıyorsanız hesabınızı sunucu yöneticisi olarak atamak için Microsoft Entra kurulumunu yaptığınızdan ve Azure SQL Veritabanı için yapılandırdığınızdan emin olun. Şirket hesabı kullanıyorsanız, Microsoft Entra Id büyük olasılıkla sizin için zaten yapılandırılmış olacaktır.

Proje oluşturma

İlerideki adımlar için .NET CLI veya Visual Studio 2022 kullanarak bir .NET Minimal Web API'si oluşturun.

  1. Visual Studio menüsünde Dosya>>. seçeneğine gidin.

  2. İletişim kutusu penceresinde proje şablonu arama kutusuna ASP.NET girin ve ASP.NET Çekirdek Web API'sinin sonucunu seçin. İletişim kutusunun alt kısmındaki İleri'yi seçin.

  3. Proje Adı için DotNetSQL girin. Kalan alanlar için varsayılan değerleri bırakın ve İleri'yi seçin.

  4. Çerçeve için .NET 7.0'ı seçin ve "Denetleyicileri kullan" seçeneğinin işaretini kaldırın (minimal API'leri kullanmak için işaretini kaldırın). Bu hızlı başlangıçta uç nokta oluşturma ve yapılandırma süreçlerini kolaylaştırmak için Minimal API şablonu kullanılmaktadır.

  5. Oluştur’u seçin. Yeni proje Visual Studio ortamında açılır.

Microsoft.Data.SqlClient kitaplığını ekleme

Azure SQL Veritabanı'na .NET ile bağlanmak için Microsoft.Data.SqlClient yükleyin. Bu paket veritabanlarına bağlanmak, komutları yürütmek ve sonuçları almak için bir veri sağlayıcısı işlevi görür.

Not

Microsoft.Data.SqlClient yüklediğinizden ve System.Data.SqlClient yüklemediğinizden emin olun. Microsoft.Data.SqlClient , ek özellikler sağlayan SQL istemci kitaplığının daha yeni bir sürümüdür.

  1. Çözüm Gezgini penceresinde projenin Bağımlılıklar düğümüne sağ tıklayın ve NuGet Paketlerini Yönet'i seçin.

  2. Sonuçta elde edilen pencerede SqlClient için arama yapın. Microsoft.Data.SqlClient Sonucu bulun ve Yükle'yi seçin.

Bağlantı dizesini yapılandırma

Parolasız bağlantılarla Azure SQL Veritabanı'na yerel geliştirme için, ConnectionStrings bölümünü appsettings.json dosyasına ekleyin. <database-server-name> ve <database-name> yer tutucularını kendi değerlerinizle değiştirin.

"ConnectionStrings": {
    "AZURE_SQL_CONNECTIONSTRING": "Server=tcp:<database-server-name>.database.windows.net,1433;Initial Catalog=<database-name>;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;Authentication=\"Active Directory Default\";"
}

Parolasız bağlantı dizesi, Authentication="Active Directory Default" değeriyle bir yapılandırma ayarlayarak, Microsoft.Data.SqlClient kitaplığının DefaultAzureCredential adlı bir sınıfı kullanarak Azure SQL Veritabanı'na bağlanmasını sağlar. DefaultAzureCredential Azure hizmetlerine parolasız bağlantıları etkinleştirir ve SQL istemci kitaplığının bağımlı olduğu Azure Kimlik kitaplığı tarafından sağlanır. DefaultAzureCredential birden çok kimlik doğrulama yöntemini destekler ve farklı ortamlar için çalışma zamanında hangisinin kullanılacağını belirler.

Örneğin, uygulama yerel olarak çalıştığında, DefaultAzureCredential Visual Studio'da oturum açtığınız kullanıcı veya Azure CLI gibi diğer yerel araçlar aracılığıyla kimlik doğrulaması yapar. Uygulama Azure'a dağıtıldıktan sonra, daha sonra yapılandırabileceğiniz barındırılan uygulamayla ilişkili yönetilen kimliği aynı kod bulur ve uygular. Azure Kimlik kitaplığına genel bakış , kimlik bilgilerinin arandığı DefaultAzureCredential sırayı ve konumları açıklar.

Not

Parolasız bağlantı dizesi, kullanıcı adları, parolalar veya erişim anahtarları gibi gizli diziler içermediğinden kaynak denetimine bağlanmak güvenlidir.

Azure SQL Veritabanı bağlanmak için kodu ekleme

Dosyanın içeriğini Program.cs aşağıdaki önemli adımları gerçekleştiren aşağıdaki kodla değiştirin:

  • Parolasız bağlantı dizesini appsettings.json'den alır
  • Başlatma sırasında veritabanında bir Persons tablo oluşturur (yalnızca test senaryoları için)
  • Tabloda depolanan Persons tüm kayıtları almak için bir HTTP GET uç nokta oluşturur
  • Tabloya yeni kayıtlar Persons eklemek için post HTTP uç noktası oluşturur
using Microsoft.Data.SqlClient;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// For production scenarios, consider keeping Swagger configurations behind the environment check
// if (app.Environment.IsDevelopment())
// {
    app.UseSwagger();
    app.UseSwaggerUI();
// }

app.UseHttpsRedirection();

string connectionString = app.Configuration.GetConnectionString("AZURE_SQL_CONNECTIONSTRING")!;

try
{
    // Table would be created ahead of time in production
    using var conn = new SqlConnection(connectionString);
    conn.Open();

    var command = new SqlCommand(
        "CREATE TABLE Persons (ID int NOT NULL PRIMARY KEY IDENTITY, FirstName varchar(255), LastName varchar(255));",
        conn);
    using SqlDataReader reader = command.ExecuteReader();
}
catch (Exception e)
{
    // Table may already exist
    Console.WriteLine(e.Message);
}

app.MapGet("/Person", () => {
    var rows = new List<string>();

    using var conn = new SqlConnection(connectionString);
    conn.Open();

    var command = new SqlCommand("SELECT * FROM Persons", conn);
    using SqlDataReader reader = command.ExecuteReader();

    if (reader.HasRows)
    {
        while (reader.Read())
        {
            rows.Add($"{reader.GetInt32(0)}, {reader.GetString(1)}, {reader.GetString(2)}");
        }
    }

    return rows;
})
.WithName("GetPersons")
.WithOpenApi();

app.MapPost("/Person", (Person person) => {
    using var conn = new SqlConnection(connectionString);
    conn.Open();

    var command = new SqlCommand(
        "INSERT INTO Persons (firstName, lastName) VALUES (@firstName, @lastName)",
        conn);

    command.Parameters.Clear();
    command.Parameters.AddWithValue("@firstName", person.FirstName);
    command.Parameters.AddWithValue("@lastName", person.LastName);

    using SqlDataReader reader = command.ExecuteReader();
})
.WithName("CreatePerson")
.WithOpenApi();

app.Run();

Son olarak, Person sınıfını Program.cs dosyasının en altına ekleyin. Bu sınıf, veritabanının Persons tablosundaki tek bir kaydı temsil eder.

public class Person
{
    public required string FirstName { get; set; }
    public required string LastName { get; set; }
}

Uygulamayı yerel olarak çalıştırma ve test edin

Uygulama yerel olarak test edilmeye hazırdır. Veritabanınızın yöneticisi olarak ayarladığınız hesapla Visual Studio'da veya Azure CLI'da oturum açtığınızdan emin olun.

  1. API projesini başlatmak için Visual Studio'nun üst kısmındaki çalıştır düğmesine basın.

  2. Swagger kullanıcı arabirimi sayfasında POST yöntemini genişletin ve Deneyin'i seçin.

  3. Örnek JSON'ı, first ve last adları için değerler içerecek şekilde değiştirin. Veritabanına yeni bir kayıt eklemek için Yürüt'e tıklayın. API başarılı bir yanıt döndürür.

    API'nin nasıl test yapılacağını gösteren ekran görüntüsü.

  4. GET Swagger kullanıcı arabirimi sayfasında yöntemini genişletin ve Deneyin'i seçin. Yürüt'e tıklayın ve yeni oluşturduğunuz kişi döndürülür.

Azure App Service’e dağıtma

Uygulama Azure'a dağıtılmaya hazırdır. Visual Studio bir Azure Uygulaması Hizmeti oluşturabilir ve uygulamanızı tek bir iş akışında dağıtabilir.

  1. Uygulamanın durdurulduğundan ve başarıyla derlendiğinden emin olun.

  2. Visual Studio'nun Çözüm Gezgini penceresinde üst düzey proje düğümüne sağ tıklayın ve Yayımla'yı seçin.

  3. Yayımlama iletişim kutusunda dağıtım hedefi olarak Azure'ı ve ardından İleri'yi seçin.

  4. Belirli bir hedef için Azure Uygulaması Hizmeti (Windows) ve ardından İleri'yi seçin.

  5. + Dağıtılacak yeni bir App Service oluşturmak için simgesini seçin ve aşağıdaki değerleri girin:

    • Ad: Varsayılan değeri bırakın.
    • Abonelik adı: Dağıtılacak aboneliği seçin.
    • Kaynak grubu: Yeni'yi seçin ve msdocs-dotnet-sql adlı yeni bir kaynak grubu oluşturun.
    • Barındırma Planı: Barındırma planı iletişim kutusunu açmak için Yeni'yi seçin. Varsayılan değerleri bırakın ve Tamam'ı seçin.
    • Özgün iletişim kutusunu kapatmak için Oluştur'u seçin. Visual Studio, Azure'da App Service kaynağını oluşturur.

    Visual Studio ile dağıtmayı gösteren ekran görüntüsü.

  6. Kaynak oluşturulduktan sonra uygulama hizmetleri listesinden seçildiğinden emin olun ve İleri'yi seçin.

  7. API Management adımında, alttaki Bu adımı atla onay kutusunu ve ardından Son'u seçin.

  8. Son adımında, iletişim kutusu otomatik olarak kapatılmıyorsa Kapat'ı seçin.

  9. Uygulamayı Azure'a dağıtmak için yayımlama profili özetinin sağ üst kısmındaki Yayımla'yı seçin.

Dağıtım tamamlandığında, Visual Studio barındırılan uygulamayı görüntülemek için tarayıcıyı başlatır, ancak bu noktada uygulama Azure'da düzgün çalışmaz. Yine de verilerinizi almak için App Service ile SQL veritabanı arasındaki güvenli bağlantıyı yapılandırmanız gerekir.

App Service'i Azure SQL Veritabanı'a bağlama

App Service örneği ile Azure SQL Veritabanı arasında parolasız bağlantı oluşturmak için aşağıdaki adımlar gereklidir:

  1. App Service için yönetilen kimlik oluşturma. Microsoft.Data.SqlClient Uygulamanıza dahil edilen kitaplık, yerel Visual Studio kullanıcınızı keşfettiği gibi yönetilen kimliği otomatik olarak bulur.
  2. Bir SQL veritabanı kullanıcısı oluşturun ve bunu App Service yönetilen kimliğiyle ilişkilendirin.
  3. Veritabanı kullanıcısına okuma, yazma ve diğer izinlere izin veren SQL rolleri atayın.

Bu adımları uygulamak için kullanabileceğiniz birden çok araç vardır:

Hizmet Bağlayıcısı, Azure'daki farklı hizmetler arasındaki kimliği doğrulanmış bağlantıları kolaylaştıran bir araçtır. Azure CLI kullanarak App Service'i bir SQL veritabanına bağlamak için şu anda Hizmet Bağlayıcısı, az webapp connection create sql komutunu desteklemektedir. Bu tek komut sizin için yukarıda belirtilen üç adımı tamamlar.

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

App Service ayarlarında Service Connector tarafından yapılan değişiklikleri doğrulayabilirsiniz.

  1. App Service'inizin Kimlik sayfasına gidin. Sistem tarafından atanan sekmesinin altında, DurumAçık olarak ayarlanmalıdır. Bu değer, uygulamanız için sistem tarafından atanan yönetilen kimliğin etkinleştirildiği anlamına gelir.

  2. App Service'inizin Yapılandırma sayfasına gidin. Bağlantı dizeleri sekmesinde, AZURE_SQL_CONNECTIONSTRING adlı bir bağlantı dizesi görmeniz gerekir. Değeri göstermek için tıklayın metnini seçerek oluşturulan parolasız bağlantı dizesini görüntüleyin. Bu bağlantı dizesi adı, uygulamanızda yapılandırdığınız adla eşleştiğinden, Azure'da çalışırken otomatik olarak bulunur.

Önemli

Bu çözüm başlangıç için basit bir yaklaşım sağlasa da, üretim sınıfı ortamlar için en iyi yöntem değildir. Bu senaryolarda uygulama, tek bir yükseltilmiş kimlik kullanarak tüm işlemleri gerçekleştirmemelidir. Belirli görevler için belirli izinlere sahip birden çok kimlik yapılandırarak en az ayrıcalık ilkesini uygulamaya çalışmanız gerekir.

Aşağıdaki kaynaklarda veritabanı rollerini ve güvenliğini yapılandırma hakkında daha fazla bilgi edinebilirsiniz:

Dağıtılan uygulamayı test edin

  1. Uygulamanızın kök URL'sini başlatmak için App Service'e genel bakış sayfasının üst kısmındaki Gözat düğmesini seçin.

  2. URL'ye /swagger/index.html yolunu ekleyerek yerel olarak kullandığınız aynı Swagger test sayfasını yükleyin.

  3. Uç noktaların beklendiği gibi çalıştığını doğrulamak için test GET ve POST isteklerini yürütebilirsiniz.

    İpucu

    Test sırasında 500 İç Sunucu hatası alırsanız, bunun nedeni veritabanı ağ yapılandırmalarınız olabilir. Mantıksal sunucunuzun Veritabanını yapılandırma bölümünde özetlenen ayarlarla yapılandırıldığını doğrulayın.

Uygulamanız artık hem yerel hem de barındırılan ortamlardaki Azure SQL Veritabanı bağlı.

Kaynakları temizleme

Azure SQL Veritabanı ile çalışmayı bitirdiğinizde, istenmeyen maliyetlerden kaçınmak için kaynağı silin.

  1. Azure portalı arama çubuğunda Azure SQL'i arayın ve eşleşen sonucu seçin.

  2. Veritabanı listesinde veritabanınızı bulun ve seçin.

  3. Azure SQL Veritabanı Genel Bakış sayfasında Sil'i seçin.

  4. Açılan Azure'da silmek istediğinizden emin olun... sayfasında, onaylamak için veritabanınızın adını yazın ve sil'i seçin.