Integrated Security = True และ Integrated Security = SSPI แตกต่างกันอย่างไร


531

ฉันมีสองแอพที่ใช้การรักษาความปลอดภัยแบบรวม หนึ่งได้รับมอบหมายในสตริงการเชื่อมต่อและชุดอื่นIntegrated Security = trueIntegrated Security = SSPI

อะไรคือความแตกต่างระหว่างSSPIและtrueในบริบทของ Integrated Security?


70
คำตอบที่ยอมรับไม่ใช่คำตอบที่ดีที่สุด แต่ก็ไม่ถูกต้องเช่นกัน Integrated Security = TrueหรือSSPIไม่เหมือนกัน Integrated Security=true;ไม่สามารถใช้งานได้กับผู้ให้บริการ SQL ทั้งหมด แต่จะมีข้อยกเว้นเมื่อใช้กับOleDbผู้ให้บริการ ดังนั้นจึงIntegrated Security=SSPI;เป็นที่ต้องการเนื่องจากทำงานร่วมกับทั้งSQLClient& OleDBผู้ให้บริการ ฉันได้เพิ่มคำตอบสำหรับการชี้แจงที่ดีขึ้น
ซิงห์

3
@PranavSingh มีความคิดที่ถูกต้องคำถามนี้ไม่สมบูรณ์เว้นแต่คุณจะระบุผู้ให้บริการที่คุณใช้ ผู้ให้บริการที่แตกต่างกันยอมรับและ / หรือแปลสตริงต่าง ๆ เป็นสถานะภายใน
ทำเครื่องหมาย

แม้ว่าพวกเขาจะเหมือนกัน แต่ฉันเชื่อว่ามีเอกสารเก่าแก่ในเว็บไซต์หนึ่งในขณะที่ฉันอยากรู้อยากเห็นเหมือนคุณที่กล่าวว่าถ้าคุณกำลังพัฒนาสำหรับ windows mobile (ไม่ใช่สิ่งที่คุณเห็นในวันนี้อุปกรณ์เก่าที่ฉัน ไม่จำคำต่อท้าย OS เนื่องจากฉันไม่เคยมี) คุณควรใช้ SSPI และรหัสผ่านผู้ใช้ด้วยกัน แต่เนื่องจากฉันไม่เคยเขียนและไม่จำแหล่งที่มาของเอกสารนั้นฉันจึงไม่สามารถรับประกันได้
deadManN

คำตอบ:


436

ตามMicrosoftพวกเขาเป็นสิ่งเดียวกัน

เมื่อfalseระบุ ID ผู้ใช้และรหัสผ่านในการเชื่อมต่อ เมื่อเป็นจริงข้อมูลประจำตัวของบัญชี Windows ปัจจุบันจะใช้สำหรับการตรวจสอบ
ค่าได้รับการยอมรับเป็นtrue, false, yes, noและsspi(ขอแนะนำ) trueซึ่งเทียบเท่ากับ


28
เดิมฉันคิดว่ามีความแตกต่างในการที่ "จริง" ใช้ NTLM และ "SSPI" ใช้ Kerberos แต่ตอนนี้พวกเขาสามารถใช้แทนกันได้
SqlRyan

5
ไม่ได้ตรวจสอบความคิดเห็นล่าสุด แต่ถ้าเป็นจริงควรเป็นคำตอบ แต่ไม่ใช่ความคิดเห็น
Johnny_D

20
@RodneyFoley ขออภัยการทดสอบของฉันยืนยันว่าคำตอบนี้ถูกต้องและความคิดเห็นของคุณไม่ได้ บางทีมันอาจทำงานได้ครั้งเดียว แต่ตอนนี้ไม่ได้และคุณไม่สามารถให้การอ้างอิงถึงเอกสาร Microsoft ที่สนับสนุนความคิดเห็นของคุณ
Kirk Broadhurst

3
เห็นด้วยกับโบสถ์ ผู้ใช้ / รหัสผ่านจะถูกละเว้นเมื่อมีการระบุ SSPI - .net 4.0, SQL server 2012
Alex des Pelagos

3
ดังนั้นหากพวกเขา "เป็นสิ่งเดียวกัน" ทำไมจึงแนะนำ SSPI "อย่างยิ่ง" แทนที่จะเป็น "จริง" หรือ "ใช่" นั่นคือเหตุผลที่ฉันมาที่คำถามนี้ ...
Zé Carlos

171

Integrated Security=true;ไม่สามารถใช้งานได้กับผู้ให้บริการ SQL ทั้งหมด แต่จะมีข้อยกเว้นเมื่อใช้กับOleDbผู้ให้บริการ

ดังนั้นจึงIntegrated Security=SSPI;เป็นที่ต้องการเนื่องจากทำงานร่วมกับทั้งSQLClient& OleDBผู้ให้บริการ

นี่คือชุดของไวยากรณ์แบบเต็มตามMSDN - ไวยากรณ์สตริงการเชื่อมต่อ (ADO.NET)

! [ไวยากรณ์ Windows Auth


73

การใช้ Windows Authentication

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

 Integrated Security = true;
 Integrated Security = SSPI;

แต่เพียงผลงานที่สองกับการให้บริการข้อมูล.NET Framework OleDb หากคุณตั้งค่าIntegrated Security = trueสำหรับ ConnectionString ข้อผิดพลาดจะถูกโยนทิ้ง

เพื่อระบุการรับรองความถูกต้องของ Windows ในผู้ให้บริการข้อมูล NET Framework สำหรับ ODBC คุณควรใช้คู่ของคีย์ - ค่าต่อไปนี้

Trusted_Connection = yes;

ที่มา: MSDN: การทำงานกับ Connection Strings


33

คำถามมากมายจะได้รับคำตอบถ้าเราใช้.Net Reflectorเพื่อดูรหัสจริงของSqlConnection:) trueและsspiเหมือนกัน:

internal class DbConnectionOptions

...

internal bool ConvertValueToIntegratedSecurityInternal(string stringValue)
{
    if ((CompareInsensitiveInvariant(stringValue, "sspi") || CompareInsensitiveInvariant(stringValue, "true")) || CompareInsensitiveInvariant(stringValue, "yes"))
    {
        return true;
    }
}

...

แก้ไข 20.02.2018 ขณะนี้อยู่ใน. Net Core เราสามารถเห็นโอเพ่นซอร์สบน gitHub! ค้นหา ConvertValueToIntegratedSecurityInternal วิธีการ:

https://github.com/dotnet/corefx/blob/fdbb160aeb0fad168b3603dbdd971d568151a0c8/src/System.Data.SqlClient/src/System/Data/Common/DbConnectionOptions.cs


2
ConvertValueToIntegratedSecurityInternalส่วนหนึ่งของรหัสที่เป็นทรัพย์สินเฉพาะกรณีหนึ่งที่อธิบายได้โดยใช้ชื่อ ทรัพย์สินที่จะใช้เฉพาะเมื่อผู้ให้บริการเป็นSqlClientดังนั้นในSqlClient, SSPIและtrueจะเหมือนกัน แต่ไม่เมื่อไคลเอ็นต์หรือOleDb OracleClientฉันได้ชี้แจงว่าในstackoverflow.com/a/23637478/704008พร้อมการอ้างอิง
msdn

ลงคะแนนให้เหตุผลของปรา ณ ที่นี่
Scott

21

Integrated Security = False: ID ผู้ใช้และรหัสผ่านถูกระบุในการเชื่อมต่อ Integrated Security = true: ข้อมูลรับรองบัญชี Windows ปัจจุบันใช้สำหรับการตรวจสอบสิทธิ์

Integrated Security = SSPI: สิ่งนี้เทียบเท่ากับจริง

เราสามารถหลีกเลี่ยงแอตทริบิวต์ชื่อผู้ใช้และรหัสผ่านจากสายอักขระการเชื่อมต่อและใช้การรักษาความปลอดภัยแบบรวม


13

ผมขอเริ่มด้วย Integrated Security = false

false ID ผู้ใช้และรหัสผ่านถูกระบุในสตริงการเชื่อมต่อ
true ใช้ข้อมูลรับรองบัญชี Windows สำหรับการตรวจสอบ

ค่าได้รับการยอมรับเป็นtrue, false, yes, และnoSSPI

ถ้าUser IDและPasswordมีการระบุและการรักษาความปลอดภัยแบบบูรณาการมีการตั้งค่าtrueแล้วUser IDและPasswordจะได้รับการปฏิเสธและการรักษาความปลอดภัยแบบบูรณาการจะนำมาใช้


7

โปรดทราบว่าสตริงการเชื่อมต่อมีความเฉพาะกับสิ่งที่และวิธีที่คุณเชื่อมต่อกับข้อมูล สิ่งเหล่านี้กำลังเชื่อมต่อกับฐานข้อมูลเดียวกัน แต่ตัวแรกกำลังใช้. NET Framework Data Provider สำหรับ SQL Server Integrated Security = True จะไม่ทำงานสำหรับ OleDb

  • แหล่งข้อมูล = .; แคตาล็อกเริ่มต้น = aspnetdb ความปลอดภัยรวม = True
  • Provider = SQLOLEDB; Data Source = .; Integrated Security = SSPI; Catalog เริ่มต้น = aspnetdb

เมื่อมีข้อสงสัยให้ใช้การเชื่อมต่อข้อมูล Visual Studio Server Explorer



2

ในมุมมองของฉัน

หากคุณไม่ใช้ Integrated security = SSPI คุณต้อง hardcode ชื่อผู้ใช้และรหัสผ่านในสตริงการเชื่อมต่อซึ่งหมายความว่า "ค่อนข้างไม่ปลอดภัย" เพราะเหตุใดพนักงานทุกคนมีสิทธิ์เข้าถึงแม้แต่พนักงานเก่าก็สามารถใช้ข้อมูลที่ประสงค์ร้ายได้


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