適合對象:剛接觸 Azure SQL Database 的開發者、需要協作管理資料庫權限的團隊
前言:「我只是要查資料,為什麼要給我 Admin?」
在 Azure SQL Database 的世界裡,常常會遇到這樣的情境:
- 同事 Alice 是團隊的 SQL Entra Admin(系統管理員)
- 你只是要對某個測試資料庫跑幾個 SQL 腳本
- 有人建議「直接把你也設成 Entra Admin 就好」
等等!這個做法雖然快,卻是個大地雷。本篇文章將說明正確做法,讓你在不動到管理員權限的前提下,順利取得資料庫存取能力。
問題核心:SQL Entra Admin 的影響範圍
Azure SQL Server 的 Entra Admin(Azure AD 管理員) 是 整個 SQL Server 實例層級 的最高管理員,每個 SQL Server 只能設定一個(可以是使用者或群組)。
如果把你也加入成為 Entra Admin,會發生什麼事?
- 原本的 Admin(Alice)的權限會被覆蓋,她可能因此失去管理員身份。
- 你拿到的是遠超出需求的全站最高權限,違反資安最小授權原則(Principle of Least Privilege)。
- 未來權限管理會更混亂。
正確解法:請 Entra Admin 幫你在資料庫內建立使用者
最標準、最安全的做法是:請擁有 Admin 的 Alice,在目標資料庫內幫你建立一個 資料庫層級的使用者(Database User),並只賦予你實際需要的權限。
步驟一:Alice 執行 SQL 腳本建立你的帳號
請 Alice 登入 Azure Portal → SQL Server → 目標資料庫(例如:myapp-staging)→ 查詢編輯器(Query Editor),執行以下指令:
-- 步驟 1:為開發者的 Entra ID 帳號建立資料庫使用者
CREATE USER [[email protected]] FROM EXTERNAL PROVIDER;
GO
-- 步驟 2:依需求選擇一種方案賦予權限
-- ✅ 方案 A:唯讀(只查資料,不修改)
ALTER ROLE db_datareader ADD MEMBER [[email protected]];
GO
-- ✅ 方案 B:讀寫(查詢、新增、修改、刪除資料)
ALTER ROLE db_datareader ADD MEMBER [[email protected]];
ALTER ROLE db_datawriter ADD MEMBER [[email protected]];
GO
-- ⚠️ 方案 C:資料庫擁有者(可改 Schema、建刪資料表,謹慎使用)
-- ALTER ROLE db_owner ADD MEMBER [[email protected]];
-- GO
提醒:
[email protected]請替換為實際的 Azure Entra ID(Azure AD)帳號 Email。
步驟二:你自己登入資料庫下指令
Alice 執行完畢後,你就可以用自己的帳號操作資料庫,完全不需要 Admin 權限:
- 前往 Azure Portal → SQL Server → 目標資料庫
- 點選左側選單的「查詢編輯器 (預覽)」
- 驗證方式選擇「以您的目前使用者身份繼續」(Entra ID 整合驗證)
- 登入後,即可在瀏覽器內直接執行 SQL 指令 🎉
資料庫角色權限對照表
| 角色名稱 | 可執行操作 | 適合情境 |
|---|---|---|
db_datareader | SELECT(唯讀) | 只需拉報表、查資料,不更動任何內容 |
db_datawriter | INSERT / UPDATE / DELETE | 維護資料內容、執行資料修正腳本 |
db_owner | 資料庫內所有操作(含 Schema 異動) | 需要建立資料表、修改欄位等結構性工作 |
建議:日常開發大多使用
db_datareader + db_datawriter的組合,已足夠執行絕大多數的 SQL 操作。db_owner應僅在確實需要異動資料庫結構時才賦予。
整體架構示意
Azure SQL Server(myapp-sqlsvr)
│
├── Entra Admin:[email protected](整個 SQL Server 的管理員)
│
└── myapp-staging 資料庫
├── Database User:[email protected](繼承 Admin 權限)
└── Database User:[email protected](db_datareader + db_datawriter)
↑
這才是你應該有的層級!
小結
| 做法 | 安全性 | 對現有 Admin 的影響 |
|---|---|---|
| ❌ 把開發者也設為 SQL Entra Admin | 危險,權限過大 | 可能覆蓋現有 Admin |
| ✅ 在資料庫內建立使用者並賦予角色 | 安全,符合最小授權 | 完全不影響 |
只要讓 擁有 Admin 的人執行一次 CREATE USER 腳本,你就能以最小、最安全的權限獨立作業,也不會干擾到其他管理員的設定。
這才是 Azure SQL 資料庫多人協作的標準做法。
Tags: Azure SQL Database Entra ID Azure AD 資料庫權限 db_owner db_datareader
如果有需要搶走 Entra Admin 可以使用這個 power shell script:
# set-sql-entra-admin.ps1
# Usage: .\set-sql-entra-admin.ps1 -UserEmail [email protected]
param(
[Parameter(Mandatory=$true)]
[string]$UserEmail
)
$ResourceGroup = "rg-data-stg-jpe-001"
$ServerName = "your-sqlsvr-name"
Write-Host "Looking up Object ID for: $UserEmail ..."
$ObjectId = az ad user show --id $UserEmail --query id -o tsv 2>&1
if ($LASTEXITCODE -ne 0) {
Write-Error "User not found: $UserEmail"
exit 1
}
Write-Host "Setting Entra admin to: $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 "Done! Entra admin is now: $UserEmail"
} else {
Write-Error "Failed to set Entra admin."
exit 1
}