ความแตกต่างระหว่างผู้ใช้กับการเข้าสู่ระบบใน SQL Server


178

ฉันเพิ่งทำงานในหลาย ๆ พื้นที่ของ SQL Server ที่ปกติฉันไม่ยุ่ง หนึ่งในนั้นที่ฉันสับสนคือพื้นที่ของการเข้าสู่ระบบและผู้ใช้ ดูเหมือนว่าควรเป็นหัวข้อที่ค่อนข้างง่าย ...

ปรากฏว่าการเข้าสู่ระบบแต่ละครั้งสามารถมีผู้ใช้ 1 คนเท่านั้นและผู้ใช้แต่ละคนสามารถมี 1 การเข้าสู่ระบบเท่านั้น

การเข้าสู่ระบบสามารถเชื่อมโยงกับหลายตารางจึงเชื่อมโยงผู้ใช้นั้นกับหลายตาราง

ดังนั้นคำถามของฉันคือทำไมถึงมีการเข้าสู่ระบบและผู้ใช้? พวกเขาดูเหมือนจะสวยมากเหมือนกัน อะไรคือความแตกต่างหรือสิ่งที่ฉันดูเหมือนจะหายไป?

คำตอบ:


202

"เข้าสู่ระบบ" ถือเป็นรายการหลักใน SERVER

"ผู้ใช้" มอบรายการเข้าสู่ระบบลงในฐานข้อมูลเดียว

หนึ่ง "เข้าสู่ระบบ" สามารถเชื่อมโยงกับผู้ใช้หลายคน (หนึ่งต่อฐานข้อมูล)

แต่ละวัตถุด้านบนสามารถได้รับอนุญาตในระดับของตัวเอง ดูบทความต่อไปนี้สำหรับคำอธิบายของแต่ละคน


7
ไม่น่าแปลกใจเลยที่ฉันไม่พบความแตกต่าง ฉันทำงานกับฐานข้อมูล 1 ตัว ขอบคุณ
corymathews

3
คำตอบนี้ถูกต้อง แต่ฉันเข้าใจว่าผู้ใช้บางคนสามารถได้รับสิทธิ์การเข้าถึงฐานข้อมูลมากกว่าหนึ่งฐานที่มีอยู่ในเซิร์ฟเวอร์นั้น ดังนั้นการเข้าสู่ระบบของผู้ใช้จึงเป็นการแมปแบบ 1 ต่อ 1 แต่ผู้ใช้กับฐานข้อมูลนั้นเป็นการแมปแบบ 1 ต่อหลายคน
andrew pate

1
@coreymathews: เวลาน้อยลงใน "Boy Meets World" และมีเวลามากขึ้นในหนังสือ! ;)
MSIS

แต่ตอนนี้ MSDN แนะนำประเภทผู้ใช้ "ผู้ใช้ที่รับรองความถูกต้องที่ฐานข้อมูล" (แนะนำเพื่อช่วยให้ฐานข้อมูลของคุณพกพาได้มากขึ้น) ลิงก์: docs.microsoft.com/en-us/sql/t-sql/statements/… นี่ดีกว่าประเภทผู้ใช้ทั่วไปหรือไม่
Sheen

32

เหตุผลหนึ่งที่มีทั้งคู่คือการตรวจสอบสิทธิ์ที่สามารถทำได้โดยเซิร์ฟเวอร์ฐานข้อมูล แต่การอนุญาตสามารถกำหนดขอบเขตไปยังฐานข้อมูล ด้วยวิธีนี้ถ้าคุณย้ายฐานข้อมูลของคุณไปยังเซิร์ฟเวอร์อื่นคุณสามารถทำการแมปความสัมพันธ์ระหว่างผู้ใช้กับเซิร์ฟเวอร์ฐานข้อมูลใหม่ได้ แต่ฐานข้อมูลของคุณไม่จำเป็นต้องเปลี่ยนแปลง


คุณช่วยอธิบายรายละเอียดได้ไหม? ข้อดีของการเปลี่ยนแปลงที่ทำบนเซิร์ฟเวอร์ฐานข้อมูลแทนที่จะเป็นบนฐานข้อมูลคืออะไร
HeyJude

สมมติว่าคุณต้องการสำรองและกู้คืนฐานข้อมูล การกู้คืนมักจะทำบนเซิร์ฟเวอร์ใหม่ คุณอาจไม่ต้องการเปลี่ยนแปลงฐานข้อมูลในการกู้คืน
Tom Resing

ทำไมไม่เพียงทำการเปลี่ยนแปลงหลังจากคืนค่าฐานข้อมูลแล้ว
HeyJude

1
มีวิดีโอ 60 วินาทีที่ดีในหัวข้อที่ SQLAuthority สำหรับข้อมูลเพิ่มเติมblog.sqlauthority.com/2014/07/16/…
Tom Resing

1
@HeyJude หมายถึงเซิร์ฟเวอร์ที่เกี่ยวข้องกับการตรวจสอบสิ่งที่ฐานข้อมูลจะต้องทำถ้าไม่ใช่สำหรับการเข้าสู่ระบบและการแยกผู้ใช้
Zaid Khan

25

ฉันคิดว่ามีโพสต์บล็อก MSDNที่ดีจริงๆเกี่ยวกับหัวข้อนี้โดย Laurentiu Cristofor:

สิ่งสำคัญอันดับแรกที่ต้องเข้าใจเกี่ยวกับความปลอดภัยของ SQL Server คือมีสองส่วนของความปลอดภัยที่เกี่ยวข้อง - เซิร์ฟเวอร์และฐานข้อมูล ขอบเขตของเซิร์ฟเวอร์ครอบคลุมหลายฐานข้อมูล งานทั้งหมดจะทำในบริบทของฐานข้อมูลบางส่วน แต่เพื่อให้ได้งานต้องมีการเข้าถึงเซิร์ฟเวอร์ก่อนแล้วจึงจะสามารถเข้าถึงฐานข้อมูล

การเข้าถึงเซิร์ฟเวอร์ได้รับผ่านเข้าสู่ระบบ การเข้าสู่ระบบมีสองประเภทหลัก: การเข้าสู่ระบบที่รับรองความถูกต้องของเซิร์ฟเวอร์ SQL และการเข้าสู่ระบบที่ได้รับการรับรองความถูกต้องของ Windows ฉันมักจะอ้างถึงสิ่งเหล่านี้โดยใช้ชื่อที่สั้นลงของการเข้าสู่ระบบ SQL และการเข้าสู่ระบบ Windows การเข้าสู่ระบบที่ได้รับการรับรองความถูกต้องของ Windows สามารถเป็นการเข้าสู่ระบบที่แมปกับผู้ใช้ Windows หรือการล็อกอินที่แมปกับกลุ่ม Windows ดังนั้นเพื่อให้สามารถเชื่อมต่อกับเซิร์ฟเวอร์ได้ต้องมีการเข้าถึงผ่านหนึ่งในประเภทหรือการเข้าสู่ระบบเหล่านี้ - การเข้าสู่ระบบให้การเข้าถึงอาณาจักรของเซิร์ฟเวอร์

แต่การเข้าสู่ระบบไม่เพียงพอเพราะโดยปกติแล้วงานจะทำในฐานข้อมูลและฐานข้อมูลแยกจากกัน การเข้าถึงฐานข้อมูลจะได้รับผ่านผู้ใช้

ผู้ใช้ถูกแมปกับการเข้าสู่ระบบและการแมปจะถูกแสดงโดยคุณสมบัติ SID ของการเข้าสู่ระบบและผู้ใช้ ล็อกอินเข้าสู่ผู้ใช้ในฐานข้อมูลหากค่า SID ของพวกเขาเหมือนกัน ขึ้นอยู่กับประเภทของการเข้าสู่ระบบเราจึงสามารถจัดหมวดหมู่ของผู้ใช้ที่เลียนแบบหมวดหมู่ข้างต้นสำหรับการเข้าสู่ระบบ; ดังนั้นเรามีผู้ใช้ SQL และผู้ใช้ Windows และหมวดหมู่หลังประกอบด้วยผู้ใช้ที่แมปเข้าสู่การเข้าสู่ระบบของผู้ใช้ Windows และผู้ใช้ที่แมปเข้าสู่การเข้าสู่ระบบกลุ่ม Windows

ลองย้อนกลับไปดูภาพรวมอย่างรวดเร็ว: การเข้าสู่ระบบให้การเข้าถึง เซิร์ฟเวอร์และเพื่อให้สามารถเข้าถึงฐานข้อมูลเพิ่มเติมได้ผู้ใช้ที่แมป ไปยังการเข้าสู่ระบบต้องมีอยู่ในฐานข้อมูล

นั่นคือลิงก์ไปยังโพสต์แบบเต็ม


โพสต์บล็อกนี้ถูกลบ :(
Steven Schlansker

23

ในระยะสั้น

การเข้าสู่ระบบจะสามารถเข้าถึงเซิร์ฟเวอร์ได้

และ

ผู้ใช้จะสามารถเข้าถึงฐานข้อมูลได้


6

ฉันคิดว่านี่เป็นคำถามที่มีประโยชน์มากพร้อมคำตอบที่ดี เพียงเพิ่มสองเซ็นต์ของฉันจากหน้าสร้างการเข้าสู่ระบบ MSDN :

ล็อกอินเป็นหลักการรักษาความปลอดภัยหรือเอนทิตีที่สามารถตรวจสอบความถูกต้องโดยระบบความปลอดภัย ผู้ใช้จำเป็นต้องเข้าสู่ระบบเพื่อเชื่อมต่อกับ SQL Server คุณสามารถสร้างการเข้าสู่ระบบโดยใช้หลักการของ Windows (เช่นผู้ใช้โดเมนหรือกลุ่มโดเมน Windows) หรือคุณสามารถสร้างการเข้าสู่ระบบที่ไม่ได้ใช้หลักการของ Windows (เช่นการเข้าสู่ระบบ SQL Server)

หมายเหตุ:
เมื่อต้องการใช้การพิสูจน์ตัวจริงของเซิร์ฟเวอร์ SQL โปรแกรมฐานข้อมูลต้องใช้การรับรองความถูกต้องของโหมดผสม สำหรับข้อมูลเพิ่มเติมดูเลือกโหมดการรับรองความถูกต้อง

ในฐานะผู้รักษาความปลอดภัยคุณสามารถให้สิทธิ์การเข้าสู่ระบบได้ ขอบเขตของการเข้าสู่ระบบเป็นเครื่องมือฐานข้อมูลทั้งหมด ในการเชื่อมต่อกับฐานข้อมูลเฉพาะบนอินสแตนซ์ของ SQL Server การเข้าสู่ระบบต้องถูกแมปกับผู้ใช้ฐานข้อมูล สิทธิ์ในฐานข้อมูลจะได้รับและปฏิเสธให้กับผู้ใช้ฐานข้อมูลไม่ใช่การล็อกอิน สิทธิ์ที่มีขอบเขตของอินสแตนซ์ทั้งหมดของ SQL Server (ตัวอย่างเช่นสิทธิ์ CREATE ENDPOINT) สามารถให้สิทธิ์ในการเข้าสู่ระบบ


3
ค่อนข้างชัดเจนถ้าคุณใส่>จุดเริ่มต้นของแต่ละย่อหน้าไว้ในเครื่องหมายคำพูดดังนั้นจึงจัดรูปแบบเป็นเครื่องหมายคำพูด
Sam

2
มันมีประโยชน์มาก แม้ว่าฉันได้ตั้งค่าผู้ใช้และการเข้าสู่ระบบอย่างถูกต้อง แต่ระบบไม่ได้ตั้งค่าให้อนุญาตการตรวจสอบการเข้าสู่ระบบ SQL Server ทำไมฉันสามารถสร้างการเข้าสู่ระบบ SQL Server เมื่อเซิร์ฟเวอร์ไม่อนุญาตให้พวกเขาเข้าสู่ระบบอยู่นอกเหนือฉัน!
Mark Ireland

ฉันก็นิ่งงันด้วยสิ่งนี้เช่นกัน หากเซิร์ฟเวอร์ไม่อยู่ในโหมดผสมแล้วฉันจะคาดว่าเซิร์ฟเวอร์จะโยนข้อผิดพลาดขณะพยายามสร้างการเข้าสู่ระบบ SQL Auth ที่จะให้เบาะแสผู้ใช้อย่างน้อยแสดงให้เห็นว่าพวกเขาควรเปิดการรับรองความถูกต้องของโหมดผสม
arunsun

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.