適用情境:需要將 Azure SQL Server 的 Microsoft Entra 系統管理員(前稱 Azure AD 管理員)移交給其他人員時。
前置條件
- 已安裝 Azure CLI
- 具備目標訂用帳戶的 Owner 或 Contributor 權限
- 已執行
az login並切換至正確的訂用帳戶
az login
az account set --subscription "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
環境資訊
| 項目 | 值 |
|---|---|
| 資源群組 | rg-example-prod-001 |
| 位置 | japaneast |
| 訂用帳戶 | MyCompany-PoC |
| 伺服器名稱 | demo-sqlsvr.database.windows.net |
步驟一:查詢新管理員的 Object ID
在設定 Entra 管理員之前,必須先取得目標使用者在 Entra ID 中的 Object ID。
az ad user show --id [email protected] --query id -o tsv
範例輸出:
aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee:設定新的 Entra 系統管理員
使用 az sql server ad-admin create 指令覆蓋現有的 Entra 管理員設定。
az sql server ad-admin create `
--resource-group rg-example-prod-001 `
--server demo-sqlsvr `
--display-name [email protected] `
--object-id aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
成功後回傳範例:
json
{
"administratorType": "ActiveDirectory",
"azureAdOnlyAuthentication": true,
"login": "[email protected]",
"sid": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
"tenantId": "ffffffff-gggg-hhhh-iiii-jjjjjjjjjjjj"
}
使用批次腳本(推薦)
為方便日後移交,可使用以下 PowerShell 腳本快速切換管理員:
set-sql-entra-admin.ps1
param(
[Parameter(Mandatory=$true)]
[string]$UserEmail
)
$ResourceGroup = "rg-example-prod-001"
$ServerName = "demo-sqlsvr"
Write-Host "Looking up Object ID for: $UserEmail ..."
$ObjectId = az ad user show --id $UserEmail --query id -o tsv
if ($LASTEXITCODE -ne 0) {
Write-Error "找不到使用者:$UserEmail"
exit 1
}
Write-Host "設定 Entra 管理員為:$UserEmail (OID: $ObjectId)"
az sql server ad-admin create `
--resource-group $ResourceGroup `
--server $ServerName `
--display-name $UserEmail `
--object-id $ObjectId
if ($LASTEXITCODE -eq 0) {
Write-Host "完成!Entra 管理員現為:$UserEmail"
} else {
Write-Error "設定失敗,請確認帳號與權限。"
exit 1
}
執行方式:
# 指派給舊管理員
.\set-sql-entra-admin.ps1 -UserEmail [email protected]
# 指派給新管理員
.\set-sql-entra-admin.ps1 -UserEmail [email protected]
若遇到執行原則限制,請先執行:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
驗證結果
執行以下指令確認管理員已成功更新:
az sql server ad-admin list `
--resource-group rg-example-prod-001 `
--server demo-sqlsvr `
-o table
常見問題
Q:執行後提示權限不足?
確認執行帳號在該訂用帳戶具備 Contributor 以上角色,且在 Entra ID 中具備讀取使用者資訊的權限。
Q:找不到使用者(User not found)?
請確認該帳號確實存在於同一個 Entra 租用戶(Tenant)中,可用以下指令確認:
az ad user list --filter "mail eq '[email protected]'" -o table
Q:變更後原管理員立即失去存取權嗎?
是的,Entra 管理員每個伺服器只能設定一位,覆蓋後舊管理員將立即失去 Entra 管理員身份。