Şunlar için geçerlidir:
SQL Server 2022 (16.x)
Bu makalede, Azure portalını kullanarak SQL Server için Microsoft Entra Kimliği (eski adı Azure Active Directory) ile kimlik doğrulamasına izin vermek üzere Microsoft Entra yöneticisini ayarlama ve aşağıdakiler gibi API'leri ele alacağız:
- PowerShell (PowerShell Uygulaması
- Azure Komut Satırı Arayüzü (CLI)
- ARM Şablonu
Ayrıca Azure portalında otomatik sertifika oluşturmaya ve uygulama kaydına olanak tanıyacak SQL Server için Microsoft Entra yöneticisi ayarlamaya yönelik güncelleştirilmiş işlevselliği de ele alacağız. Daha önce , SQL Server için Microsoft Entra kimlik doğrulamasını ayarlamak için Microsoft Entra yöneticisinin Azure sertifikası ve uygulama kaydıyla el ile ayarlanması gerekiyordu.
Uyarı
Microsoft Entra ID, Azure Active Directory'nin (Azure AD) yeni adı olmasına rağmen, mevcut ortamların bozulmasını önlemek için Azure AD, UI alanları, bağlantı sağlayıcıları, hata kodları ve cmdletler gibi bazı sabit kodlu öğelerde hâlâ varlığını sürdürüyor. Bu makalede, iki ad birbirinin yerine kullanılabilir.
Önkoşullar
Microsoft Entra yöneticisini ayarlamadan önce hazırlık
SQL Server – Azure Arc ve Key vault kaynaklarında Microsoft Entra yöneticisini ayarlamak için aşağıdaki izinler gereklidir.
SQL Server'ınızın Azure Arc'a bağlı olduğundan emin olmak için kılavuzu izleyin. SQL Server – Azure Arc kaynağı için Microsoft Entra yöneticisini ayaran kullanıcı, sunucu için Katkıda Bulunan rolüne sahip olmalıdır.
-
Azure portal'a gidin
-
SQL Server – Azure Arc'ı seçin ve SQL Server konağınızın örneğini seçin.
-
Erişim denetimi (IAM) öğesini seçin.
- Microsoft Entra yöneticisini ayarlayan kullanıcıya Katkıda Bulunan rolünü eklemek için > seçeneğini ve ardından Rol ataması ekle'yi seçin.
Henüz bir Azure Key Vault'unuz yoksa oluşturun. Microsoft Entra yöneticisini ayaran kullanıcı, Azure Key Vault'unuz için Katkıda Bulunan rolüne sahip olmalıdır. Azure Key Vault'ta bir kullanıcıya rol eklemek için:
-
Azure portal'a gidin
-
Anahtar kasası öğesine gidin.
-
Erişim denetimini (IAM) seçin.
- Microsoft Entra yöneticisini ayarlayan kullanıcıya Katkıda Bulunan rolünü eklemek için > seçeneğini ve ardından Rol ataması ekle'yi seçin.
SQL Server konağı için erişim ilkelerini ayarlama
Azure portalında Azure Key Vault örneğinize gidin ve Erişim ilkeleri'ni seçin.
Erişim İlkesi Ekle'yi seçin.
Anahtar izinleri için İmzala'yı kullanın.
Gizli izinler içinAl ve Listele'yi seçin.
Sertifika izinleri içinAl ve Listele'yi seçin.
sonrakiseçin.
Asıl sayfada, SQL Server konağı ana bilgisayarının ana bilgisayar adı olan Machine - Azure Arc örneğinizin adını arayın.
uygulama (isteğe bağlı) sayfasını iki kez İleri'yi veya Gözden geçir ve oluştur'u seçerek atlayın.
Principal'ın "Nesne Kimliği"nin, örneğe atanan yönetilen kimliğin Temsilci Kimliği ile eşleşip eşleşmediğini doğrulayın.
Onaylamak için kaynak sayfasına gidin ve Genel Bakış sayfasındaki Temel Bileşenler kutusunun sağ üst kısmındaki JSON Görünümü'nü seçin.
Kimliğin altında principalId değerini bulursunuz.
Oluştur'i seçin.
İzinlerin uygulandığından emin olmak için Oluştur'u seçmeniz gerekir. İzinlerin depolandığından emin olmak için tarayıcı penceresini yenileyin ve Azure Arc örneğinizin satırının hala mevcut olup olmadığını denetleyin.
Microsoft Entra kullanıcıları için erişim ilkeleri ayarlama
- Azure portalında Azure Key Vault örneğinize gidin ve Erişim ilkeleri'ni seçin.
-
Erişim İlkesi Ekle'yi seçin.
-
Anahtar izinleri için Al, Listele ve Oluştur'u seçin.
-
Gizli dizi izinleri için Al, Listele ve Ayarla'yı seçin.
-
Sertifika izinleri için Al, Listele ve Oluştur'u seçin.
-
Sorumlu seçin için SQL Server'a bağlanmak için kullanmak istediğiniz Microsoft Entra kullanıcısını ekleyin.
-
Ekle'yi ve ardından Kaydet'i seçin.
SQL Server için Microsoft Entra yöneticisini ayarlama
Yeni API'ler ve portal işlevselliği, kullanıcıların ayrı bir Azure sertifikası ve Microsoft Entra uygulaması oluşturmak zorunda kalmadan SQL Server için Bir Microsoft Entra yöneticisi ayarlamasına olanak tanır. Otomatik sertifika ve uygulama oluşturma ile Azure Arc'a bağlı SQL Server'ınız için Microsoft Entra yöneticisi ayarlamayı öğrenmek için bir sekme seçin.
Bir Microsoft Entra yöneticisi ayarlamak, aynı işlemde bir Azure Key Vault sertifikası ve Microsoft Entra uygulaması oluşturmak için Azure portalını kullanın. Bu, SQL Server ile Microsoft Entra kimlik doğrulamasını kullanmak için gereklidir.
Azure portalını kullanarak Microsoft Entra yöneticisini ayarlama
Azure portalına gidin ve SQL Server – Azure Arc'ı seçin. SQL Server konağınızın örneğini seçin.
ÖZELLIKLER menüsüne giderek SQL Server - Azure Arc kaynağınızın durumunu denetleyin ve bağlı olup olmadığını denetleyin. Daha fazla bilgi için bkz. Arc özellikli SQL Server kaynaklarınızı doğrulama.
Kaynak menüsünden Ayarlar'ın altında Microsoft Entra Id ve Purview'u seçin.
YöneticiYi Ayarla'yı seçerek Microsoft Entra Id bölmesini açın ve SQL Server'da yönetici oturum açma adı olarak eklenecek hesabı seçin.
Hizmet tarafından yönetilen sertifika'ya tıklayın.
"Anahtar Kasanızı Değiştir"i seçin ve mevcut Azure Key Vault kaynağınızı seçin.
Hizmet tarafından yönetilen uygulama kaydı'nı seçin.
Kaydetseçeneğini seçin. Bu, Arc sunucusu aracısına bir istek gönderir ve bu da söz konusu SQL Server örneği için Microsoft Entra kimlik doğrulamasını yapılandırıyor. İşlemin tamamlanması birkaç dakika sürebilir; Microsoft Entra oturum açmayı denemeden önce kaydetme işlemi onaylanana Saved successfully kadar bekleyin.
Hizmet tarafından yönetilen uygulama kaydı sizin için aşağıdakileri yapar:
- Şeklinde
<hostname>-<instanceName><uniqueNumber> bir adla anahtar kasanızda bir sertifika oluşturur.
- gibi
<hostname>-<instanceName><uniqueNumber>bir ada sahip bir Microsoft Entra uygulaması oluşturur ve bu uygulamaya gerekli izinleri atar. Daha fazla bilgi için Uygulama izinleri verme konusuna bakın.
- Azure Key Vault'taki yeni sertifikayı uygulamaya atar.
- Bu ayarları Azure Arc'a kaydeder.
Aşağıdaki Azure CLI betiği bir Microsoft Entra yöneticisi ayarlar, bir Azure Key Vault sertifikası oluşturur ve bir Microsoft Entra uygulaması oluşturur. Bir sertifika ve uygulama zaten mevcut olduğunda Microsoft Entra yöneticisini ayarlamak için örnek betik sağlayan ek bir bölüm vardır.
Uyarı
Microsoft Entra kurulumu için oluşturulan sertifikalar otomatik olarak döndürülmez.
-
Azure CLI sürüm 2.37.0 veya üzeri gereklidir
- Az.ConnectedMachine 0.5.1 veya üzeri gereklidir
Az.ConnectedMachine modülü yüklemek için az extension add --name ConnectedMachine kullanın. Azure CLI'nın hangi sürümünün yüklü olduğunu denetlemek için kullanın az version.
Azure CLI betiği için aşağıdaki giriş parametreleri kullanılır:
-
<applicationName> - Oluşturulacak uygulama adı
-
<certSubjectName> - Oluşturulacak sertifika adı
-
<keyVaultName> - Anahtar kasasının adı. Betik çalıştırılmadan önce bu anahtar kasası oluşturulmalıdır
-
<machineName> - SQL Server konağınızın makine adı
-
<resourceGroupName> - SQL Server – Azure Arc örneğini içeren kaynak grubunun adı
-
<adminAccountName> - SQL Server'ınız için ayarlamak istediğiniz Microsoft Entra yönetici hesabı
-
<instanceName> - SQL Server adlandırılmış örnekleri için isteğe bağlı parametre. Adlandırılmış bir örneğiniz varsa bu parametreyi kullanın. Belirtilmezse, varsayılan adı MSSQLSERVER kullanılır
-
<tenantId> - Kiracı kimliği için isteğe bağlı parametre. Kiracı kimliği , Azure portalına gidip Microsoft Entra Id kaynağınıza giderek bulunabilir.
Genel Bakış bölmesinde Kiracı Kimliğinizi görmeniz gerekir. Atlanırsa, varsayılan kiracı kimliği parametre olarak kullanılır
-
<subscriptionId> - Abonelik kimliği için isteğe bağlı parametre. Abonelik kimliğiniz Azure portalında bulunabilir. Atlanırsa, varsayılan abonelik kimliği kullanılır
Aşağıdaki Azure CLI betiğini kullanmak için betiği dosya olarak .ps1 kaydedin ve aşağıdaki komutu çalıştırın:
./aadAzCliSetup.ps1 -applicationName "<applicationName>" -certSubjectName "<certSubjectName>" -keyVaultName "<keyVaultName>" -machineName "<machineName>" -resourceGroupName "<resourceGroupName>" -adminAccountName "<adminAccountName>" -instanceName "<instanceName>" -tenantId "<tenantId>" -subscriptionId "<subscriptionId>"
Azure CLI betiği
Uyarı
Linux konak makinelerinde SQL Server için, betikte WindowsAgent.SqlServer'yi LinuxAgent.SqlServer ile değiştirin.
# AZ CLI and AZ CLI's connected machine extension must be installed before running this script
param (
[Parameter(mandatory=$true)] $applicationName,
[Parameter(mandatory=$true)] $certSubjectName,
[Parameter(mandatory=$true)] $keyVaultName,
[Parameter(mandatory=$true)] $machineName,
[Parameter(mandatory=$true)] $resourceGroupName,
[Parameter(mandatory=$true)] $adminAccountName,
$instanceName,
$tenantId,
$subscriptionId
)
# Constants
#
$NUMRETRIES = 60
# Helper functions
#
function ConvertFrom-StringArray {
param (
[string[]] $stringArray
)
if (!$stringArray)
{
return $null
}
else
{
return ConvertFrom-JSON ($stringArray -join "`n")
}
}
# Check parameters
#
if ([string]::IsNullOrEmpty($instanceName))
{
Write-Host "Warning: SQL Instance name (-instanceName) not provided. Default of MSSQLSERVER will be used"
$instanceName = "MSSQLSERVER"
}
$tenantIdArgument = ""
if ([string]::IsNullOrEmpty($tenantId))
{
Write-Host "Warning: Tenant ID (-tenantId) not supplied to the script, so default tenant is being used"
}
else
{
$tenantIdArgument = "-TenantId '" + $tenantId + "'"
}
$subscriptionIdArgument = ""
if ([string]::IsNullOrEmpty($subscriptionId))
{
Write-Host "Warning: Subscription ID (-subscriptionId) not supplied to the script, so default subscription is being used"
}
else
{
$subscriptionIdArgument = "-SubscriptionId '" + $subscriptionId + "'"
}
# Login and select subscription
#
$login = az login --tenant $tenantId --use-device-code
if (!$login)
{
Write-Error "Login to Azure AD failed. Exiting."
exit 1
}
if ($subscriptionId)
{
az account set -s $subscriptionId
}
$accountInfo = ConvertFrom-StringArray (az account show)
if (!$accountInfo)
{
Write-Error "Cannot query logged in Azure AD account. Check that 'az login' and 'az account set' succeeded"
exit 1
}
if ($subscriptionId)
{
if ($subscriptionId.ToLower() -ne $accountInfo.id.ToLower())
{
Write-Error "Could not select the desired subscription"
exit 1
}
}
else
{
$subscriptionId = $accountInfo.id
}
# Check AKV path exists
#
$keyVault = ConvertFrom-StringArray (az keyvault show --name $keyVaultName)
if (!$keyVault)
{
Write-Error "Azure key vault '$keyVaultName' does not exist"
exit 1
}
# Check certificate doesn't exist
#
$cert = ConvertFrom-StringArray (az keyvault certificate show --name $certSubjectName --vault-name $keyVaultName 2>$null)
if ($cert)
{
Write-Error "Certificate '$certSubjectName' already exists in key vault '$keyVaultName'"
exit 1
}
# Check app registration doesn't exist
#
$applications = ConvertFrom-StringArray (az ad app list --display-name $applicationName --only-show-errors)
if ($applications.length -gt 0)
{
Write-Error "App registration with name '$applicationName' already exists"
exit 1
}
# Check Arc SQL instance is valid
#
$extension = ConvertFrom-StringArray (az connectedmachine extension show --machine-name $machineName --name "WindowsAgent.SqlServer" --resource-group $resourceGroupName)
if (!$extension)
{
Write-Error "SQL Server Arc Server not found for machine '$machineName' in resource group '$resourceGroupName'"
exit 1
}
$arcServicePrincipals = ConvertFrom-StringArray(az ad sp list --display-name $machineName --only-show-errors)
if (!$arcServicePrincipals -or $arcServicePrincipals.length -eq 0)
{
Write-Error "Could not find a service principal account with the name '$machineName'"
exit 1
}
else
{
$principalFound = $false
for ($i = 0; $i -lt $arcServicePrincipals.length; $i++)
{
if ($arcServicePrincipals[$i].displayName.toLower() -eq $machineName.toLower()) {
if ($principalFound) {
Write-Error "Could not find exactly one service principal account with the name '$machineName'"
exit 1
}
$arcServicePrincipal = $arcServicePrincipals[$i]
$principalFound = $true
}
}
if (!$principalFound) {
Write-Error "Could not find a service principal account with the name '$machineName'"
exit 1
}
}
# Check if admin account exists
#
$adminAccount = ConvertFrom-StringArray (az ad user show --id $adminAccountName --only-show-errors 2>$null)
$adminAccountType = 0
if (!$adminAccount)
{
$adminAccounts = ConvertFrom-StringArray (az ad user list --filter "mail eq '$adminAccountName'" --only-show-errors 2>$null)
if ($adminAccounts -and $adminAccounts.length -gt 0)
{
if ($adminAccounts.length -eq 1)
{
$adminAccount = $adminAccounts[0]
}
else
{
Write-Error "Multiple Azure AD accounts found with identifier '$adminAccountName'"
exit 1
}
}
else
{
$adminAccount = ConvertFrom-StringArray (az ad group show --group $adminAccountName --only-show-errors 2>$null)
if (!$adminAccount)
{
$adminAccounts = ConvertFrom-StringArray (az ad app list --display-name $adminAccountName --only-show-errors 2>$null)
if ($adminAccounts -and $adminAccounts.length -gt 0)
{
if ($adminAccounts.length -eq 1)
{
$adminAccount = $adminAccounts[0]
}
else
{
Write-Error "Multiple Azure AD applications found with identifier '$adminAccountName'"
exit 1
}
}
else
{
Write-Error "Admin account not found"
exit 1
}
}
else
{
$adminAccountType = 1
}
}
}
if ($adminAccount)
{
$adminAccountSid = $adminAccount.id
}
else
{
Write-Error "Admin account not found"
exit 1
}
# Create certificate in AKV
#
$keyVaultPolicy = ConvertFrom-StringArray (az keyvault certificate get-default-policy)
if (!$keyVaultPolicy)
{
Write-Error "Could not get default key vault policy"
exit 1
}
$keyVaultPolicy.x509CertificateProperties.subject = "CN=" + $certSubjectName
$policyString = (ConvertTo-JSON -Depth 8 $keyVaultPolicy).replace("`r`n", "")
$escapedPolicyString = $policyString.replace("`"", "\`"")
$cert = ConvertFrom-StringArray (az keyvault certificate create --vault-name $keyVaultName --name $certSubjectName --policy $escapedPolicyString)
if (!$cert)
{
Write-Error "Failed to create certificate '$certSubjectName'"
exit 1
}
# Wait until cert is created?
#
$cert = ConvertFrom-StringArray (az keyvault certificate show --vault-name $keyVaultName --name $certSubjectName)
for (($i = 0); $i -lt $NUMRETRIES -and (!$cert -or !$cert.attributes.enabled); $i++)
{
$cert = ConvertFrom-StringArray (az keyvault certificate show --vault-name $keyVaultName --name $certSubjectName)
if (!$cert -or !$cert.attributes.enabled)
{
Start-Sleep -Seconds 5
}
}
# Allow Arc to access AKV
#
$newPerms = ConvertFrom-StringArray (az keyvault set-policy --name $keyVaultName --secret-permissions get list --certificate-permissions get list --object-id $arcServicePrincipal.id)
if (!$newPerms)
{
Write-Host "Warning: Unable to add permissions to key vault '$keyVaultName' for Arc's service principal's identity '$($arcServicePrincipal.id)'. Arc may not be able to configure Azure AD authentication"
}
# Create an Azure AD application
#
$application = ConvertFrom-StringArray (az ad app create --display-name $applicationName --only-show-errors)
if (!$application)
{
Write-Error "Unable to create the app registration '$applicationName'"
exit 1
}
# Set perms on app registration
#
az ad app permission add --id $application.id --api 00000003-0000-0000-c000-000000000000 --api-permissions c79f8feb-a9db-4090-85f9-90d820caa0eb=Scope --only-show-errors # Delegated Application.Read.All
az ad app permission add --id $application.id --api 00000003-0000-0000-c000-000000000000 --api-permissions 0e263e50-5827-48a4-b97c-d940288653c7=Scope --only-show-errors # Delegated Directory.AccessAsUser.All
az ad app permission add --id $application.id --api 00000003-0000-0000-c000-000000000000 --api-permissions 7ab1d382-f21e-4acd-a863-ba3e13f7da61=Role --only-show-errors # Application Directory.Read.All
az ad app permission add --id $application.id --api 00000003-0000-0000-c000-000000000000 --api-permissions 5f8c59db-677d-491f-a6b8-5f174b11ec1d=Scope --only-show-errors # Delegated Group.Read.All
az ad app permission add --id $application.id --api 00000003-0000-0000-c000-000000000000 --api-permissions a154be20-db9c-4678-8ab7-66f6cc099a59=Scope --only-show-errors # Delegated User.Read.All
# Upload cert to Azure AD
#
$certUploadRes = ConvertFrom-StringArray (az ad app credential reset --id $application.id --cert $certSubjectName --keyvault $keyVaultName --append --only-show-errors)
if (!$certUploadRes)
{
Write-Error "Failed to set certificate '$certSubjectName' as a credential for app registration '$applicationName'"
exit 1
}
# Remove the version from the secret ID if present
#
$secretId = $cert.sid
if ($secretId -Match "(https:\/\/[^\/]+\/secrets\/[^\/]+)(\/.*){0,1}$") {
if ($Matches[1]) {
$secretId = $Matches[1]
}
}
# Create the settings object to write to the Azure extension for SQL Server
#
$instanceSettings = @{
instanceName = $instanceName
adminLoginName = $adminAccountName
adminLoginSid = $adminAccountSid
azureCertSecretId = $secretId
azureCertUri = $cert.id
azureKeyVaultResourceUID = $keyVault.id
managedCertSetting = "CUSTOMER MANAGED CERT"
managedAppSetting = "CUSTOMER MANAGED APP"
appRegistrationName = $application.displayName
appRegistrationSid = $application.appId
tenantId = $tenantId
aadCertSubjectName = $certSubjectName
adminLoginType = $adminAccountType
}
$extension = ConvertFrom-StringArray (az connectedmachine extension show --machine-name $machineName --name "WindowsAgent.SqlServer" --resource-group $resourceGroupName)
if ($extension.properties.Settings.AzureAD)
{
$aadSettings = $extension.properties.Settings.AzureAD
$instanceFound = $false
$instanceNameLower = $instanceName.ToLower()
$instanceIndex = 0
for (($i = 0); $i -lt $aadSettings.Length; $i++)
{
if ($aadSettings[$i].instanceName.ToLower() -eq $instanceNameLower)
{
$instanceIndex = $i
$instanceFound = $true
break
}
}
if ($instanceFound)
{
$aadSettings[$instanceIndex] = $instanceSettings
}
else
{
$aadSettings += $instanceSettings
}
$extension.properties.Settings.AzureAD = $aadSettings
}
else
{
$aadSettings = , $instanceSettings
$extension.properties.Settings | Add-Member -Name 'AzureAD' -Value $aadSettings -MemberType NoteProperty
}
$settingsString = (ConvertTo-Json $extension.properties.Settings).replace("`"", "\`"").replace("`r`n", "")
# Push settings to Arc
#
Write-Host "Writing Azure AD setting to Azure extension for SQL Server. This may take several minutes..."
$updateRes = az connectedmachine extension update --machine-name $machineName --name "WindowsAgent.SqlServer" --resource-group $resourceGroupName --settings $settingsString
if (!$updateRes)
{
Write-Error "Failed to update Azure extension for SQL Server with Azure AD settings"
exit 1
}
Write-Output "Success"
Betiğin çalıştırılması birkaç dakika sürebilir. İşlem tamamlandığında, aşağıdakine benzer bir ileti görüntülenir:
Name Location ProvisioningState
---- -------- -----------------
WindowsAgent.SqlServer westus2 Succeeded
Success
Microsoft Entra yöneticisini mevcut sertifika ve uygulamayla Azure CLI kullanarak ayarlama
Zaten bir Azure Key Vault sertifikanız ve Microsoft Entra yöneticisi ayarlamak için kullanmak istediğiniz bir Azure uygulamanız varsa, aşağıdaki CLI betiğini kullanabilirsiniz:
# Set up Microsoft Entra admin for user's existing key vault, certificate, and application
# Requires input parameters indicated below
# Connect statement
AZ Login
#Input parameters
$subscriptionId="<subscriptionId>"
$tenantId="<tenantId>"
$machineName="<machineName>" # hostname
$instanceName="<instanceName>" # SQL Server is define as `machine_name\instance_name`
$resourceGroupName="<resourceGroupName>"
$keyVaultName="<keyVaultName>"
$certSubjectName="<certSubjectName>" # Your existing certificate name
$applicationName="<applicationName>" # Your existing application name
$adminAccountName="<adminAccountName>"
$adminAccountSid="<adminID>" # Use object ID for the Azure AD user and group, or client ID for the Azure AD application
$adminAccountType= 0 # 0 – for Azure AD user and application, 1 for Azure AD group
# Helper function
#
function ConvertFrom-StringArray {
param (
[string[]] $stringArray
)
if (!$stringArray)
{
return $null
}
else
{
return ConvertFrom-JSON ($stringArray -join "`n")
}
}
$keyVault = ConvertFrom-StringArray (az keyvault show --name $keyVaultName)
if (!$keyVault)
{
Write-Error "Azure key vault '$keyVaultName' does not exist"
exit 1
}
$cert = ConvertFrom-StringArray (az keyvault certificate show --name $certSubjectName --vault-name $keyVaultName 2>$null)
if (!$cert)
{
Write-Error "Supplied certificate $certSubjectName was not found for this key vault. Please specify an existing certificate"
exit 1
}
$secretId = $cert.sid
if ($secretId -Match "(https:\/\/[^\/]+\/secrets\/[^\/]+)(\/.*){0,1}$") {
if ($Matches[1]) {
$secretId = $Matches[1]
}
}
$application = ConvertFrom-StringArray (az ad app list --display-name $applicationName --only-show-errors)
if (!$application)
{
Write-Error "Supplied application was not found in the subscription. Please specify an existing application"
exit 1
}
# Create the settings object to write to the Arc extension
#
$instanceSettings = @{
instanceName = $instanceName
adminLoginName = $adminAccountName
adminLoginSid = $adminAccountSid
azureCertSecretId = $secretId
azureCertUri = $cert.id
azureKeyVaultResourceUID = $keyVault.id
managedCertSetting = "CUSTOMER MANAGED CERT"
managedAppSetting = "CUSTOMER MANAGED APP"
appRegistrationName = $application.displayName
appRegistrationSid = $application.appId
tenantId = $tenantId
aadCertSubjectName = $certSubjectName
adminLoginType = $adminAccountType
}
$extension = ConvertFrom-StringArray (az connectedmachine extension show --machine-name $machineName --name "WindowsAgent.SqlServer" --resource-group $resourceGroupName)
if ($extension.properties.Settings.AzureAD)
{
$aadSettings = $extension.properties.Settings.AzureAD
$instanceFound = $false
$instanceNameLower = $instanceName.ToLower()
$instanceIndex = 0
for (($i = 0); $i -lt $aadSettings.Length; $i++)
{
if ($aadSettings[$i].instanceName.ToLower() -eq $instanceNameLower)
{
$instanceIndex = $i
$instanceFound = $true
break
}
}
if ($instanceFound)
{
$aadSettings[$instanceIndex] = $instanceSettings
}
else
{
$aadSettings += $instanceSettings
}
$extension.properties.Settings.AzureAD = $aadSettings
}
else
{
$aadSettings = , $instanceSettings
$extension.properties.Settings | Add-Member -Name 'AzureAD' -Value $aadSettings -MemberType NoteProperty
}
$settingsString = (ConvertTo-Json $extension.properties.Settings).replace("`"", "\`"").replace("`r`n", "")
# Push settings to Arc
#
Write-Host "Writing Azure AD setting to SQL Server Arc Extension. This may take several minutes..."
$updateRes = az connectedmachine extension update --machine-name $machineName --name "WindowsAgent.SqlServer" --resource-group $resourceGroupName --settings $settingsString
if (!$updateRes)
{
Write-Error "Failed to update SQL Arc Extension with Azure AD settings"
exit 1
}
Write-Output "Success"
Aşağıdaki PowerShell betiği bir Microsoft Entra yöneticisi ayarlar, bir Azure Key Vault sertifikası oluşturur ve bir Microsoft Entra uygulaması oluşturur. Bir sertifika ve uygulama zaten mevcut olduğunda Microsoft Entra yöneticisini ayarlamak için örnek betik sağlayan ek bir bölüm vardır.
Uyarı
Microsoft Entra kurulumu için oluşturulan sertifikalar otomatik olarak döndürülmez.
Bu öğretici için aşağıdaki modüller gereklidir. Modüllerin en son sürümlerini veya aşağıda belirtilen sürümden daha yüksek bir sürümü yükleyin:
- Az.Accounts 3.37.0
- Az.ConnectedMachine 0.5.0
- Az.KeyVault 4.5.0
- Az.Resources 6.0.0
PowerShell betiği için aşağıdaki giriş parametreleri kullanılır:
-
<applicationName> - Oluşturulacak uygulama adı
-
<certSubjectName> - Oluşturulacak sertifika adı
-
<keyVaultName> - Anahtar kasasının adı. Betik çalıştırılmadan önce bu anahtar kasası oluşturulmalıdır
-
<machineName> - SQL Server konağınızın makine adı
-
<resourceGroupName> - SQL Server – Azure Arc örneğini içeren kaynak grubunun adı
-
<adminAccountName> - SQL Server'ınız için ayarlamak istediğiniz Microsoft Entra yönetici hesabı
-
<instanceName> - SQL Server adlandırılmış örnekleri için isteğe bağlı parametre. Adlandırılmış bir örneğiniz varsa bu parametreyi kullanın. Belirtilmezse, varsayılan adı MSSQLSERVER kullanılır
-
<tenantId> - Kiracı kimliği için isteğe bağlı parametre. Kiracı kimliği , Azure portalına gidip Microsoft Entra Id kaynağınıza giderek bulunabilir.
Genel Bakış bölmesinde Kiracı Kimliğinizi görmeniz gerekir. Atlanırsa, varsayılan kiracı kimliği parametre olarak kullanılır
-
<subscriptionId> - Abonelik kimliği için isteğe bağlı parametre. Abonelik kimliğiniz Azure portalında bulunabilir. Atlanırsa, varsayılan abonelik kimliği kullanılır
Aşağıdaki PowerShell betiğini kullanmak için betiği dosya .ps1 olarak kaydedin ve aşağıdaki komutu çalıştırın:
./aadPowerShellsetup.ps1 -applicationName "<applicationName>" -certSubjectName "<certSubjectName>" -keyVaultName "<keyVaultName>" -machineName "<machineName>" -resourceGroupName "<resourceGroupName>" -adminAccountName "<adminAccountName>" -instanceName "<instanceName>" -tenantId "<tenantId>" -subscriptionId "<subscriptionId>"
PowerShell betiği
Linux konak makinelerinde SQL Server için, betikte WindowsAgent.SqlServer'yi LinuxAgent.SqlServer ile değiştirin.
param (
[Parameter(mandatory=$true)] $applicationName,
[Parameter(mandatory=$true)] $certSubjectName,
[Parameter(mandatory=$true)] $keyVaultName,
[Parameter(mandatory=$true)] $machineName,
[Parameter(mandatory=$true)] $resourceGroupName,
[Parameter(mandatory=$true)] $adminAccountName,
$instanceName,
$tenantId,
$subscriptionId
)
Import-Module Az.Accounts
Import-Module Az.ConnectedMachine
Import-Module Az.KeyVault
Import-Module Az.Resources
# Constants
#
$NUMRETRIES = 60
# Check parameters
#
if ([string]::IsNullOrEmpty($instanceName))
{
Write-Host "Warning: SQL Instance name (-instanceName) not provided. Default of MSSQLSERVER will be used"
$instanceName = "MSSQLSERVER"
}
$tenantIdArgument = ""
if ([string]::IsNullOrEmpty($tenantId))
{
Write-Host "Warning: Tenant ID (-tenantId) not supplied to the script, so default tenant is being used"
}
else
{
$tenantIdArgument = "-TenantId '" + $tenantId + "'"
}
$subscriptionIdArgument = ""
if ([string]::IsNullOrEmpty($subscriptionId))
{
Write-Host "Warning: Subscription ID (-subscriptionId) not supplied to the script, so default subscription is being used"
}
else
{
$subscriptionIdArgument = "-SubscriptionId '" + $subscriptionId + "'"
}
# Login
#
try
{
$loginRes = Invoke-Expression -Command ("Connect-AzAccount " + $tenantIdArgument + " " + $subscriptionIdArgument + " -ErrorAction stop -UseDeviceAuthentication")
}
catch
{
Write-Error $_
Write-Error "Failed to login to Azure. Script can not continue"
exit 1
}
# Get subscription ID
#
if ([string]::IsNullOrEmpty($subscriptionId))
{
$context = Get-AzContext
if ($context)
{
if ($context.Name -Match "[^(]+\(([^)]{36})\)")
{
if ($Matches[1])
{
$subscriptionId = $Matches[1]
}
}
}
}
if ([string]::IsNullOrEmpty($subscriptionId))
{
Write-Error "Failed to find default subscription"
exit 1
}
# Check AKV path exists
#
$keyVault = Get-AzKeyVault -VaultName $keyVaultName
if (!$keyVault)
{
Write-Error "Supplied key vault was not found in the subscription. Please specify an existing key vault"
exit 1
}
# Check certificate doesn't exist
#
$cert = Get-AzKeyVaultCertificate -VaultName $keyVaultName -Name $certSubjectName
if ($cert)
{
Write-Error "Certificate $certSubjectName already exists"
exit 1
}
# Check app registration doesn't exist
#
$application = Get-AzADApplication -DisplayName $applicationName
if ($application)
{
Write-Error "Application $applicationName already exists"
exit 1
}
# Check Arc SQL instance is valid
#
$arcInstance = Get-AzConnectedMachineExtension -SubscriptionId $subscriptionId -MachineName $machineName -ResourceGroupName $resourceGroupName -Name "WindowsAgent.SqlServer"
if (!$arcInstance)
{
Write-Error "Could not find a SQL Server Arc instance in subscription '$subscriptionId' and resource group '$resourceGroupName' with name '$machineName'"
exit 1
}
# Check if admin account exists
#
$adminAccount = Get-AzADUser -UserPrincipalName $adminAccountName
$adminAccountType = 0
if (!$adminAccount)
{
# Check for guest user
#
$adminAccount = Get-AzADUser -Mail $adminAccountName
if (!$adminAccount)
{
$adminAccount = Get-AzADGroup -DisplayName $adminAccountName
if (!$adminAccount)
{
$adminAccount = Get-AzADServicePrincipal -DisplayName $adminAccountName
}
else
{
$adminAccountType = 1
}
}
}
if ($adminAccount)
{
if ($adminAccount.Length -gt 1)
{
Write-Error "Multiple accounts with found with name $adminAccountName"
exit 1
}
$adminAccountSid = $adminAccount.Id
}
else
{
Write-Error "Could not find an account with name $adminAccountName"
exit 1
}
# Create certificate in AKV
#
$Policy = New-AzKeyVaultCertificatePolicy -SecretContentType "application/x-pkcs12" -SubjectName "CN=$certSubjectName" -IssuerName "Self" -ValidityInMonths 12 -ReuseKeyOnRenewal
try
{
$addCertRes = Add-AzKeyVaultCertificate -VaultName $keyVaultName -Name $certSubjectName -CertificatePolicy $Policy -ErrorAction stop
}
catch
{
Write-Error $_
Write-Error "Certificate $certSubjectName could not be created"
exit 1
}
for (($i = 0); $i -lt $NUMRETRIES -and (!$cert -or !$cert.enabled); $i++)
{
$cert = Get-AzKeyVaultCertificate -VaultName $keyVaultName -Name $certSubjectName
if (!$cert -or !$cert.enabled)
{
Start-Sleep -Seconds 5
}
}
if (!$cert)
{
Write-Error "Certificate $certSubjectName could not be created"
exit 1
}
# Allow Arc to access AKV
#
$arcServicePrincipal = Get-AzADServicePrincipal -DisplayName $machineName
if ($arcServicePrincipal -and ![string]::IsNullOrEmpty($arcServicePrincipal.Id))
{
try
{
Set-AzKeyVaultAccessPolicy -VaultName $keyVaultName -ObjectId $arcServicePrincipal.Id -PermissionsToSecrets Get,List -PermissionsToCertificates Get,List
}
catch
{
Write-Error $_
Write-Host "Warning: Could not find the identity of the Azure extension for SQL Server and thus, could not add permissions for the Arc process to read from AKV. Ensure the Arc identity has the required permissions to read from AKV."
}
}
else
{
Write-Host "Warning: Could not find the identity of the Azure extension for SQL Server and thus, could not add permissions for the Arc process to read from AKV. Ensure the Arc identity has the required permissions to read from AKV."
}
# Create an Azure AD application
#
$application = New-AzADApplication -DisplayName $applicationName
if (!$application)
{
Write-Error "Application could not be created"
exit 1
}
# Set perms on app registration
#
Add-AzADAppPermission -ObjectId $application.Id -ApiId 00000003-0000-0000-c000-000000000000 -PermissionId c79f8feb-a9db-4090-85f9-90d820caa0eb # Delegated Application.Read.All
Add-AzADAppPermission -ObjectId $application.Id -ApiId 00000003-0000-0000-c000-000000000000 -PermissionId 0e263e50-5827-48a4-b97c-d940288653c7 # Delegated Directory.AccessAsUser.All
Add-AzADAppPermission -ObjectId $application.Id -ApiId 00000003-0000-0000-c000-000000000000 -PermissionId 7ab1d382-f21e-4acd-a863-ba3e13f7da61 -Type Role # Application Directory.Read.All
Add-AzADAppPermission -ObjectId $application.Id -ApiId 00000003-0000-0000-c000-000000000000 -PermissionId 5f8c59db-677d-491f-a6b8-5f174b11ec1d # Delegated Group.Read.All
Add-AzADAppPermission -ObjectId $application.Id -ApiId 00000003-0000-0000-c000-000000000000 -PermissionId a154be20-db9c-4678-8ab7-66f6cc099a59 # Delegated User.Read.All
# Upload cert to Azure AD
#
try
{
$base64Cert = [System.Convert]::ToBase64String($cert.Certificate.GetRawCertData())
New-AzADAppCredential -ApplicationObject $application -CertValue $base64Cert -EndDate $cert.Certificate.NotAfter -StartDate $cert.Certificate.NotBefore -ErrorAction stop
}
catch
{
Write-Error $_
Write-Error "Failed to add certificate to app registration"
exit 1
}
# Remove the version from the secret ID if present
#
$secretId = $cert.SecretId
if ($secretId -Match "(https:\/\/[^\/]+\/secrets\/[^\/]+)(\/.*){0,1}$") {
if ($Matches[1]) {
$secretId = $Matches[1]
}
}
# Create the settings object to write to the Azure extension for SQL Server
#
$instanceSettings = @{
instanceName = $instanceName
adminLoginName = $adminAccountName
adminLoginSid = $adminAccountSid
azureCertSecretId = $secretId.replace(":443", "")
azureCertUri = $cert.Id.replace(":443", "")
azureKeyVaultResourceUID = $keyVault.ResourceId
managedCertSetting = "CUSTOMER MANAGED CERT"
managedAppSetting = "CUSTOMER MANAGED APP"
appRegistrationName = $application.DisplayName
appRegistrationSid = $application.AppId
tenantId = $tenantId
aadCertSubjectName = $certSubjectName
adminLoginType = $adminAccountType
}
$arcInstance = Get-AzConnectedMachineExtension -SubscriptionId $subscriptionId -MachineName $machineName -ResourceGroupName $resourceGroupName -Name "WindowsAgent.SqlServer"
if ($arcInstance.Setting.AdditionalProperties.AzureAD)
{
$aadSettings = $arcInstance.Setting.AdditionalProperties.AzureAD
$instanceFound = $false
$instanceNameLower = $instanceName.ToLower()
$instanceIndex = 0
for (($i = 0); $i -lt $aadSettings.Length; $i++)
{
if ($aadSettings[$i].instanceName.ToLower() -eq $instanceNameLower)
{
$instanceIndex = $i
$instanceFound = $true
break
}
}
if ($instanceFound)
{
$aadSettings[$instanceIndex] = $instanceSettings
}
else
{
$aadSettings += $instanceSettings
}
}
else
{
$aadSettings = , $instanceSettings
}
Write-Host "Writing Microsoft Entra setting to SQL Server Arc Extension. This may take several minutes..."
# Push settings to Arc
#
try
{
#set the Entra ID / AzureAD setting in the hash table
$SettingsToConfigure = @{
AzureAD = $aadSettings
}
#add any non-AzureAD key value pairs back to the hashtable
$keys = $arcInstance.Setting.Keys | where-object {$_ -notin ("AzureAD")}
foreach ($key in $keys) {
$SettingsToConfigure.$key = $arcInstance.Setting["$key"]
}
#Issue the update of the updated settings
Update-AzConnectedMachineExtension `
-MachineName $machineName `
-Name "WindowsAgent.SqlServer" `
-ResourceGroupName $resourceGroupName `
-Setting $SettingsToConfigure
}
catch
{
Write-Error $_
Write-Error "Failed to write settings to Arc host"
exit 1
}
Write-Output "Success"
PowerShell kullanarak mevcut sertifika ve uygulamayla bir Microsoft Entra yöneticisi ayarlama
Zaten bir Azure Key Vault sertifikanız ve Microsoft Entra yöneticisi ayarlamak için kullanmak istediğiniz bir Azure uygulamanız varsa, aşağıdaki PowerShell betiğini kullanabilirsiniz:
# Connect statement
Connect-AzAccount
#Input parameters
$subscriptionId="<subscriptionId>"
$tenantId="<tenantId>"
$machineName="<machineName>" # hostname
$instanceName="<instanceName>" # SQL Server is define as `machine_name\instance_name`
$resourceGroupName="<resourceGroupName>"
$keyVaultName="<keyVaultName>"
$certSubjectName="<certSubjectName>" # Your existing certificate name
$applicationName="<applicationName>" # Your existing application name
$adminAccountName="<adminAccountName>"
$adminAccountSid="<adminID>" # Use object ID for the Microsoft Entra user and group, or client ID for the Microsoft Entra application
$adminAccountType= 0 # 0 – for Microsoft Entra user and application, 1 for Microsoft Entra group
$keyVault = Get-AzKeyVault -VaultName $keyVaultName
if (!$keyVault)
{
Write-Error "Supplied key vault was not found in the subscription. Please specify an existing key vault"
exit 1
}
$cert = Get-AzKeyVaultCertificate -VaultName $keyVaultName -Name $certSubjectName
if (!$cert)
{
Write-Error "Supplied certificate $certSubjectName was not found for this key vault. Please specify an existing certificate"
exit 1
}
$secretId = $cert.SecretId
if ($secretId -Match "(https:\/\/[^\/]+\/secrets\/[^\/]+)(\/.*){0,1}$") {
if ($Matches[1]) {
$secretId = $Matches[1]
}
}
$application = Get-AzADApplication -DisplayName $applicationName
if (!$application)
{
Write-Error "Supplied application was not found in the subscription. Please specify an existing application"
exit 1
}
# Create the settings object to write to the Arc extension
#
$instanceSettings = @{
instanceName = $instanceName
adminLoginName = $adminAccountName
adminLoginSid = $adminAccountSid
azureCertSecretId = $secretId.replace(":443", "")
azureCertUri = $cert.Id.replace(":443", "")
azureKeyVaultResourceUID = $keyVault.ResourceId
managedCertSetting = "CUSTOMER MANAGED CERT"
managedAppSetting = "CUSTOMER MANAGED APP"
appRegistrationName = $application.DisplayName
appRegistrationSid = $application.AppId
tenantId = $tenantId
aadCertSubjectName = $certSubjectName
adminLoginType = $adminAccountType
}
$arcInstance = Get-AzConnectedMachineExtension -SubscriptionId $subscriptionId -MachineName $machineName -ResourceGroupName $resourceGroupName -Name "WindowsAgent.SqlServer"
if ($arcInstance.Setting.AdditionalProperties.AzureAD)
{
$aadSettings = $arcInstance.Setting.AdditionalProperties.AzureAD
$instanceFound = $false
$instanceNameLower = $instanceName.ToLower()
$instanceIndex = 0
for (($i = 0); $i -lt $aadSettings.Length; $i++)
{
if ($aadSettings[$i].instanceName.ToLower() -eq $instanceNameLower)
{
$instanceIndex = $i
$instanceFound = $true
break
}
}
if ($instanceFound)
{
$aadSettings[$instanceIndex] = $instanceSettings
}
else
{
$aadSettings += $instanceSettings
}
}
else
{
$aadSettings = , $instanceSettings
}
Write-Host "Writing Microsoft Entra setting to SQL Server Arc Extension. This may take several minutes..."
# Push settings to Arc
#
try
{
#set the Entra ID / AzureAD setting in the hash table
$SettingsToConfigure = @{
AzureAD = $aadSettings
}
#add any non-AzureAD key value pairs back to the hashtable
$keys = $arcInstance.Setting.Keys | where-object {$_ -notin ("AzureAD")}
foreach ($key in $keys) {
$SettingsToConfigure.$key = $arcInstance.Setting["$key"]
}
#Issue the update of the updated settings
Update-AzConnectedMachineExtension `
-MachineName $machineName `
-Name "WindowsAgent.SqlServer" `
-ResourceGroupName $resourceGroupName `
-Setting $SettingsToConfigure
}
catch
{
Write-Error $_
Write-Error "Failed to write settings to Arc host"
exit 1
}
Write-Output "Success"
Aşağıdaki ARM şablonu, mevcut bir Azure Key Vault sertifikasını ve Microsoft Entra uygulamasını kullanarak bir Microsoft Entra yöneticisi ayarlar.
ARM şablonu için aşağıdaki giriş parametreleri kullanılır:
-
<machineName> - SQL Server konağınızın makine adı
-
<Location> - SQL Server'ınızın konumu – Azure Arc kaynak grubu, örneğin West US, veya Central US
-
<tenantId> - Kiracı kimliği , Azure portalına gidip Microsoft Entra Id kaynağınıza giderek bulunabilir.
Genel Bakış bölmesinde Kiracı Kimliğinizi görmeniz gerekir
-
<instanceName> - SQL Server örneği adı. SQL Server'ın varsayılan örnek adı şudur: MSSQLSERVER
-
<certSubjectName> - Oluşturduğunuz sertifika adı
-
<subscriptionId> - Abonelik Kimliği. Abonelik kimliğiniz Azure portalında bulunabilir
-
<resourceGroupName> - Kaynak grubunun anahtar kasanızı içerdiği ad. Tam azureKeyVaultResourceUID değeri, Anahtar kasası kaynağınıza gidip Özellikler'i seçerek ve Kaynak Kimliğini kopyalayarak bulunabilir
-
<keyVaultName> - Anahtar kasanızın adı
-
<certIdentifier> - Azure Key Vault sertifikanızın Sertifika Tanımlayıcısı .
Sertifika Tanımlayıcısı'nı almak için Anahtar kasası kaynağınıza gidin ve Ayarlar'ın altında Sertifikalar'ı seçin.
Oluşturduğunuz sertifikanın geçerli sürümünü seçin ve Sertifika Tanımlayıcısı değerini kopyalayın. Daha fazla bilgi için bkz . Key Vault'a sertifika ekleme
-
<certSecret>- Sertifikanızın Gizli Dizi Tanımlayıcısı ve Sertifika Tanımlayıcısı ile aynı menüde bulunabilir
-
<applicationName>- Oluşturduğunuz Microsoft Entra uygulamanızın adı
-
<appID> - Microsoft Entra uygulamanızın Uygulama (istemci) kimliği , uygulamanın Genel Bakış menüsünde bulunabilir
-
<adminAccountName> - SQL Server'ınız için ayarlamak istediğiniz Microsoft Entra yönetici hesabı
-
<adminID> - Microsoft Entra kullanıcı veya grubunun Nesne Kimliği veya Microsoft Entra yönetici hesabı olarak başka bir uygulama kullanıyorsanız uygulamanın Uygulama (istemci) kimliği . Daha fazla bilgi için bkz . Öğretici: Microsoft Entra uygulamalarını kullanarak Microsoft Entra kullanıcıları oluşturma
-
<adminType>- Microsoft Entra kullanıcıları ve uygulamaları için 0 ve Microsoft Entra grupları için 1 kullanın
Azure portalında özel dağıtım kullanın ve düzenleyicide kendi şablonunuzu oluşturun. Ardından, örnekte yapıştırdıktan sonra yapılandırmayı kaydedin .
Uyarı
Linux konak makinelerinde SQL Server için, betikte WindowsAgent.SqlServer'yi LinuxAgent.SqlServer ile değiştirin.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"resources": [
{
"type": "Microsoft.HybridCompute/machines/extensions",
"apiVersion": "2022-03-10",
"name": "<machineName>/WindowsAgent.SqlServer",
"location": "<Location>",
"properties": {
"publisher": "Microsoft.AzureData",
"type": "WindowsAgent.SqlServer",
"settings": {
"AzureAD": [
{
"tenantId": "<tenantId>",
"instanceName": "<instanceName>",
"managedCertSetting": "CUSTOMER MANAGED CERT",
"aadCertSubjectName": "<certSubjectName>",
"azureKeyVaultResourceUID": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.KeyVault/vaults/<keyVaultName>",
"azureCertUri": "<certIdentifier>",
"azureCertSecretId": "<certSecret>",
"managedAppSetting": "CUSTOMER MANAGED APP",
"appRegistrationName": "<applicationName>",
"appRegistrationSid": "<appID>",
"adminLoginName": "<adminAccountName>",
"adminLoginSid" : "<adminID>",
"adminLoginType": 0
}
]
}
}
}
]
}
Uygulama için yönetici onayı verme
Microsoft Entra yöneticisi ayarlandıktan sonra, Microsoft Entra yönetici kimlik bilgilerini kullanmak SQL Server'a bağlanmanızı sağlar. Ancak, yeni Microsoft Entra oturum açma bilgileri ve kullanıcıları oluşturmayla ilgili diğer veritabanı etkinlikleri, Microsoft Entra uygulamasına yönetici onayı verilene kadar başarısız olur.
Uyarı
Uygulama için Yönetici onayı vermek, onay veren hesabın Microsoft Entra ID Ayrıcalıklı Rol Yöneticisi rolüne sahip olmasını gerektirir. Bu roller, uygulama için yönetici onayı vermek için gereklidir, ancak Microsoft Entra yöneticisini ayarlamak için gerekli değildir.
Azure portalındaMicrosoft Entra ID>Uygulama kayıtları'nı seçin ve yeni oluşturulan uygulamayı seçin. Uygulamanın adı <hostname>-<instanceName><uniqueNumber> gibi olmalıdır.
API izinleri menüsünü seçin.
Yönetici onayı ver'i seçin.
Uygulamaya yönetici onayı verilmeden, SQL Server'da bir Microsoft Entra oturum açma bilgisi veya kullanıcı oluşturulması aşağıdaki hataya neden olur:
Msg 37455, Level 16, State 1, Line 2
Server identity does not have permissions to access MS Graph.
SQL Server'a bağlanmak için Microsoft Entra kimlik doğrulamasını kullanma
Microsoft Entra kimlik doğrulaması artık Azure Arc'a bağlı SQL Server'ınız için ayarlanmıştır. Öğretici: Microsoft Entra kimlik doğrulamasını kullanarak SQL Server'a bağlanmak üzere SQL Server için Microsoft Entra kimlik doğrulamasını ayarlama makalesindeki Microsoft Entra yöneticisini ayarladıktan sonra bölümleri izleyin.
Ayrıca bakınız