Azure SQL 資料庫權限管理:不搶 Admin,照樣能下 SQL 指令

適合對象:剛接觸 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,會發生什麼事?

  1. 原本的 Admin(Alice)的權限會被覆蓋,她可能因此失去管理員身份。
  2. 你拿到的是遠超出需求的全站最高權限,違反資安最小授權原則(Principle of Least Privilege)。
  3. 未來權限管理會更混亂。

正確解法:請 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 權限:

  1. 前往 Azure Portal → SQL Server → 目標資料庫
  2. 點選左側選單的「查詢編輯器 (預覽)
  3. 驗證方式選擇「以您的目前使用者身份繼續」(Entra ID 整合驗證)
  4. 登入後,即可在瀏覽器內直接執行 SQL 指令 🎉

資料庫角色權限對照表

角色名稱可執行操作適合情境
db_datareaderSELECT(唯讀)只需拉報表、查資料,不更動任何內容
db_datawriterINSERT / 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
}

發佈留言

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