การแก้ไข: คุณได้รับข้อความแสดงข้อผิดพลาด "ไม่สามารถสร้างบริบท SSPI" เมื่อคุณพยายามเชื่อมต่อกับคอมพิวเตอร์ที่เป็นเซิร์ฟเวอร์ SQL Server 2000 SP3


สรุป


เมื่อคุณพยายามที่จะเชื่อมต่อจากคอมพิวเตอร์แบบไคลเอ็นต์คอมพิวเตอร์ที่เป็นเซิร์ฟเวอร์ Microsoft SQL Server 2000 Service Pack 3 (SP3) การเชื่อมต่อล้มเหลว ด้วยข้อผิดพลาดถ้าไม่สามารถแก้ไขชื่อเซิร์ฟเวอร์จากอยู่อินเทอร์เน็ตโพรโทคอล (IP) ของคุณ ลักษณะการทำงานนี้เกิดขึ้นเนื่องจาก SQLOLEDB แปลค่าที่ส่งกลับของฟังก์ชัน ConnectionGetSvrUser ของ dbnetlib ไม่ถูกต้อง
  • โปรแกรมแก้ไขด่วนสามารถแก้ไขปัญหานี้
  • เมื่อต้องการหลีกเลี่ยงปัญหานี้ ด้วยตนเองสร้างโฮสต์รายการสำหรับอยู่ IP ในคอมพิวเตอร์ไคลเอนต์
  • เมื่อต้องการทบทวนเกิดปัญหา สร้าง และตั้งค่าคอนฟิกอยู่ IP แบบไดนามิกของเครื่องเซิร์ฟเวอร์ และ แล้ว เชื่อมต่อกับคอมพิวเตอร์เซิร์ฟเวอร์ โดยใช้ตัววิเคราะห์คำถาม SQL หรือแสดงแถวจากคอมพิวเตอร์แบบไคลเอ็นต์

อาการ


เมื่อคุณพยายามที่จะเชื่อมต่อคอมพิวเตอร์แบบไคลเอ็นต์ไปยังคอมพิวเตอร์ที่เป็นเซิร์ฟเวอร์ Microsoft SQL Server 2000 SP3 ชื่อเซิร์ฟเวอร์ไม่สามารถแก้ไขจากอยู่อินเทอร์เน็ตโพรโทคอล (IP) และการเชื่อมต่อล้มเหลว

เมื่อคุณเชื่อมต่อคอมพิวเตอร์กับตัววิเคราะห์คำถาม SQL server SQL Server 2000 SP3 คุณได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้:
เซิร์ฟเวอร์: ข่าวสารเกี่ยวกับ 11004 ระดับ 16 สถานะ 1
[Microsoft] [โปรแกรมควบคุมเซิร์ฟเวอร์ ODBC SQL] ไม่สามารถสร้างบริบท SSPI
เมื่อคุณใช้แบบ SQL เซิร์ฟเวอร์ OLE DB ผู้ให้บริการ (SQLOLEDB) เพื่อเชื่อมต่อกับคอมพิวเตอร์ที่เป็นเซิร์ฟเวอร์ SQL Server 2000 โดยใช้ตัวแสดงแถว คุณได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้:
แหล่งที่มา: "Microsoft OLE DB ผู้ให้บริการสำหรับ SQL Server"

อินเทอร์เฟซ: IID_IDBInitialize
ผลลัพธ์: 0x80004005 = E_FAIL

ISQLErrorInfo: [HY000] [0x00002afc]
IErrorInfo: [0x00002afc] "ไม่สามารถสร้างบริบท SSPI"

แฟ้ม: D:\MDACTools\rowsetviewer\CBase.cpp
บรรทัด: 1067

สาเหตุ


เมื่อ SQLOLEDB เรียกฟังก์ชันConnectionGetSvrUserของไลบรารี dbnetlib นั้นไม่ถูกต้องแปลที่ฟังก์ชันนี้ส่งกลับค่าบูลีน' ฟังก์ชันConnectionGetSvrUserถูกออกแบบมาเพื่อส่งกลับเป็นโมฆะ ดังนั้น สิ่งที่อยู่ในการลงทะเบียน EAX กลายเป็น ค่าที่ส่งคืน


ฟังก์ชันConnectionGetSvrUserเรียกฟังก์ชันgethostbyaddrภายใน ฟังก์ชันgethostbyaddrได้รับชื่อโฮสต์ที่สอดคล้องกับที่อยู่ IP เฉพาะ ถ้าฟังก์ชันgethostbyaddrล้มเหลว จะส่งกลับอักขระที่เป็นศูนย์เพื่อลงทะเบียน EAX ดังนั้น ฟังก์ชันConnectionGetSvrUserส่งกลับค่าFALSE ลักษณะการทำงานนี้ทำให้เกิดความล้มเหลวในการเข้าสู่ระบบไปยังคอมพิวเตอร์เซิร์ฟเวอร์ SQL Server 2000 SP3


การแก้ปัญหา


มีโปรแกรมแก้ไขด่วนที่รองรับพร้อมให้บริการจาก Microsoft อย่างไรก็ตาม โปรแกรมแก้ไขด่วนนี้มุ่งหวังเพื่อการแก้ไขเฉพาะปัญหาที่อธิบายไว้ในบทความนี้ ใช้ hotfix นี้เฉพาะกับระบบต่าง ๆ ที่พบปัญหานี้

หากโปรแกรมแก้ไขด่วนพร้อมสำหรับการดาวน์โหลด คุณจะเห็นส่วน "มีโปรแกรมแก้ไขด่วนพร้อมสำหรับการดาวน์โหลด" ที่ด้านบนของบทความฐานข้อมูลองค์ความรู้นี้ หากส่วนนี้ไม่ปรากฏขึ้น ส่งคำขอถึงฝ่ายบริการและการสนับสนุนลูกค้าของ Microsoft และวิธีการขอรับโปรแกรมแก้ไขด่วน

หมายเหตุ ถ้ามีปัญหาอื่น ๆ เกิดขึ้น หรือถ้าจำเป็นต้องแก้ไขปัญหาใด ๆ คุณอาจต้องสร้างคำขอรับบริการแยกต่างหาก จะมีค่าใช้จ่ายในการสนับสนุนปกติกับคำถามเพิ่มเติมและเรื่องอื่น ๆ ที่ไม่มีสิทธิได้รับโปรแกรมแก้ไขด่วนเฉพาะนี้ สำหรับรายชื่อทั้งหมด ของหมายเลขโทรศัพท์ของฝ่ายบริการลูกค้าของ Microsoft และการสนับสนุน หรือ เพื่อสร้างการร้องขอบริการแยกต่างหาก แวะไปที่เว็บไซต์ต่อไปนี้ของ Microsoft:หมายเหตุ แบบฟอร์ม "มีโปรแกรมแก้ไขด่วนพร้อมสำหรับการดาวน์โหลด" แสดงภาษาที่โปรแกรมแก้ไขด่วนพร้อมใช้งาน ถ้าคุณไม่เห็นภาษาของคุณ อาจเป็น เพราะไม่มีโปรแกรมแก้ไขด่วนพร้อมใช้งานสำหรับภาษานั้น รุ่นแบบภาษาอังกฤษของ hotfix นี้มีแอตทริบิวต์ของแฟ้ม (หรือรุ่นที่ใหม่กว่า) ซึ่งแสดงอยู่ในตารางต่อไปนี้ วันและเวลาสำหรับแฟ้มเหล่านี้จะแสดงรายการในเวลามาตรฐานสากล (UTC) เมื่อคุณดูข้อมูลแฟ้ม ระบบจะแปลงข้อมูลนี้เป็นเวลาท้องถิ่น เมื่อต้องการค้นหาความแตกต่างระหว่างเวลา UTC กับเวลาท้องถิ่น ให้ใช้แท็บโซนเวลาในเครื่องมือ'วันและเวลา'ใน'แผงควบคุม'
  Date         Time   Version            Size    File name
--------------------------------------------------------------

15-Jun-2004 00:22 2000.85.1045.0 28,672 Dbnmpntw.dll
15-Jun-2004 00:21 2.80.1045.0 147,456 Msadds.dll
15-Jun-2004 00:21 2.80.1045.0 512,000 Msado15.dll
15-Jun-2004 00:21 2.80.1045.0 163,840 Msadomd.dll
15-Jun-2004 00:21 2.80.1045.0 184,320 Msadox.dll
15-Jun-2004 00:21 2.80.1045.0 53,248 Msadrh15.dll
15-Jun-2004 00:21 2.80.1045.0 225,280 Msdaora.dll
15-Jun-2004 00:21 2.80.1045.0 147,456 Msdart.dll
15-Jun-2004 00:21 2.575.1045.0 139,264 Msorcl32.dll
15-Jun-2004 00:21 3.525.1045.0 221,184 Odbc32.dll
15-Jun-2004 00:22 2000.85.1045.0 24,576 Odbcbcp.dll
15-Jun-2004 00:21 2.80.1045.0 442,368 Oledb32.dll
15-Jun-2004 00:21 2000.85.1045.0 503,808 Sqloledb.dll
15-Jun-2004 00:21 2000.85.1045.0 401,408 Sqlsrv32.dll
15-Jun-2004 00:08 2000.85.1045.0 208,896 Sqlxmlx.dll


วิธีแก้ปัญหา


เมื่อต้องการหลีกเลี่ยงปัญหานี้ ด้วยตนเองสร้างรายการโฮสต์บนคอมพิวเตอร์ไคลเอนต์สำหรับอยู่ IP ที่คุณต้องการเชื่อมต่อ
  1. เริ่ม Windows Explorer
  2. ค้นหาไฟล์ Hosts และจากนั้น เปิดแฟ้มใน notepad

    หมายเหตุ คุณสามารถค้นหาแฟ้มในเส้นทาง %SystemRoot%\System32\Drivers\Etc
  3. เพิ่มต่อไปนี้ที่ส่วนท้ายของแฟ้ม:
    IP แบบสุ่ม ชื่อคอมพิวเตอร์

    หมายเหตุ IP แบบสุ่มคือ ตัวยึดสำหรับอยู่ IP ที่ถูกใช้โดยคอมพิวเตอร์เครื่องอื่นในเครือข่ายไม่ ชื่อคอมพิวเตอร์คือ ตัวยึดสำหรับชื่อของคอมพิวเตอร์ที่มี SP3 2000 เซิร์ฟเวอร์ SQL ที่ทำงานได้กับ ต้องคั่น ด้วยช่องว่างอย่างน้อยหนึ่งอยู่IP แบบสุ่มIP และชื่อคอมพิวเตอร์
  4. บนเมนูแฟ้มคลิกบันทึก
  5. ปิดแฟ้ม

สถานะ


Microsoft ยืนยันว่านี่เป็นปัญหาในผลิตภัณฑ์ของ Microsoft ซึ่งแสดงไว้ในส่วน "นำไปใช้กับ"

ข้อมูลเพิ่มเติม


ขั้นตอนในการทบทวนเกิดปัญหา

การตั้งค่าคอนฟิกอยู่ IP แบบไดนามิก

  1. เข้าสู่ระบบในฐานะผู้ดูแลระบบไปยังคอมพิวเตอร์ที่กำลังเรียกใช้ SQL Server 2000 SP3
  2. ในแผงควบคุม คลิกสองครั้งที่การเชื่อมต่อเครือข่าย
  3. คลิกสองครั้งที่การเชื่อมต่อเครือข่ายท้องถิ่นที่คุณต้องการปรับเปลี่ยน
  4. ในกล่องโต้ตอบสถานะการเชื่อมต่อพื้นที่ท้องถิ่นคลิกคุณสมบัติ กล่องโต้ตอบคุณสมบัติการเชื่อมต่อพื้นที่ภายในเครื่องปรากฏขึ้น
  5. ในกล่องการเชื่อมต่อนี้ใช้รายการต่อไปนี้คลิกInternet Protocol (TCP/IP), และจากนั้น คลิกคุณสมบัติ กล่องโต้ตอบคุณสมบัติของ Internet Protocol (TCP/IP)ปรากฏขึ้น
  6. คลิกรับอยู่ IP โดยอัตโนมัติและจากนั้น คลิกตกลง
  7. ในกล่องโต้ตอบคุณสมบัติการเชื่อมต่อพื้นที่ท้องถิ่นคลิกปิด

  8. ในกล่องโต้ตอบสถานะการเชื่อมต่อพื้นที่ท้องถิ่นคลิกปิด
  9. คลิกเริ่มคลิกเรียกใช้พิมพ์cmdแล้ว คลิ กตกลง
  10. ที่พรอมต์คำสั่ง พิมพ์pingชื่อคอมพิวเตอร์และจากนั้น กด ENTER

    หมายเหตุ ชื่อคอมพิวเตอร์คือ ตัวยึดสำหรับชื่อของคอมพิวเตอร์ที่กำลังเรียกใช้ SQL Server 2003

    คุณได้รับข้อความแสดงข้อผิดพลาดที่คล้ายกับต่อไปนี้:
    ตรวจสอบสถานะชื่อคอมพิวเตอร์[IP แบบไดนามิก] มีข้อมูล 32 ไบต์:

    ข้อความตอบกลับจากIP แบบไดนามิก: ไบต์ =เวลา 32 < 1ms TTL = 128
    ข้อความตอบกลับจากIP แบบไดนามิก: ไบต์ =เวลา 32 < 1ms TTL = 128
    ข้อความตอบกลับจากIP แบบไดนามิก: ไบต์ =เวลา 32 < 1ms TTL = 128

    สถิติ Ping สำหรับIP แบบไดนามิก:
    แพคเก็ต: ส่ง = 4 ได้รับ = 4, Lost = 0 (สูญเสีย 0%),
    ประมาณการเดินทางรอบเวลาเป็นวินาที milli:
    ค่าต่ำสุด = 0ms สูงสุด = 0ms ค่าเฉลี่ย = 0ms
    หมายเหตุ IP แบบไดนามิกคือ ตัวยึดสำหรับ IP แบบไดนามิกของชื่อเครื่องคอมพิวเตอร์
  11. เมื่อต้องการออกจากพร้อมรับคำสั่ง พิมพ์exitและจากนั้น กด ENTER
  12. ทำซ้ำขั้นตอน c ถึง e. คลิกใช้ที่อยู่ IP ต่อไปนี้
  13. ในกล่องที่อยู่ IPพิมพ์อยู่IP แบบไดนามิก

    หมายเหตุ IP แบบไดนามิกคือ ตัวยึดสำหรับ IP แบบไดนามิกของชื่อเครื่องคอมพิวเตอร์
  14. ในกล่องซับเน็ตมาสก์พิมพ์ซับเน็ตมาสก์สำหรับเครือข่ายของคุณ
  15. ในกล่องเกตเวย์เริ่มต้นพิมพ์อยู่ IP ของคอมพิวเตอร์ หรืออุปกรณ์บนเครือข่ายที่เชื่อมต่อกับเครือข่ายของคุณ กับเครือข่ายอื่น หรืออินเทอร์เน็ต
  16. ในกล่องเซิร์ฟเวอร์ DNS ที่ต้องการพิมพ์อยู่ IP ของคอมพิวเตอร์ที่แก้ชื่อโฮสต์ไปยังที่อยู่ IP
  17. ในกล่องเซิร์ฟเวอร์ DNS สำรองพิมพ์อยู่ IP ของคอมพิวเตอร์ DNS ที่คุณต้องการใช้หากเซิร์ฟเวอร์ DNS (ระบบชื่อโดเมน) กลายเป็นไม่พร้อมใช้งาน
  18. คลิก'ขั้นสูง' การตั้งค่า TCP/IP ขั้นสูงปรากฏขึ้น
  19. ภายใต้IP แอดเดรสคลิกเพิ่ม กล่องโต้ตอบที่อยู่ TCP/IPปรากฏขึ้น
  20. ในกล่องที่อยู่ IPพิมพ์ที่อยู่IP แบบสุ่ม

    หมายเหตุ IP แบบสุ่มคือ ตัวยึดสำหรับอยู่ IP ที่ถูกใช้โดยคอมพิวเตอร์เครื่องอื่นในเครือข่ายไม่
  21. ในกล่องซับเน็ตมาสก์พิมพ์ซับเน็ตมาสก์สำหรับเครือข่าย และจากนั้น คลิกเพิ่ม
  22. ในการตั้งค่า TCP/IP ขั้นสูงคลิกตกลง
  23. ในคุณสมบัติของ Internet Protocol (TCP/IP)คลิกตกลง ในกล่องโต้ตอบคุณสมบัติการเชื่อมต่อพื้นที่ท้องถิ่นคลิกปิด ในกล่องโต้ตอบสถานะการเชื่อมต่อพื้นที่ท้องถิ่นคลิกปิด

เชื่อมต่อกับคอมพิวเตอร์เซิร์ฟเวอร์ SQL Server 2000 SP3 จากคอมพิวเตอร์แบบไคลเอ็นต์โดยใช้ตัววิเคราะห์คำถาม SQL

  1. เริ่มตัววิเคราะห์คำถาม SQL กล่องโต้ตอบการเชื่อมต่อกับ SQL Serverปรากฏขึ้น
  2. ในกล่องเซิร์ฟเวอร์ SQLพิมพ์IP แบบสุ่ม

    หมายเหตุ IP แบบสุ่มคือ ตัวยึดสำหรับอยู่ IP ที่ถูกใช้โดยคอมพิวเตอร์เครื่องอื่นในเครือข่ายไม่
  3. ภายใต้การเชื่อมต่อโดยใช้คลิกรับรองความถูกต้องของ Windows
  4. คลิก ตกลง คุณสังเกตเห็นข้อความแสดงข้อผิดพลาดที่กล่าวถึงในส่วน "อาการ"

เชื่อมต่อกับคอมพิวเตอร์เซิร์ฟเวอร์ SQL Server 2000 SP3 จากคอมพิวเตอร์แบบไคลเอ็นต์โดยใช้ตัวแสดงแถว

  1. เริ่ม Viewer แถว หน้าต่างMicrosoft OLE DB RowsetViewerปรากฏขึ้น
  2. บนเมนูแฟ้มคลิกการเชื่อมต่อแบบเต็ม กล่องโต้ตอบทั้งหมดเชื่อมต่อ - ไม่มีคำอธิบายปรากฏขึ้น
  3. ในรายการผู้ให้บริการคลิSQLOLEDBภายใต้การเชื่อมต่อ
  4. ในกล่องแหล่งข้อมูลพิมพ์IP สุ่มภายใต้ต้นฉบับ

    หมายเหตุ IP แบบสุ่มคือ ตัวยึดสำหรับอยู่ IP ที่ถูกใช้โดยคอมพิวเตอร์เครื่องอื่นในเครือข่ายไม่
  5. ภายใต้การเข้าสู่ระบบคลิกDBPROMPT_NOPROMPTในรายการพร้อมต์
  6. บนแท็บคุณสมบัติคลิกขั้นสูง กล่องโต้ตอบ' IDBProperties::SetProperties ' ปรากฏขึ้น
  7. คลิกเพื่อเลือกกล่องกาเครื่องหมายDBPROP_AUTH_INTEGRATEDและจากนั้น คลิกตกลง
  8. ในกล่องโต้ตอบทั้งหมดเชื่อมต่อ - ไม่มีคำอธิบายคลิกตกลง คุณสังเกตเห็นข้อความแสดงข้อผิดพลาดที่กล่าวถึงในส่วน "อาการ"
หมายเหตุ คอมพิวเตอร์แบบไคลเอ็นต์และเครื่องเซิร์ฟเวอร์ SQL Server 2000 SP3 ต้องอยู่ในโดเมนเดียวกัน เมื่อคุณพยายามเชื่อมต่อกับคอมพิวเตอร์เซิร์ฟเวอร์ SQL Server 2000 SP3 ด้วยIP แบบสุ่มจากคอมพิวเตอร์เครื่องเดียวกัน จึงเชื่อมต่อกับคอมพิวเตอร์โดยไม่มีข้อผิดพลาดเซิร์ฟเวอร์ SQL Server 2000 SP3

ข้อมูลอ้างอิง


สำหรับข้อมูลเพิ่มเติม โปรดเยี่ยมชมเว็บไซต์ Microsoft Developer Network (MSDN) ต่อไปนี้:
ภาพรวมของ OLE DB เครื่องมือทดสอบ
http://msdn2.microsoft.com/en-us/library/ms721219.aspx
สำหรับข้อมูลเพิ่มเติม คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:

323444วิธีการเปลี่ยนอยู่ IP ของอะแดปเตอร์เครือข่ายใน Windows Server 2003

สำหรับข้อมูลเพิ่มเติม คลิกหมายเลขบทความต่อไปนี้เพื่อดูบทความในฐานความรู้ของ Microsoft:

824684คำอธิบายของคำศัพท์มาตรฐานที่ใช้เพื่ออธิบายปรับปรุงซอฟต์แวร์ของ Microsoft