SQL Server ไปยัง SQL Server เชื่อมโยงการตั้งค่าเซิร์ฟเวอร์


25

โปรดอธิบายสิ่งที่จำเป็นในการตั้งค่าเซิร์ฟเวอร์ SQL Server ที่เชื่อมโยง

เซิร์ฟเวอร์ A คือการเข้าสู่ระบบ Windows 2005 ของ Windows เท่านั้นเซิร์ฟเวอร์ B เหมือนกัน (การเข้าสู่ระบบ Windows 2005 ของ Windows เท่านั้น)

เซิร์ฟเวอร์ A รัน windows XP Server B รัน Windows Server 2003

บริการ SQL Server ทั้งสองทำงานภายใต้บัญชีโดเมนเดียวกัน ฉันลงชื่อเข้าใช้เวิร์กสเตชันด้วยบัญชีโดเมนที่มีสิทธิ์ระดับผู้ดูแลระบบในทั้งเซิร์ฟเวอร์ SQL

หมายเหตุสิ่งเหล่านี้เป็นทั้ง SQL Server 2005 SP2 - ฉันมีโปรแกรมแก้ไขด่วนรุ่นเก่าที่ชี้ให้เห็น แต่มีการใช้งานแล้ว

ปัญหาที่ฉันมีคือข้อผิดพลาดนี้: "การเข้าสู่ระบบล้มเหลวสำหรับผู้ใช้ 'NT AUTHORITY \ ANONYMOUS LOGON' (Microsoft SQL Server, ข้อผิดพลาด: 18456)"

คำตอบ:


18

จากความเข้าใจของฉันเกี่ยวกับปัญหานี้เป็นปัญหา "HOP"

เช่นคุณกำลังพยายามใช้เซิร์ฟเวอร์ A เพื่อส่งต่อรายละเอียดการเข้าสู่ระบบของคุณ (ด้วย SSPI) ไปยังเซิร์ฟเวอร์ B

ใน SQL Server 2005 พวกเขาได้เพิ่มปัญหาด้านความปลอดภัยจำนวนมากซึ่งทำให้สิ่งนี้ยากกว่าที่ควรจะเป็น คำว่า "การรับรองความถูกต้องของ Kerberos" จะกลายเป็นข้อ จำกัด ของชีวิตส่วนใหญ่ของ sys-admins / DBA มันใช้อย่างมีประสิทธิภาพสำหรับการตรวจสอบผ่าน

นี่คือพื้นฐานของสิ่งที่คุณต้องการ 1) ต้องติดตั้งเซิร์ฟเวอร์ (A และ B) ใน Active Directory (AD) โดยเปิดใช้งานการมอบหมายสำหรับ Kerberos (นี่คือการตั้งค่าผ่านแผงผู้ดูแลระบบไดเรกทอรีที่ใช้งานอยู่ของคุณ)

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

3) เซิร์ฟเวอร์จำเป็นต้องกำหนด SPN สำหรับอินสแตนซ์และ HOST และชื่อเครื่อง (การใช้เครื่องมือที่เรียกว่า SetSPN ในเครื่องมือสนับสนุน windows)

เครื่องมือสนับสนุน (SetSPN อยู่ในชุดนี้) http://www.microsoft.com/downloads/details.aspx?FamilyID=96a35011-fd83-419d-939b-9a772ea2df90&DisplayLang=th

(ภาพรวมของวิธีเพิ่ม SPN) http://technet.microsoft.com/en-us/library/bb735885.aspx

4) คุณอาจต้องตั้งค่าฐานข้อมูลของคุณเป็น "เชื่อถือได้"

การเปลี่ยนแปลงฐานข้อมูลชุดที่เชื่อถือได้บน

5) หลังจากที่คุณทำสิ่งนี้เสร็จสิ้นให้รีสตาร์ทอินสแตนซ์ของคุณ

6) จากนั้นลองสร้างเซิร์ฟเวอร์ที่เชื่อมโยงของคุณอีกครั้ง

ในที่สุดคุณสามารถทดสอบการเชื่อมต่อกับ SQL Server สิ่งนี้จะทำงานได้ดีหากคุณกำหนดค่าทั้งหมดถูกต้อง

SELECT *
FROM OPENDATASOURCE('SQLNCLI',
    'Data Source=ServerB;Integrated Security=SSPI;'
    ).MASTER.dbo.syscolumns

นี่จะบอกประเภทการตรวจสอบการเชื่อมต่อของคุณ

select auth_scheme from sys.dm_exec_connections where session_id=@@SPID

คุณต้องการรับ 'KERBEROS' ที่นี่และไม่ใช่ 'NTLM'

มันคือความชันลื่น KERBEROS และการมอบหมาย Pass-through ติดกับมันและในที่สุดคุณก็จะค้นพบมัน

การอ้างอิง Kerberos http://blogs.msdn.com/sql_protocols/archive/2005/10/12/479871.aspx

http://blogs.msdn.com/sql_protocols/archive/2006/12/02/understanding-kerberos-and-ntlm-authentication-in-sql-server-connections.aspx

http://blogs.iis.net/brian-murphy-booth/archive/2007/03/09/the-biggest-mistake-serviceprincipalname-s.aspx

อาการอื่น ๆ ของปัญหา http://www.sqlservercentral.com/Forums/Topic460425-359-1.aspx

http://msdn2.microsoft.com/en-us/library/aa905162(sql.80).aspx

http://msdn2.microsoft.com/en-us/library/ms189580.aspx

ฉันหวังว่าทั้งหมดนี้จะช่วย


คำตอบที่ดี! นี่สรุปการโหลดข้อมูลที่ไม่ได้จัดระเบียบอย่างเป็นประโยชน์ในที่อื่น ๆ
ConstantineK

3

คุณยังสามารถใช้ Studio จัดการเซิร์ฟเวอร์ SQL (SSMS) เพื่อจัดการ \ สร้างเซิร์ฟเวอร์ที่เชื่อมโยงได้เช่นกันหากคุณคุ้นเคยกับ GUI โดยทำดังนี้

  1. เรียกใช้ SSMS และเชื่อมต่อกับอินสแตนซ์หนึ่งของ SQL Server ที่คุณต้องการเชื่อมโยง
  2. ขยาย "เซิร์ฟเวอร์วัตถุ" ใน Object Explorer
  3. คลิกขวาที่ "เซิร์ฟเวอร์ที่เชื่อมโยง" และเลือก "เซิร์ฟเวอร์ที่เชื่อมโยงใหม่"
  4. ในช่องโต้ตอบ "เซิร์ฟเวอร์ที่เชื่อมโยงใหม่" ให้เลือก "SQL Server" เป็นประเภทเซิร์ฟเวอร์และป้อนอินสแตนซ์ของ SQL Server ที่คุณต้องการเชื่อมโยง
  5. ในหน้า "ความปลอดภัย" เลือกวิธีที่ผู้ใช้จะตรวจสอบสิทธิ์จากเซิร์ฟเวอร์ปัจจุบันไปยังเซิร์ฟเวอร์ที่เชื่อมโยง คุณระบุว่าเซิร์ฟเวอร์ทั้งสองนั้นได้รับการตั้งค่าให้ใช้ Windows Logins หากเป็นกรณีตามมาตราที่มีข้อความนี้"สำหรับการเข้าสู่ระบบไม่ได้กำหนดไว้ในรายการดังกล่าวข้างต้นจะเชื่อมต่อ:"ผมอาจจะเลือกตัวเลือกที่มีข้อความว่า"จะทำโดยใช้บริบทการรักษาความปลอดภัยของการเข้าสู่ระบบในปัจจุบัน"

โปรดทราบว่านี่ถือว่าผู้ใช้ที่มีการเข้าสู่ระบบบนเซิร์ฟเวอร์ A ยังมีการเข้าสู่ระบบบนเซิร์ฟเวอร์ B


1

ฉันจะถั่วกับปัญหาเดียวกัน! ฉันจำได้ว่าการทำเช่นนี้กับปี 2000 นั้นง่ายเสมอ ฉันใช้งาน google ไปหมดแล้วฉันไม่สามารถทำงานได้ การตั้งค่าแบบเดียวกันแน่นอนทั้งเซิร์ฟเวอร์ที่ทำงานในบัญชีโดเมน Windows auth

ฉันพยายามใช้ชื่อ pipes แทน TCP และอย่างน้อยฉันก็พบข้อผิดพลาดอื่น:

EXEC sp_addlinkedserver 
    @server='statler', 
    @srvproduct='', 
    @provider='SQLNCLI', 
    @datasrc='np:statler', 
    @provstr='Integrated Security=SSPI'

-- Then I try this:
select net_transport, auth_scheme 
from statler.master.sys.dm_exec_connections 
where session_id=@@spid

/*

Getting closer, but still fails:

OLE DB provider "SQLNCLI" for linked server "statler" returned message 
    "Login timeout expired".
OLE DB provider "SQLNCLI" for linked server "statler" returned message 
    "An error has occurred while establishing a connection to the server. 
    When connecting to SQL Server 2005, this failure may be caused by the 
    fact that under the default settings SQL Server does not allow 
    remote connections.".
Msg 5, Level 16, State 1, Line 0
Named Pipes Provider: Could not open a connection to SQL Server [5]. 
OLE DB provider "SQLNCLI" for linked server "statler" returned message 
    "Invalid connection string attribute".

*/

สิ่งนี้อาจเกี่ยวข้องกับการเปิดใช้งานชื่อ pipes แต่ฉันสามารถเชื่อมต่อผ่าน sqlcmd จากเซิร์ฟเวอร์ A ไปยังเซิร์ฟเวอร์ B ดังนี้:

WALDORF:>  Sqlcmd.exe /E /Snp:statler

ถ้าฉันไม่ใช้ชื่อ pipes และทำ:

New Linked Server
Server Type: SqlServer
Security: be made using the current login's security context

ฉันได้รับสิ่งนี้:

Login failed for user NT AUTHORITY\ANONYMOUS LOGIN

[แก้ไข]ฉันเริ่มการสนทนากับเซิร์ฟเวอร์กลางของ SQL เกี่ยวกับเรื่องนี้ โดยทั่วไปคุณต้องทำการกำหนดค่าที่ซับซ้อนบางอย่างที่เกี่ยวข้องกับการมอบหมาย Kerberos เพื่อให้สิ่งนี้ใช้งานได้

http://www.sqlservercentral.com/Forums/Topic574262-146-1.aspx

ฉันตัดสินใจที่จะสร้างบัญชีการเข้าใช้งาน SQL แบบ จำกัด เดียวเพื่อจัดการกับคำค้นหาที่เชื่อมโยง ฉันเกลียดการใช้วิธีนี้ แต่ดูเหมือนว่าปลอดภัยกว่าการเปลี่ยนแปลงที่คุณต้องทำเพื่อให้มันทำงานกับ windows auth ได้


ดูการตั้งค่า Kerberos ที่ซับซ้อนด้านล่าง สิ่งนี้ฆ่าฉันมานานแล้ว!
evilhomer

0

หากคุณทำการค้นหาด้วย sp_addlinkedserver และ sp_linkedservers คุณจะได้รับตัวอย่าง มันค่อนข้างตรงไปตรงมาในการตั้งค่า


0

นอกจากนี้หากคุณมี SQL Manager คุณสามารถเพิ่มด้วย GUI ได้

โดยทั่วไปคุณจำเป็นต้องเชื่อมโยงเซิร์ฟเวอร์ทั้งสองโดย SP ที่กล่าวถึงโดย Tim หรือผ่าน GUI และจากนั้นตั้งกฎการเข้าถึง


0

ฉันรู้ว่ามันควรจะง่าย แต่ก็ไม่ได้ผลสำหรับฉันเลย - ฉันมีปัญหาด้านความปลอดภัยที่นี่ ดังนั้นฉันต้องการให้ใครบางคนสะกดขั้นตอนสำหรับฉัน

ฉันเคยทำสิ่งนี้มาแล้วใน SQL 2000 โดยไม่มีปัญหา


0

ดังนั้นคุณสามารถเชื่อมโยงได้ แต่ไม่สามารถดำเนินการค้นหาได้เนื่องจากบัญชีผิด

ผู้ใช้ windows ที่คุณพยายามใช้มีสิทธิ์อ่านข้อมูลบนเซิร์ฟเวอร์ทั้งสองหรือไม่

เมื่อฉันยังมีปัญหาเพราะคุณสมบัติ "การเข้าถึงข้อมูล" ถูกตั้งค่าเป็นเท็จด้วยเหตุผลที่ไม่ทราบสาเหตุ

ลองใช้สิ่งที่เกิดขึ้นหากคุณกำหนดผู้ใช้หนึ่งรายเป็นผู้ใช้อื่นสำหรับลิงก์

(สิ่งเหล่านี้สามารถทำได้ใน SQL Manager)


0

ทิมได้โพสต์ขั้นตอนที่แน่นอนที่ฉันคิดว่าเป็นขั้นตอนที่ถูกต้อง ขั้นตอนที่ 5 คือหน้าความปลอดภัย ฉันเลือก "ทำโดยใช้บริบทความปลอดภัยปัจจุบันของการเข้าสู่ระบบ"

เมื่อฉันคลิกตกลงฉันได้รับข้อผิดพลาดต่อไปนี้ ฉันไม่รู้ว่าทำไมจึงพยายามใช้ 'การเข้าสู่ระบบ NT Authority \ Anonymous' ฉันลงชื่อเข้าใช้เวิร์กสเตชันด้วยบัญชีโดเมนของฉันซึ่งมีสิทธิ์ทั้งหมดในเซิร์ฟเวอร์ทั้งสอง

TITLE: Microsoft SQL Server Management Studio

"เซิร์ฟเวอร์ที่เชื่อมโยงถูกสร้างขึ้น แต่ไม่ผ่านการทดสอบการเชื่อมต่อคุณต้องการเก็บเซิร์ฟเวอร์ที่เชื่อมโยงไว้หรือไม่"

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

มีข้อยกเว้นเกิดขึ้นขณะดำเนินการคำสั่งหรือชุดงาน Transact-SQL (Microsoft.SqlServer.ConnectionInfo)


การเข้าสู่ระบบล้มเหลวสำหรับผู้ใช้ 'NT AUTHORITY \ ANONYMOUS เข้าสู่ระบบ' (Microsoft SQL Server ข้อผิดพลาด: 18456)

สำหรับความช่วยเหลือคลิก: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=09.00.3068&EvtSrc=MSSQLServer&EvtID=18456&LinkId=20476


0

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

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