首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 創建登錄賬號全流程:混合模式、用戶映射與狀態配置圖解

     編輯:關於SqlServer

前置條件:啟用混合身份驗證

  1. SSMS 以管理員連接 → 右鍵服務器節點 → 屬性 → 安全性 頁籤。
  2. 選中 SQL Server 和 Windows 身份驗證模式 → 確定。
  3. 重啟 SQL Server 服務:右鍵服務器 → 重新啟動(或配置管理器/服務控制台重啟 MSSQLSERVER)。

創建登錄名

  1. 展開 安全性 → 右鍵 登錄名 → 新建登錄名。
  2. 常規 頁籤:
    • 登錄名:輸入賬號(如 app_user)。
    • 選 SQL Server 身份驗證 → 設置密碼、確認密碼。
    • 取消勾選「強制執行密碼策略/過期」(開發/測試環境),生產環境建議保留。
    • 默認數據庫:選目標業務庫(避免登錄後默認 master)。
    • 默認語言:Chinese (Simplified) 或 English。
  3. 伺服器角色 頁籤:通常僅勾選 public,切勿授予 sysadmin 除非 DBA 賬號。
  4. 用戶映射 頁籤(關鍵):
    • 勾選目標數據庫 → 下方「数据库角色成员身份」勾選 db_datareader、db_datawriter、db_ddladmin 等按最小權限原則分配。
    • 或勾選 db_owner(僅限開發/測試/擁有者)。
  5. 安全可組體 / 狀態 頁籤:
    • 授予連接數據庫引擎:選 Grant。
    • 登錄:選 已啟用。
  6. 確定創建。

常見「創建後無法登錄」排查清單

現象原因解決
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),便於識別與管理。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved