前置條件:啟用混合身份驗證
- SSMS 以管理員連接 → 右鍵服務器節點 → 屬性 → 安全性 頁籤。
- 選中 SQL Server 和 Windows 身份驗證模式 → 確定。
- 重啟 SQL Server 服務:右鍵服務器 → 重新啟動(或配置管理器/服務控制台重啟 MSSQLSERVER)。
創建登錄名
- 展開 安全性 → 右鍵 登錄名 → 新建登錄名。
- 常規 頁籤:
- 登錄名:輸入賬號(如
app_user)。
- 選 SQL Server 身份驗證 → 設置密碼、確認密碼。
- 取消勾選「強制執行密碼策略/過期」(開發/測試環境),生產環境建議保留。
- 默認數據庫:選目標業務庫(避免登錄後默認
master)。
- 默認語言:
Chinese (Simplified) 或 English。
- 伺服器角色 頁籤:通常僅勾選
public,切勿授予 sysadmin 除非 DBA 賬號。
- 用戶映射 頁籤(關鍵):
- 勾選目標數據庫 → 下方「数据库角色成员身份」勾選
db_datareader、db_datawriter、db_ddladmin 等按最小權限原則分配。
- 或勾選
db_owner(僅限開發/測試/擁有者)。
- 安全可組體 / 狀態 頁籤:
- 授予連接數據庫引擎:選 Grant。
- 登錄:選 已啟用。
- 確定創建。
常見「創建後無法登錄」排查清單
| 現象 | 原因 | 解決 |
| 18456 錯誤:登錄失敗 | 混合模式未啟用/未重啟服務 | 按前置條件啟用並重啟 |
| 18456 狀態 1:密碼錯誤 | 密碼輸入錯誤/大小寫/過期 | 重置密碼、取消強制過期 |
| 登錄成功但看不到表 | 用戶映射未勾選目標庫/角色不足 | 登錄名屬性→用戶映射→勾選庫與角色 |
| 登錄成功但無法執行存儲過程 | 缺少 EXECUTE 權限 | 授予 GRANT EXECUTE ON SCHEMA::dbo TO [user] |
| 連接超時 | 防火牆/TCP/IP 未啟用/端口錯誤 | 配置管理器啟用 TCP/IP、檢查 1433/動態端口 |
腳本化創建(版本控制/自動化部署)
USE [master];
GO
CREATE LOGIN [app_user] WITH PASSWORD = N'ComplexP@ssw0rd!',
DEFAULT_DATABASE = [BizDB],
DEFAULT_LANGUAGE = [us_english],
CHECK_EXPIRATION = OFF,
CHECK_POLICY = OFF;
GO
ALTER SERVER ROLE [public] ADD MEMBER [app_user]; -- 默認即有
GO
USE [BizDB];
GO
CREATE USER [app_user] FOR LOGIN [app_user];
GO
ALTER ROLE [db_datareader] ADD MEMBER [app_user];
ALTER ROLE [db_datawriter] ADD MEMBER [app_user];
-- GRANT EXECUTE ON SCHEMA::dbo TO [app_user]; -- 若需執行權限
GO
最佳實踐原則
- 🔐 最小權限:按應用/模塊拆分賬號,僅授必要權限。
- 🔄 定期輪換:生產密碼 90 天輪換,配合密碼策略強制複雜度。
- 📝 審計追蹤:啟用登錄審計(成功/失敗),定期導出分析異常登錄。
- 🚫 禁用 sa:重命名 sa、設置極強密碼、禁止應用使用 sa 連接。
- 🏷️ 命名規範:
app_模塊_環境(如 app_order_prod),便於識別與管理。