如何變更 Azure SQL Server 的 Microsoft Entra 系統管理員

適用情境:需要將 Azure SQL Server 的 Microsoft Entra 系統管理員(前稱 Azure AD 管理員)移交給其他人員時。


前置條件

  • 已安裝 Azure CLI
  • 具備目標訂用帳戶的 OwnerContributor 權限
  • 已執行 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 管理員身份。


參考資料

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *