SQL Server 安全性架構分為「伺服器層級登入」與「資料庫層級使用者」。本文說明從建立登入到精細授權的標準流程與 T-SQL 指令。
-- 1. 建立 SQL 驗證登入
CREATE LOGIN AppUser WITH PASSWORD = 'StrongP@ssw0rd', DEFAULT_DATABASE = AppDB;
GO
-- 2. 在目標資料庫建立對應使用者
USE AppDB; GO
CREATE USER AppUser FOR LOGIN AppUser;
GO
-- 3. 授予精細物件權限 (推薦)
GRANT SELECT, INSERT, UPDATE, DELETE ON dbo.Orders TO AppUser;
GRANT EXECUTE ON dbo.usp_GetOrderDetail TO AppUser;
-- 4. 或授予資料庫角色 (簡易但權限較粗)
ALTER ROLE db_datareader ADD MEMBER AppUser;
ALTER ROLE db_datawriter ADD MEMBER AppUser;
-- 建立登入
EXEC sp_addlogin 'AppUser', 'StrongP@ssw0rd', 'AppDB';
-- 授予資料庫存取
USE AppDB; EXEC sp_grantdbaccess 'AppUser';
-- 授予表權限
GRANT SELECT, UPDATE ON TestTable TO AppUser;
| 層級 | 範例 | 說明 |
|---|---|---|
| 伺服器 | GRANT CONTROL SERVER TO Login; | 相當於 sysadmin |
| 資料庫 | GRANT CREATE TABLE TO User; | 資料庫 DDL 權限 |
| 結構描述 | GRANT SELECT ON SCHEMA::Sales TO User; | 整個 Schema 物件 |
| 物件 | GRANT SELECT, INSERT ON dbo.Orders TO User; | 最精細、推薦 |
| 欄位 | GRANT UPDATE ON dbo.Orders (Status) TO User; | 欄位級權限 |
CREATE ROLE AppReadOnly; GRANT SELECT ON SCHEMA::dbo TO AppReadOnly;SELECT * FROM sys.database_permissions WHERE grantee_principal_id = USER_ID('AppUser');掌握登入/使用者/角色三層架構與 GRANT/DENY/REVOKE 指令,即可建立安全合規的 SQL Server 權限體系。