---
## 🧭 เป้าหมาย
> ให้ผู้ใช้ (Login) เห็นเฉพาะ Database ที่เราอนุญาต เช่น “HRM_DB”
> ไม่เห็น Database อื่นใน SSMS
---
## ⚙️ ขั้นตอนทำใน SSMS (แบบไม่ใช้โค้ด)
### 🔹 ขั้นตอนที่ 1: สร้าง Login ใหม่
1. เปิด **SQL Server Management Studio (SSMS)**
2. ขยายเมนู **Security → Logins**
3. คลิกขวา → เลือก **New Login…**
4. ที่แท็บ **General**
* ใส่ Login name เช่น `user_hrm`
* เลือก **SQL Server authentication**
* ใส่รหัสผ่าน
* เอาเครื่องหมายถูกออกที่ “Enforce password policy” (ถ้าไม่ต้องการบังคับเปลี่ยนรหัส)
* คลิก OK
---
### 🔹 ขั้นตอนที่ 2: สร้าง User ใน Database ที่ต้องการให้เห็น
1. ขยายเมนู **Databases → HRM_DB → Security → Users**
2. คลิกขวา → เลือก **New User…**
3. ที่หน้าต่าง New Database User:
* User name: `user_hrm`
* Login name: กดปุ่ม “…” แล้วเลือก login ที่สร้างเมื่อกี้
* Role Membership:
✅ ติ๊ก `db_datareader` (อ่านข้อมูลได้)
✅ หรือ `db_datawriter` (เขียนได้ด้วย ถ้าต้องการ)
* กด **OK**
---
### 🔹 ขั้นตอนที่ 3: ปิดการมองเห็น Database อื่น
1. ขยายเมนู **Security → Logins**
2. คลิกขวาที่ `user_hrm` → เลือก **Properties**
3. ไปที่ **Securables**
4. ด้านล่างคลิกปุ่ม **Search… → All objects of the types → Logins → OK**
5. จากนั้นคลิก **Explicit** แท็บ แล้วกด “Add…”
6. ที่ช่อง “Select objects” → เลือก **Server** → OK
7. จากนั้นในสิทธิ์ (Permissions) ให้หา
* **VIEW ANY DATABASE**
* แล้วติ๊ก **Deny**
กด **OK**
✅ ตอนนี้ผู้ใช้คนนี้จะ “ไม่เห็น” Database อื่นในรายชื่อแล้ว (ยกเว้น HRM_DB ที่เขาเป็นสมาชิกอยู่)
---
### 🔹 ขั้นตอนที่ 4: ทดสอบ
1. ออกจากระบบ SSMS
2. เปิดใหม่อีกครั้ง → ที่หน้า **Connect to Server**
* Authentication: เลือก **SQL Server Authentication**
* Login: `user_hrm`
* Password: (ที่ตั้งไว้)
3. ลองดูใน Object Explorer
→ จะเห็นเฉพาะ **HRM_DB** เท่านั้นครับ 🎯
---
## 🧠 หมายเหตุเพิ่มเติม
* System Databases (เช่น master, tempdb) อาจยังเห็นชื่อ แต่จะเปิดไม่ได้
* ถ้าต้องการให้เห็นบาง Table เท่านั้น ก็ไปปรับสิทธิ์ใน “Database → Security → Users → user_hrm → Securables”
---