Öğretici: Azure SQL'e erişmek için bir Windows VM sistem tarafından atanan yönetilen kimliği kullanmaTutorial: Use a Windows VM system-assigned managed identity to access Azure SQL

Azure kaynakları için yönetilen kimlikler bir Azure Active Directory özelliğidir.Managed identities for Azure resources is a feature of Azure Active Directory. Azure kaynakları için yönetilen kimlikleri destekleyen Azure hizmetlerinin her biri kendi zaman çizelgesine tabidir.Each of the Azure services that support managed identities for Azure resources are subject to their own timeline. Başlamadan önce kaynağınıza yönelik yönetilen kimliklerin kullanılabilirlik durumunu ve bilinen sorunları gözden geçirdiğinizden emin olun.Make sure you review the availability status of managed identities for your resource and known issues before you begin.

Bu öğreticide, Azure SQL Server'a erişmek amacıyla, Windows sanal makinesi (VM) için sistem tarafından atanmış bir kimliği nasıl kullanacağınız gösterilmektedir.This tutorial shows you how to use a system-assigned identity for a Windows virtual machine (VM) to access an Azure SQL server. Yönetilen Hizmet Kimlikleri Azure tarafından otomatik olarak yönetilir kodunuza kimlik bilgileri girmenize gerek kalmadan Azure AD kimlik doğrulamasını destekleyen hizmetlerde kimlik doğrulaması yapmanıza olanak tanır.Managed Service Identities are automatically managed by Azure and enable you to authenticate to services that support Azure AD authentication, without needing to insert credentials into your code. Aşağıdakileri nasıl yapacağınızı öğrenirsiniz:You learn how to:

  • VM'nize Azure SQL sunucusu için erişim vermeGrant your VM access to an Azure SQL server
  • SQL sunucusu için Azure AD kimlik doğrulamasını etkinleştirmeEnable Azure AD authentication for the SQL server
  • VM’nin sistem tarafından atanan kimliğini temsil eden veritabanında içerilen kullanıcı oluşturmaCreate a contained user in the database that represents the VM's system assigned identity
  • VM kimliğini kullanarak erişim belirteci alma ve Azure SQL sunucusunu sorgulamak için bunu kullanmaGet an access token using the VM identity and use it to query an Azure SQL server

ÖnkoşullarPrerequisites

VM'nize Azure SQL sunucusundaki bir veritabanı için erişim vermeGrant your VM access to a database in an Azure SQL server

VM’nize Azure SQL Server’daki bir veritabanına erişim vermek için var olan SQL sunucusunu kullanabilir veya yeni bir sunucu oluşturabilirsiniz.To grant your VM access to a database in an Azure SQL Server, you can use an existing SQL server or create a new one. Azure portalını kullanarak yeni sunucu ve veritabanı oluşturmak için bu Azure SQL hızlı başlangıcını izleyin.To create a new server and database using the Azure portal, follow this Azure SQL quickstart. Azure SQL belgeleri arasında Azure CLI'nin ve Azure PowerShell'in kullanıldığı hızlı başlangıçlar da vardır.There are also quickstarts that use the Azure CLI and Azure PowerShell in the Azure SQL documentation.

VM'nize veritabanı erişimi verme işleminin iki adımı vardır:There are two steps to granting your VM access to a database:

  1. SQL sunucusu için Azure AD kimlik doğrulamasını etkinleştirme.Enable Azure AD authentication for the SQL server.
  2. VM’nin sistem tarafından atanan kimliğini temsil eden veritabanında bir içerilen kullanıcı oluşturun.Create a contained user in the database that represents the VM's system-assigned identity.

SQL sunucusu için Azure AD kimlik doğrulamasını etkinleştirmeEnable Azure AD authentication for the SQL server

Aşağıdaki adımları kullanarak SQL sunucusu için Azure AD kimlik doğrulamasını yapılandırın:Configure Azure AD authentication for the SQL server using the following steps:

  1. Azure portalında, sol gezintiden SQL sunucuları'nı seçin.In the Azure portal, select SQL servers from the left-hand navigation.
  2. Azure AD kimlik doğrulaması için etkinleştirilecek SQL sunucusuna tıklayın.Click the SQL server to be enabled for Azure AD authentication.
  3. Dikey pencerenin Ayarlar bölümünde Active Directory yöneticisi'ne tıklayın.In the Settings section of the blade, click Active Directory admin.
  4. Komut çubuğunda Yönetici ayarla'ya tıklayın.In the command bar, click Set admin.
  5. Sunucunun yöneticisi olacak bir Azure AD kullanıcı hesabı seçin ve Seç'e tıklayın.Select an Azure AD user account to be made an administrator of the server, and click Select.
  6. Komut çubuğunda Kaydet'e tıklayın.In the command bar, click Save.

VM’nin sistem tarafından atanan kimliğini temsil eden veritabanında içerilen kullanıcı oluşturmaCreate a contained user in the database that represents the VM's system assigned identity

Bu sonraki adım için, Microsoft SQL Server Management Studio'ya (SSMS) ihtiyacınız vardır.For this next step, you will need Microsoft SQL Server Management Studio (SSMS). Başlamadan önce, Azure Ad tümleştirmesiyle ilgili arka plan bilgileri için aşağıdaki makaleleri gözden geçirmeniz yararlı olabilir:Before beginning, it may also be helpful to review the following articles for background on Azure AD integration:

SQL DB benzersiz AAD görünen adları gerektirir.SQL DB requires unique AAD display names. Bu, kullanıcılara, gruplara veya hizmet sorumlularını (uygulamalar) gibi AAD hesaplarının ve yönetilen kimlik için etkin bir sanal makine adı benzersiz olarak AAD'de görünen adları tanımlanmalıdır.With this, the AAD accounts such as users, groups and Service Principals (applications) and VM names enabled for managed identity must be uniquely defined in AAD regarding their display names. SQL DB denetler: Bu kullanıcılar T-SQL oluşturma sırasında AAD görünen adı ve benzersiz değilse, belirtilen hesap için benzersiz bir AAD görünen ad sağlamak isteyen komutu başarısız olur.SQL DB checks the AAD display name during T-SQL creation of such users and if it is not unique, the command fails requesting to provide a unique AAD display name for a given account.

  1. SQL Server Management Studio’yu başlatın.Start SQL Server Management Studio.

  2. Sunucuya Bağlan iletişim kutusunda, Sunucu adı alanına SQL sunucu adınızı girin.In the Connect to Server dialog, Enter your SQL server name in the Server name field.

  3. Kimlik Doğrulaması alanında, Active Directory - MFA ile Evrensel desteği'ni seçin.In the Authentication field, select Active Directory - Universal with MFA support.

  4. Kullanıcı adı alanında, sunucu yöneticisi olarak ayarladığınız Azure AD hesabının adını girin (örneğin, helen@woodgroveonline.com)In the User name field, enter the name of the Azure AD account that you set as the server administrator, for example, helen@woodgroveonline.com

  5. Seçenekler’e tıklayın.Click Options.

  6. Veritabanına bağlan alanında, yapılandırmak istediğiniz sistem dışı veritabanının adını girin.In the Connect to database field, enter the name of the non-system database you want to configure.

  7. Bağlan'a tıklayın.Click Connect. Oturum açma işlemini tamamlayın.Complete the sign-in process.

  8. Nesne Gezgini'nde Veritabanları klasörünü genişletin.In the Object Explorer, expand the Databases folder.

  9. Kullanıcı veritabanına sağ tıklayın ve Yeni sorgu'ya tıklayın.Right-click on a user database and click New query.

  10. Sorgu penceresinde, aşağıdaki satırı girin ve araç çubuğunda Yürüt'e tıklayın:In the query window, enter the following line, and click Execute in the toolbar:

    Not

    Aşağıdaki komutta yer alan VMName, önkoşullar bölümünde sistem tarafından atanan kimliği etkinleştirdiğiniz VM’nin adıdır.VMName in the following command is the name of the VM that you enabled system assigned identity on in the prerequsites section.

    CREATE USER [VMName] FROM EXTERNAL PROVIDER
    

    Komutun başarıyla tamamlanması ve VM’nin sistem tarafından atanan kimliği için içerilen kullanıcıyı oluşturması gerekir.The command should complete successfully, creating the contained user for the VM's system-assigned identity.

  11. Sorgu penceresini temizleyin, aşağıdaki satırı girin ve araç çubuğunda Yürüt'e tıklayın:Clear the query window, enter the following line, and click Execute in the toolbar:

    Not

    Aşağıdaki komutta yer alan VMName, önkoşullar bölümünde sistem tarafından atanan kimliği etkinleştirdiğiniz VM’nin adıdır.VMName in the following command is the name of the VM that you enabled system assigned identity on in the prerequsites section.

    ALTER ROLE db_datareader ADD MEMBER [VMName]
    

    Komutun başarıyla tamamlanması ve içerilen kullanıcıya veritabanının tamamını okuma erişimi vermesi gerekir.The command should complete successfully, granting the contained user the ability to read the entire database.

VM'de çalıştırılan kod şimdi sistem tarafından atanan yönetilen kimliğinden belirteç alabilir ve belirteci kullanarak SQL Server'da kimlik doğrulaması yapabilir.Code running in the VM can now get a token using its system-assigned managed identity and use the token to authenticate to the SQL server.

VM’nin sistem tarafından atanan yönetilen kimliğini kullanarak erişim belirteci alma ve Azure SQL çağrısı yapmak için bunu kullanmaGet an access token using the VM's system-assigned managed identity and use it to call Azure SQL

Azure SQL, Azure AD kimlik doğrulamasını yerel olarak desteklediğinden Azure kaynakları için yönetilen kimlikler kullanılarak alınan erişim belirteçlerini doğrudan kabul eder.Azure SQL natively supports Azure AD authentication, so it can directly accept access tokens obtained using managed identities for Azure resources. SQL bağlantısı oluştururken erişim belirteci yöntemini kullanırsınız.You use the access token method of creating a connection to SQL. Bu, Azure SQL’in Azure AD tümleştirmesi kapsamındadır ve bağlantı dizesinde kimlik bilgileri sağlama işleminden farklıdır.This is part of Azure SQL's integration with Azure AD, and is different from supplying credentials on the connection string.

Erişim belirteci kullanarak SQL bağlantı açma bir .NET kod örneği aşağıda verilmiştir.Here's a .NET code example of opening a connection to SQL using an access token. Bu kodun, VM’nin sistem tarafından atanan yönetilen kimliğinin uç noktasına erişebilmesi için VM üzerinde çalıştırılması gerekir.This code must run on the VM to be able to access the VM's system-assigned managed identity's endpoint. .NET framework 4.6 ya da daha yüksek erişim belirteci yöntemini kullanmak için gereklidir..NET Framework 4.6 or higher is required to use the access token method. AZURE-SQL-SERVERNAME ve DATABASE değerlerini uygun şekilde değiştirin.Replace the values of AZURE-SQL-SERVERNAME and DATABASE accordingly. Azure SQL için kaynak Kimliğini Not https://database.windows.net/.Note the resource ID for Azure SQL is https://database.windows.net/.

using System.Net;
using System.IO;
using System.Data.SqlClient;
using System.Web.Script.Serialization;

//
// Get an access token for SQL.
//
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://database.windows.net/");
request.Headers["Metadata"] = "true";
request.Method = "GET";
string accessToken = null;

try
{
    // Call managed identities for Azure resources endpoint.
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();

    // Pipe response Stream to a StreamReader and extract access token.
    StreamReader streamResponse = new StreamReader(response.GetResponseStream());
    string stringResponse = streamResponse.ReadToEnd();
    JavaScriptSerializer j = new JavaScriptSerializer();
    Dictionary<string, string> list = (Dictionary<string, string>) j.Deserialize(stringResponse, typeof(Dictionary<string, string>));
    accessToken = list["access_token"];
}
catch (Exception e)
{
    string errorText = String.Format("{0} \n\n{1}", e.Message, e.InnerException != null ? e.InnerException.Message : "Acquire token failed");
}

//
// Open a connection to the SQL server using the access token.
//
if (accessToken != null) {
    string connectionString = "Data Source=<AZURE-SQL-SERVERNAME>; Initial Catalog=<DATABASE>;";
    SqlConnection conn = new SqlConnection(connectionString);
    conn.AccessToken = accessToken;
    conn.Open();
}

Alternatif olarak, uygulama yazmak ve VM'de dağıtmak zorunda kalmadan uçtan uca kurulumu test etmenin hızlı bir yöntemi PowerShell kullanmaktır.Alternatively, a quick way to test the end to end setup without having to write and deploy an app on the VM is using PowerShell.

  1. Portalda, Sanal Makineler'e ve Windows sanal makinenize gidin, ardından Genel Bakış'ta Bağlan'a tıklayın.In the portal, navigate to Virtual Machines and go to your Windows virtual machine and in the Overview, click Connect.

  2. Windows VM'sini oluştururken eklendiğiniz hesabın Kullanıcı adı ve Parola değerlerini girin.Enter in your Username and Password for which you added when you created the Windows VM.

  3. Artık sanal makineyle Uzak Masaüstü Bağlantısı'nı oluşturduğunuza göre, uzak oturumda PowerShell'i açın.Now that you have created a Remote Desktop Connection with the virtual machine, open PowerShell in the remote session.

  4. PowerShell’in Invoke-WebRequest komutunu kullanarak, yerel yönetilen kimliğin uç noktasına Azure SQL için erişim belirteci alma isteğinde bulunun.Using PowerShell’s Invoke-WebRequest, make a request to the local managed identity's endpoint to get an access token for Azure SQL.

        $response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fdatabase.windows.net%2F' -Method GET -Headers @{Metadata="true"}
    

    Yanıtı JSON nesnesinden PowerShell nesnesine dönüştürün.Convert the response from a JSON object to a PowerShell object.

    $content = $response.Content | ConvertFrom-Json
    

    Yanıttan erişim belirtecini ayıklayın.Extract the access token from the response.

    $AccessToken = $content.access_token
    
  5. SQL Server'a bir bağlantı açın.Open a connection to the SQL server. AZURE-SQL-SERVERNAME ve DATABASE değerlerini değiştirmeyi unutmayın.Remember to replace the values for AZURE-SQL-SERVERNAME and DATABASE.

    $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
    $SqlConnection.ConnectionString = "Data Source = <AZURE-SQL-SERVERNAME>; Initial Catalog = <DATABASE>"
    $SqlConnection.AccessToken = $AccessToken
    $SqlConnection.Open()
    

    Ardından bir sorgu oluşturup sunucuya gönderin.Next, create and send a query to the server. TABLE değerini değiştirmeyi unutmayın.Remember to replace the value for TABLE.

    $SqlCmd = New-Object System.Data.SqlClient.SqlCommand
    $SqlCmd.CommandText = "SELECT * from <TABLE>;"
    $SqlCmd.Connection = $SqlConnection
    $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
    $SqlAdapter.SelectCommand = $SqlCmd
    $DataSet = New-Object System.Data.DataSet
    $SqlAdapter.Fill($DataSet)
    

Sorgunun sonuçlarını görüntülemek için $DataSet.Tables[0] değerini inceleyin.Examine the value of $DataSet.Tables[0] to view the results of the query.

Sonraki adımlarNext steps

Bu öğreticide, Azure SQL Server'a erişmek için sistem tarafından atanan yönetilen kimlik kullanmayı öğrendiniz.In this tutorial, you learned how to use a system-assigned managed identity to access Azure SQL server. Azure SQL Server hakkında daha fazla bilgi için bkz:To learn more about Azure SQL Server see: