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

SQL Server 2005 雙認證模式與 Login/User 雙層模型深度解析

     編輯:關於SqlServer

核心區別:一圖勝千言

左側:資料庫使用者;右側:伺服器登入


  • 左側 (資料庫層級):**Database User (使用者)** —— 權限主體,對應特定資料庫內的 Schema/物件權限 (SELECT/INSERT/EXEC...)。
  • 右側 (伺服器層級):**Login (登入)** —— 連線驗證主體,負責「能否連上這台 SQL Server」,**不包含任何資料庫物件權限**。

雙認證模式與 Login 建立

連線字串中的 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 映射關係鐵律

  1. 一對一:一個 User 在同一時間只能對應一個 Login。
  2. 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`),資料庫可攜性更強,跨實例還原無孤立問題。

圖形化驗證映射關係

User 屬性頁顯示對應 Login


在 SSMS 中雙擊資料庫 User,`General` 頁籤顯示 `Login name`,即可確認映射。

常見誤區與正確認知

模式驗證方式Login 來源建議
Windows 驗證Windows Token (Kerberos/NTLM)Windows 帳號/群組**預設、最安全、單點登入、密碼策略由 AD 管控**
混合模式Windows + SQL Server 驗證Windows 帳號 + SQL 內建帳號僅相容舊應用/非網域環境時啟用
誤區正確認知
連線字串的 User ID 就是資料庫使用者是 Login,驗證身分用;資料庫操作權限屬於 User
建立 Login 就能操作表Login 只能連線,必須在目標資料庫建立 User 並授權
Windows 群組 Login 進來後權限怎麼算?群組成員繼承群組 Login 對應 User 的權限,若屬多群組則權限聯集
sa 是超級使用者sa 是 **Sysadmin 固定伺服器角色成員的 Login**,擁有所有權限,但本質仍是 Login

安全最佳實務

  1. **優先 Windows 驗證**,禁用/重命名 `sa`,強密碼 + 鎖定策略。
  2. 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 強化雙層模型,明確分離「驗證」與「授權」。搞懂這層關係,才能正確設計安全架構、排查權限問題、實現最小權限原則。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved