# MS SQL各層級角色權限對照表
在 **Microsoft SQL Server** 中,有分為**伺服器角色(針對伺服器層級權限)** 以及 **資料庫角色(Database Roles)**,這些角色是專門用來管理特定資料庫內的權限,本章節介紹的主要是系統預設固定角色,此外還可以根據規範與需求來自定義資料庫角色權限。
## 伺服器角色 (Server Roles)
| **伺服器角色** | **權限**|
|-----------------|---------|
| bulkadmin | 執行大容量數據導入操作,如使用`BULK INSERT`等工具進行數據加載。|
| dbcreator | 創建、刪除資料庫,管理資料庫層級的操作。|
| diskadmin | 管理伺服器磁碟與儲存空間,能新增或刪除資料庫檔案等。|
| processadmin | 管理伺服器進程,能終止運行中的進程,處理伺服器過載或卡頓情況。|
| public | 所有使用者自動屬於此角色,擁有基本的訪問權限,通常用於最基本的存取許可。|
| securityadmin | 管理伺服器的安全性,創建/管理登入帳戶、設定伺服器級角色、控制用戶登入等。|
| serveradmin | 管理伺服器設定與配置,可以配置伺服器選項、終止其他用戶的連接等。|
| setupadmin | 管理SQL Server的安裝與設置,控制伺服器啟動/停止、鏈接伺服器設置等。|
| sysadmin | 具有最高權限,能執行所有伺服器層級的操作,包括創建/刪除資料庫、設定伺服器配置、授予其他權限等。|
---
## 資料庫角色(Database Roles)
這些角色是SQL Server預設提供的,每個資料庫都會有以下內建角色:
| **角色名稱** | **權限說明** |
|--------------------|--------------------|
| db_accessadmin | 管理資料庫存取權限,能新增或移除資料庫使用者。|
| db_backupoperator| 執行資料庫備份操作。|
| db_datareader | 允許讀取資料庫中的所有資料。|
| db_datawriter | 允許新增、刪除、修改資料庫中的資料。|
| db_ddladmin | 執行所有的DDL(資料定義語言)命令,例如 `CREATE`、`ALTER`、`DROP` 來管理資料表、預存程式、檢視表等結構。|
| db_denydatareader| 禁止讀取資料庫中的資料。|
| db_denydatawriter| 禁止修改或刪除資料庫中的資料。|
| db_owner | 具有完整的控制權限,可以執行所有資料庫任務,包括設定權限、建立物件、修改結構等。|
| db_securityadmin| 管理資料庫層級的安全性,能新增或移除使用者,並授與、撤銷權限。|
| public | 所有資料庫使用者自動屬於此角色。通常授予最基礎的權限,例如連接資料庫。|
| guest | 當未在資料庫中明確創建使用者時,允許以有限權限訪問資料庫。|
---
## 如何授予權限?
除透過登入屬性介面設定,亦可以透過以下語法直接授予特定角色或使用者執行特定動作的權限,例如:
```sql
-- 賦予執行預存程式的權限
GRANT EXECUTE ON OBJECT::dbo.YourStoredProcedure TO db_datareader;
-- 賦予特定使用者讀取權限
GRANT SELECT ON dbo.YourTable TO user1;
-- 撤銷權限
REVOKE EXECUTE ON OBJECT::dbo.YourStoredProcedure FROM user1;
```
---