Öğretici: Azure SQL hizmetine erişmek için Windows VM sistem tarafından atanan yönetilen kimlik kullanma
Azure kaynakları için yönetilen kimlikler bir Azure Active Directory özelliğidir. Azure kaynakları için yönetilen kimlikleri destekleyen Azure hizmetlerinin her biri kendi zaman çizelgesine tabidir. Başlamadan önce kaynağınıza yönelik yönetilen kimliklerin kullanılabilirlik durumunu ve bilinen sorunları gözden geçirdiğinizden emin olun.
Bu öğreticide, Windows sanal makinesine (VM) erişmek için sistem tarafından atanan kimliğin nasıl Azure SQL Veritabanı. 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. Aşağıdakileri nasıl yapacağınızı öğrenirsiniz:
- Vm'nize sanal makinenize erişim Azure SQL Veritabanı
- Azure AD kimlik doğrulamasını etkinleştirme
- VM’nin sistem tarafından atanan kimliğini temsil eden veritabanında içerilen kullanıcı oluşturma
- VM kimliğini kullanarak erişim belirteci alın ve bunu kullanarak sanal makineyi Azure SQL Veritabanı
Önkoşullar
- Azure kaynakları için yönetilen kimlikler özelliği hakkında bilgi sahibi değilseniz bu genel bakışı inceleyin.
- Azure hesabınız yoksa, devam etmeden önce ücretsiz bir hesaba kaydolun.
- Gerekli kaynak oluşturma ve rol yönetimini gerçekleştirmek için hesabınız uygun kapsamda (aboneliğiniz veya kaynak grubunuz) "Sahip" izinlerini gerektiriyor. Rol atama ile ilgili yardıma ihtiyacınız varsa, Azure abonelik kaynaklarınıza erişimi yönetmek Için Azure rolleri atamakonusuna bakın.
Etkinleştir
Sistem tarafından atanan yönetilen kimliğin etkinleştirilmesi tek tıklamayla bir deneyimdir. Bunu, VM oluşturma sırasında veya mevcut bir VM 'nin özelliklerinde etkinleştirebilirsiniz.

Yeni bir VM 'de sistem tarafından atanan yönetilen kimliği etkinleştirmek için:
Erişim verme
Vm'nize sanal makinenizin Azure SQL Veritabanı vermek için mevcut bir mantıksal SQL sunucusu kullanabilir veya yeni bir tane oluşturabilirsiniz. Azure portalını kullanarak yeni sunucu ve veritabanı oluşturmak için bu Azure SQL hızlı başlangıcını izleyin. Azure SQL belgeleri arasında Azure CLI'nin ve Azure PowerShell'in kullanıldığı hızlı başlangıçlar da vardır.
VM'nize veritabanı erişimi verme işleminin iki adımı vardır:
- Sunucu için Azure AD kimlik doğrulamasını etkinleştirin.
- VM’nin sistem tarafından atanan kimliğini temsil eden veritabanında bir içerilen kullanıcı oluşturun.
Azure AD kimlik doğrulamasını etkinleştirme
Azure AD kimlik doğrulamasını yapılandırmak için:
- Azure portalında, sol gezintiden SQL sunucuları'nı seçin.
- Azure AD kimlik doğrulaması için etkinleştirilecek SQL sunucusuna tıklayın.
- Dikey pencerenin Ayarlar bölümünde Active Directory yöneticisi'ne tıklayın.
- Komut çubuğunda Yönetici ayarla'ya tıklayın.
- Sunucunun yöneticisi olacak bir Azure AD kullanıcı hesabı seçin ve Seç'e tıklayın.
- Komut çubuğunda Kaydet'e tıklayın.
Contained user oluşturma
Bu bölümde, veritabanında VM'nin sistem tarafından atanan kimliğini temsil eden bir içerdiği kullanıcının nasıl oluşturulacakları gösterir. Bu adım için bir Microsoft SQL Server Management Studio (SSMS) gerekir. Başlamadan önce, Azure Ad tümleştirmesiyle ilgili arka plan bilgileri için aşağıdaki makaleleri gözden geçirmeniz yararlı olabilir:
- SQL Veritabanı ve Azure Synapse Analytics (MFA için SSMS desteği) ile Evrensel Kimlik Doğrulaması
- SQL Veritabanı veya Azure Active Directory kimlik doğrulamasını yapılandırma ve Azure Synapse Analytics
SQL DB benzersiz AAD görünen adları gerektirir. Bu şekilde, yönetilen kimlik için etkinleştirilmiş kullanıcılar, gruplar ve Hizmet Sorumluları (uygulamalar) ve VM adları gibi AAD hesapları, görünen adlarıyla ilgili olarak AAD'de benzersiz bir şekilde tanımlanmalıdır. SQL Veritabanı, bu tür kullanıcıların T-SQL oluşturma işlemi sırasında AAD görünen adını denetler ve benzersiz olmayan bir hesap için benzersiz bir AAD görünen adı sağlama isteğinde başarısız olur.
Bir içerdiği kullanıcı oluşturmak için:
SQL Server Management Studio’yu başlatın.
Sunucuya Bağlan iletişim kutusunda Sunucu adı alanına sunucu adını girin.
Kimlik Doğrulaması alanında, Active Directory - MFA ile Evrensel desteği'ni seçin.
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)
Seçenekler’e tıklayın.
Veritabanına bağlan alanında, yapılandırmak istediğiniz sistem dışı veritabanının adını girin.
Bağlan'a tıklayın. Oturum açma işlemini tamamlayın.
Nesne Gezgini'nde Veritabanları klasörünü genişletin.
Kullanıcı veritabanına sağ tıklayın ve Yeni sorgu'ya tıklayın.
Sorgu penceresinde, aşağıdaki satırı girin ve araç çubuğunda Yürüt'e tıklayın:
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.CREATE USER [VMName] FROM EXTERNAL PROVIDERKomutun başarıyla tamamlanması ve VM’nin sistem tarafından atanan kimliği için içerilen kullanıcıyı oluşturması gerekir.
Sorgu penceresini temizleyin, aşağıdaki satırı girin ve araç çubuğunda Yürüt'e tıklayın:
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.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.
VM'de çalışan kod artık sistem tarafından atanan yönetilen kimliğini kullanarak bir belirteç alır ve belirteci kullanarak sunucuda kimlik doğrulaması yapmak için bu belirteci kullanabilir.
Verilere erişme
Bu bölümde, VM'nin sistem tarafından atanan yönetilen kimliğini kullanarak erişim belirteci nasıl alın ve azure sanal makinesine çağrı yapmak için 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. SQL bağlantısı oluştururken erişim belirteci yöntemini kullanırsınız. 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.
Burada, erişim belirteci kullanarak bir ağ bağlantısı SQL .NET kod örneği ve ardından 3. Vm'nin sistem tarafından atanan yönetilen kimliğinin uç noktasına erişe için kodun VM'de çalışması gerekir. .NET Framework belirteci yöntemini kullanmak için 4.6 veya daha yüksek bir veya .NET Core 2.2 veya daha yüksek bir değer gereklidir. AZURE-SQL-SERVERNAME ve DATABASE değerlerini uygun şekilde değiştirin. Azure SQL için kaynak kimliğini not https://database.windows.net/ edin.
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 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();
}
Not
YÖNETILEN kimlikleri kullanırken, DIĞER programlama seçenekleriyle çalışırken, BIZIM SDK'lerimizi kullanabilirsiniz.
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.
Portalda, Sanal Makineler'e ve Windows sanal makinenize gidin, ardından Genel Bakış'ta Bağlan'a tıklayın.
Sanal makinenizi oluşturulduğunda ekley adınıza ve Parolanıza Windows girin.
Sanal makineyle bir Uzak Masaüstü Bağlantısı oluşturduğunuza göre, uzak oturumda PowerShell'i açın.
PowerShell’in
Invoke-WebRequestkomutunu kullanarak, yerel yönetilen kimliğin uç noktasına Azure SQL için erişim belirteci alma isteğinde bulunun.$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.
$content = $response.Content | ConvertFrom-JsonYanıttan erişim belirtecini ayıklayın.
$AccessToken = $content.access_tokenSunucuya bir bağlantı açın. AZURE-SQL-SERVERNAME ve DATABASE değerlerini değiştirmeyi unutmayın.
$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. TABLE değerini değiştirmeyi unutmayın.
$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.
Devre Dışı Bırak
SANAL makinenizde sistem tarafından atanan kimliği devre dışı bırakmak için, sistem tarafından atanan kimliğin durumunu kapalı olarak ayarlayın.

Sonraki adımlar
Bu öğreticide, sistem tarafından atanan yönetilen kimliği kullanarak bu kimliklere erişmeyi Azure SQL Veritabanı. Daha fazla bilgi edinmek için Azure SQL Veritabanı bakın: