浏览到 Azure 门户中的选择 SQL 部署选项页。
如果你尚未登录到 Azure 门户,请按提示登录。
在“SQL 数据库”下将“资源类型”设置保留为“单一数据库”,然后选择“创建” 。
在“创建 SQL 数据库”窗体的“基本信息”选项卡上的“项目详细信息”下,选择所需的 Azure订阅 。
对于“资源组”,请选择“新建”,输入资源组的名称,然后选择“确定” 。
对于“数据库名称”,输入想要的数据库名称。
对于“服务器”,选择“新建”,并使用以下值填写“新服务器”窗体 :
- 服务器名称:输入唯一的服务器名称。 对于 Azure 中的所有服务器,服务器名称必须全局唯一,而不只是在订阅中唯一。
- 服务器管理员登录名:输入管理员登录名,例如:
azureuser
。
- 密码:输入符合密码要求的密码,然后在“确认密码”字段中再次输入该密码。
- 位置:从下拉列表中选择一个位置
在完成时选择“下一步:网络”。
在“网络”选项卡上,对于“连接方法”,选择“公共终结点” 。
对于“防火墙规则”,将“添加当前客户端 IP 地址”设置为“是” 。 将“允许 Azure 服务和资源访问此服务器”设置保留为“否” 。
在页面底部选择“下一步: 安全”。
在“安全”选项卡的“标识”下,选择“配置标识”。
在“标识”窗格的“用户分配的托管标识”下,选择“添加”。 选择所需的订阅,然后在“用户分配的托管标识”下,从所选订阅中选择所需的用户分配的托管标识。 然后选择“选择”按钮。
在“主标识”下面,选择在上一步中选择的相同用户分配的托管标识。
注意
如果系统分配的托管标识是主标识,则“主标识”字段必须为空。
选择“应用”
在页面底部选择“查看 + 创建”
在“查看 + 创建”页上,查看后选择“创建”。
Azure CLI命令 az sql server create
用于预配新的逻辑服务器。 以下命令将使用用户分配的托管标识预配一个新服务器。 该示例还将启用仅限 Microsoft Entra 身份验证,并为服务器设置 Microsoft Entra 管理员。
服务器 SQL 管理员登录名将自动创建,密码将设置为随机密码。 由于在服务器创建过程中禁用了 SQL 身份验证连接,因此不会使用 SQL 管理员登录。
服务器 Microsoft Entra 管理员将是你为 <AzureADAccount>
设置的帐户,可用于管理服务器。
替换示例中的以下值:
<subscriptionId>
:可以在 Azure 门户中找到订阅 ID
<ResourceGroupName>
:逻辑服务器的资源组名称
<managedIdentity>
:用户分配的托管标识。 还可以用作主标识。
<primaryIdentity>
:你要用作服务器标识的主标识
<AzureADAccount>
:可以是 Microsoft Entra 用户或组。 例如: DummyLogin
<AzureADAccountSID>
:用户的 Microsoft Entra 对象 ID
<ServerName>
:使用唯一的逻辑服务器名称
<Location>
:服务器的位置,例如 chinaeast2
或 chinanorth2
subscription_id=<subscriptionId>
resource_group=<ResourceGroupName>
managed_identity=<managedIdentity>
primary_identity=<primaryIdentity>
azure_ad_account=<AzureADAccount>
azure_ad_account_sid=<AzureADAccountSID>
server_name=<ServerName>
location=<Location>
az sql server create \
--assign-identity \
--identity-type UserAssigned \
--user-assigned-identity-id /subscriptions/$subscription_id/resourceGroups/$resource_group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$managed_identity \
--primary-user-assigned-identity-id /subscriptions/$subscription_id/resourceGroups/$resource_group/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$primary_identity \
--enable-ad-only-auth \
--external-admin-principal-type User \
--external-admin-name $azure_ad_account \
--external-admin-sid $azure_ad_account_sid \
-g $resource_group \
-n $server_name \
-l $location
有关详细信息,请参阅 az sql server create。
注意
上面的示例为服务器仅预配了一个由用户分配的托管标识。 如果希望在服务器中创建两种类型的托管标识,可以将 --identity-type
设置为 UserAssigned,SystemAssigned
。
要在创建后检查服务器状态,请参阅以下命令:
az sql server show --name <ServerName> --resource-group <ResourceGroupName> --expand-ad-admin
PowerShell 命令 New-AzSqlServer
用于预配新的 Azure SQL 逻辑服务器。 以下命令将使用用户分配的托管标识预配一个新服务器。 该示例还将启用仅限 Microsoft Entra 身份验证,并为服务器设置 Microsoft Entra 管理员。
服务器 SQL 管理员登录名将自动创建,密码将设置为随机密码。 由于在服务器创建过程中禁用了 SQL 身份验证连接,因此不会使用 SQL 管理员登录。
服务器 Microsoft Entra 管理员将是你为 <AzureADAccount>
设置的帐户,可用于管理服务器。
替换示例中的以下值:
<ResourceGroupName>
:逻辑服务器的资源组名称
<Location>
:服务器的位置,例如 China East 2
或 China North 2
<ServerName>
:使用唯一的逻辑服务器名称
<subscriptionId>
:可以在 Azure 门户中找到订阅 ID
<managedIdentity>
:用户分配的托管标识。 还可以用作主标识
<primaryIdentity>
:你要用作服务器标识的主标识
<AzureADAccount>
:可以是 Microsoft Entra 用户或组。 例如: DummyLogin
$server = @{
ResourceGroupName = "<ResourceGroupName>"
Location = "<Location>"
ServerName = "<ServerName>"
ServerVersion = "12.0"
AssignIdentity = $true
IdentityType = "UserAssigned"
UserAssignedIdentityId = "/subscriptions/<subscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managedIdentity>"
PrimaryUserAssignedIdentityId = "/subscriptions/<subscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<primaryIdentity>"
ExternalAdminName = "<AzureADAccount>"
EnableActiveDirectoryOnlyAuthentication = $true
}
New-AzSqlServer @server
有关详细信息,请参阅 New-AzSqlServer。
注意
上面的示例为服务器仅预配了一个由用户分配的托管标识。 如果希望在服务器中创建两种类型的托管标识,可以将 -IdentityType
设置为 "UserAssigned,SystemAssigned"
。
要在创建后检查服务器状态,请参阅以下命令:
Get-AzSqlServer -ResourceGroupName "<ResourceGroupName>" -ServerName "<ServerName>" -ExpandActiveDirectoryAdministrator
服务器 - 创建或更新 REST API 可用来通过用户分配的托管标识来创建一个逻辑服务器。
以下脚本将预配逻辑服务器,将 Microsoft Entra 管理员设置为 <AzureADAccount>
,并启用“仅限 Microsoft Entra 身份验证”。 服务器 SQL 管理员登录名也将自动创建,而且密码将设置为随机密码。 由于在预配过程中禁用了 SQL 身份验证连接,因此不会使用 SQL 管理员登录。
预配完成后,可使用 Microsoft Entra 管理员 <AzureADAccount>
管理服务器。
替换示例中的以下值:
<tenantId>
:可通过转到 Azure 门户并进入 Microsoft Entra ID 资源找到。 在“概述”窗格中,应会看到“租户 ID”
<subscriptionId>
:可以在 Azure 门户中找到订阅 ID
<ServerName>
:使用唯一的逻辑服务器名称
<ResourceGroupName>
:逻辑服务器的资源组名称
<AzureADAccount>
:可以是 Microsoft Entra 用户或组。 例如: DummyLogin
<Location>
:服务器的位置,例如 chinaeast2
或 chinanorth2
<objectId>
:可通过转到 Azure 门户并进入 Microsoft Entra ID 资源找到。 在“用户”窗格中,搜索 Microsoft Entra 用户并查找其“对象 ID”
<managedIdentity>
:用户分配的托管标识。 还可以用作主标识
<primaryIdentity>
:你要用作服务器标识的主标识
Import-Module Azure
Import-Module MSAL.PS
$tenantId = '<tenantId>'
$clientId = '1950a258-227b-4e31-a9cf-717495945fc2' # Static Microsoft client ID used for getting a token
$subscriptionId = '<subscriptionId>'
$uri = "urn:ietf:wg:oauth:2.0:oob"
$authUrl = "https://login.chinacloudapi.cn/$tenantId"
$serverName = "<ServerName>"
$resourceGroupName = "<ResourceGroupName>"
Login-AzAccount -tenantId $tenantId -Environment AzureChinaCloud
# login as a user with SQL Server Contributor role or higher
# Get a token
$result = Get-MsalToken -RedirectUri $uri -ClientId $clientId -TenantId $tenantId -Scopes "https://management.core.chinacloudapi.cn/.default"
#Authetication header
$authHeader = @{
'Content-Type'='application\json; '
'Authorization'=$result.CreateAuthorizationHeader()
}
# Enable Azure AD-only auth and sets a user-managed identity as the server identity
# No server admin is specified, and only Azure AD admin and Azure AD-only authentication is set to true
# Server admin (login and password) is generated by the system
# The sid is the Azure AD Object ID for the user
# Replace all values in a <>
$body = '{
"location": "<Location>",
"identity": {"type" : "UserAssigned", "UserAssignedIdentities" : {"/subscriptions/<subscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managedIdentity>" : {}}},
"properties": { "PrimaryUserAssignedIdentityId":"/subscriptions/<subscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<primaryIdentity>","administrators":{ "login":"<AzureADAccount>", "sid":"<objectId>", "tenantId":"<tenantId>", "principalType":"User", "azureADOnlyAuthentication":true }
}
}'
# Provision the server
Invoke-RestMethod -Uri https://management.chinacloudapi.cn/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Sql/servers/$serverName/?api-version=2020-11-01-preview -Method PUT -Headers $authHeader -Body $body -ContentType "application/json"
注意
上面的示例为服务器仅预配了一个由用户分配的托管标识。 如果希望在服务器中创建两种类型的托管标识,可以将 "type"
设置为 "UserAssigned,SystemAssigned"
。
若要检查服务器状态,可以使用以下脚本:
$uri = 'https://management.chinacloudapi.cn/subscriptions/'+$subscriptionId+'/resourceGroups/'+$resourceGroupName+'/providers/Microsoft.Sql/servers/'+$serverName+'?api-version=2020-11-01-preview&$expand=administrators/activedirectory'
$responce=Invoke-WebRequest -Uri $uri -Method PUT -Headers $authHeader -Body $body -ContentType "application/json"
$responce.statuscode
$responce.content
下面是一个 ARM 模板示例,该模板使用用户分配的托管标识创建一个 Azure SQL 数据库逻辑服务器。 该模板还为服务器添加了一个 Microsoft Entra 管理员集并启用了仅限 Microsoft Entra 身份验证,但这可以从模板示例中删除。
有关 ARM 模板的详细信息,请参阅 Azure SQL 数据库和 SQL 托管实例的 Azure 资源管理器模板。
使用 Azure 门户中的自定义部署,在编辑器中生成自己的模板。 接下来,粘贴到示例中后保存配置。
若要获取用户分配的托管标识资源 ID,请在 Azure 门户中搜索托管标识。 找到你的托管标识,然后转到“属性”。 你的 UMI 资源 ID 示例如 /subscriptions/<subscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managedIdentity>
所示。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.1",
"parameters": {
"server": {
"type": "string",
"defaultValue": "[uniqueString('sql', resourceGroup().id)]",
"metadata": {
"description": "The name of the logical server."
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Location for all resources."
}
},
"aad_admin_name": {
"type": "String",
"metadata": {
"description": "The name of the Azure AD admin for the SQL server."
}
},
"aad_admin_objectid": {
"type": "String",
"metadata": {
"description": "The Object ID of the Azure AD admin."
}
},
"aad_admin_tenantid": {
"type": "String",
"defaultValue": "[subscription().tenantId]",
"metadata": {
"description": "The Tenant ID of the Azure Active Directory"
}
},
"aad_admin_type": {
"defaultValue": "User",
"allowedValues": [
"User",
"Group",
"Application"
],
"type": "String"
},
"aad_only_auth": {
"defaultValue": true,
"type": "Bool"
},
"user_identity_resource_id": {
"defaultValue": "",
"type": "String",
"metadata": {
"description": "The Resource ID of the user-assigned managed identity, in the form of /subscriptions/<subscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managedIdentity>."
}
},
"AdminLogin": {
"minLength": 1,
"type": "String"
},
"AdminLoginPassword": {
"type": "SecureString"
}
},
"resources": [
{
"type": "Microsoft.Sql/servers",
"apiVersion": "2020-11-01-preview",
"name": "[parameters('server')]",
"location": "[parameters('location')]",
"identity": {
"type": "UserAssigned",
"UserAssignedIdentities": {
"[parameters('user_identity_resource_id')]": {}
}
},
"properties": {
"administratorLogin": "[parameters('AdminLogin')]",
"administratorLoginPassword": "[parameters('AdminLoginPassword')]",
"PrimaryUserAssignedIdentityId": "[parameters('user_identity_resource_id')]",
"administrators": {
"login": "[parameters('aad_admin_name')]",
"sid": "[parameters('aad_admin_objectid')]",
"tenantId": "[parameters('aad_admin_tenantid')]",
"principalType": "[parameters('aad_admin_type')]",
"azureADOnlyAuthentication": "[parameters('aad_only_auth')]"
}
}
}
]
}