| 模式 | 驗證方式 | Login 來源 | 建議 |
| Windows 驗證 | Windows Token (Kerberos/NTLM) | Windows 帳號/群組 | **預設、最安全、單點登入、密碼策略由 AD 管控** |
| 混合模式 | Windows + SQL Server 驗證 | Windows 帳號 + SQL 內建帳號 | 僅相容舊應用/非網域環境時啟用 |
連線字串中的 User ID = Login,而非 User
Data Source=ServerName; Initial Catalog=DBName; User ID=Pumpkin; Password=!@#$%^&*
此處 `Pumpkin` 是 **Login**。驗證通過後,SQL Server 依據 **User-Login 對應關係** 切換至對應資料庫的 **User** 內容執行後續操作。
建立 Login 與 User 的 T-SQL 標準流程
-- 1. 建立伺服器級登入 (SQL 驗證範例)
CREATE LOGIN Pumpkin WITH PASSWORD = 'ComplexP@ssw0rd!';
-- Windows 驗證:CREATE LOGIN [DOMAIN\User] FROM WINDOWS;
-- 2. 切換至目標資料庫建立使用者
USE AdventureWorks;
GO
CREATE USER Pumpkin FOR LOGIN Pumpkin;
-- 或指定預設 Schema:CREATE USER Pumpkin FOR LOGIN Pumpkin WITH DEFAULT_SCHEMA = Sales;
-- 3. 授權 (權限給 User,而非 Login)
ALTER ROLE db_datareader ADD MEMBER Pumpkin;
GRANT EXECUTE ON SCHEMA::dbo TO Pumpkin;
User-Login 映射關係鐵律
- 一對一:一個 User 在同一時間只能對應一個 Login。
2. 跨資料庫共用 Login:同一 Login 可在多資料庫建立同名/異名 User (如 `DB1.UserA`、`DB2.UserA` 皆對應 `LoginA`)。
3. 孤立使用者:還原資料庫後,User 存在但對應 Login 缺失 (SID 不匹配)。修復:`ALTER USER UserName WITH LOGIN = LoginName;` 或 `sp_change_users_login` (舊版)。
4. Contained Database (SQL 2012+):可建立**無 Login 的資料庫使用者** (`CREATE USER ... WITH PASSWORD`),資料庫可攜性更強,跨實例還原無孤立問題。
圖形化驗證映射關係

在 SSMS 中雙擊資料庫 User,`General` 頁籤顯示 `Login name`,即可確認映射。
常見誤區與正確認知
| 誤區 | 正確認知 |
| 連線字串的 User ID 就是資料庫使用者 | 是 Login,驗證身分用;資料庫操作權限屬於 User |
| 建立 Login 就能操作表 | Login 只能連線,必須在目標資料庫建立 User 並授權 |
| Windows 群組 Login 進來後權限怎麼算? | 群組成員繼承群組 Login 對應 User 的權限,若屬多群組則權限聯集 |
| sa 是超級使用者 | sa 是 **Sysadmin 固定伺服器角色成員的 Login**,擁有所有權限,但本質仍是 Login |
安全最佳實務
- **優先 Windows 驗證**,禁用/重命名 `sa`,強密碼 + 鎖定策略。
2. **最小權限原則**:User 僅獲必要 Schema/物件權限,避免 `db_owner`/`db_datareader` 濫用。
3. **Schema 分離**:建立業務 Schema (`Sales`、`HR`、`Finance`),User 綁定 `DEFAULT_SCHEMA`,物件建立於 Schema 而非 `dbo`,利於權限管理與多租戶。
4. **定期審計**:`sys.server_principals` (Login)、`sys.database_principals` (User)、`sys.server_role_members`、`sys.database_role_members`。
小結
**Login = 入場券,User = 工作證**。SQL Server 2005 強化雙層模型,明確分離「驗證」與「授權」。搞懂這層關係,才能正確設計安全架構、排查權限問題、實現最小權限原則。
- 上一篇文章: SQL Server 2000 JDBC 分頁解決方案:遊標存儲過程與多 ResultSet 處理
- 下一篇文章: SQL Server 死鎖深度解析:成因、監控與十大防範實戰策略
Copyright ©
程式碼之家 All Rights Reserved