Thiết lập máy chủ SQL đến máy chủ sql được liên kết


25

Vui lòng giải thích những gì cần thiết để thiết lập máy chủ được liên kết với SQL Server.

Máy chủ A là cửa sổ SQL 2005 chỉ đăng nhập Máy chủ B là giống nhau (chỉ đăng nhập cửa sổ SQL 2005)

Máy chủ A chạy Windows XP Server B chạy Windows Server 2003

Cả hai dịch vụ SQL Server đều đang chạy trong cùng một tài khoản miền. Tôi đang đăng nhập vào máy trạm của mình bằng tài khoản miền có quyền quản trị trên cả Máy chủ SQL.

Lưu ý đây là cả SQL Server 2005 SP2 - Tôi đã có các hotfix cũ được chỉ ra cho tôi, nhưng chúng đã được áp dụng.

Vấn đề tôi gặp phải là lỗi này: "Đăng nhập thất bại cho người dùng 'NT AUTHORITY \ ANONYMOUS LOGON'. (Microsoft SQL Server, Error: 18456)"

Câu trả lời:


18

Theo hiểu biết của tôi về vấn đề này, đó là vấn đề "HOP".

tức là bạn đang cố gắng sử dụng máy chủ A để chuyển tiếp chi tiết đăng nhập của mình (với SSPI) sang Máy chủ B.

Trong SQL Server 2005, họ đã thêm vào toàn bộ các vấn đề bảo mật khiến việc này trở nên khó khăn hơn mức cần thiết. Dòng chữ "Xác thực Kerberos" sẽ trở thành điểm tựa trong cuộc sống của hầu hết các quản trị viên / DBA. Nó có hiệu quả được sử dụng để xác thực thông qua.

Dưới đây là những điều cơ bản của những gì bạn cần. 1) Các máy chủ (A và B) cần được thiết lập trong Active Directory (AD) với ủy quyền cho Kerberos được bật. (điều này được đặt thông qua bảng quản trị thư mục hoạt động của bạn)

2) Tài khoản dịch vụ mà Máy chủ SQL của bạn chạy theo cũng cần phải bật ủy quyền (điều này cũng được đặt thông qua bảng quản trị thư mục hoạt động của bạn). - nếu họ không chạy trong tài khoản dịch vụ, bạn cần tạo một tài khoản.

3) Máy chủ cần phải có SPN được xác định cho thể hiện và HOST và tên máy. (Sử dụng công cụ có tên SetSPN trong các công cụ hỗ trợ của windows)

Công cụ hỗ trợ (SetSPN nằm trong bộ này) http://www.microsoft.com/doads/details.aspx?FamilyID=96a35011-fd83-419d-939b-9a772ea2df90&DisplayLang=en

(Tổng quan về cách thêm SPN) http://technet.microsoft.com/en-us/l Library / bb735885.aspx

4) Bạn có thể cần đặt DB của mình thành "đáng tin cậy"

THAY ĐỔI CÀI ĐẶT THIẾT BỊ đáng tin cậy trên

5) Sau khi bạn hoàn thành tất cả những điều này, hãy khởi động lại phiên bản của bạn.

6) Sau đó thử tạo lại máy chủ được liên kết của bạn.

Cuối cùng, bạn có thể kiểm tra kết nối của mình với SQL Server. Điều này sẽ hoạt động tốt nếu bạn có tất cả cấu hình chính xác.

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

Điều này sẽ cho bạn biết loại xác thực kết nối của bạn.

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

Bạn muốn nhận 'KERBEROS' ở đây chứ không phải 'NTLM'.

Đó là một con dốc nhanh, KERBEROS và phái đoàn xuyên qua, gắn bó với nó và cuối cùng bạn sẽ tìm ra nó.

Tài liệu tham khảo Kerberos http://bloss.msdn.com/sql_prot Protocol / archive / 2005/10/12 / 47871.aspx

http: //bloss.msdn.com/sql_prot Protocol / archive / 2006/12/02 / hiểu-kenberos-and-ntlm-aententication-in-sql-server -connections.aspx

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

Các biểu hiện khác của vấn đề http://www.sqlservercentral.com/Forums/Topic460425-359-1.aspx

http://msdn2.microsoft.com/en-us/l Library / aa905162 (sq.80) .aspx

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

Tôi hy vọng tất cả điều này sẽ giúp.


Câu trả lời chính xác! Điều này chắc chắn tóm tắt một tải thông tin không được tổ chức hữu ích ở những nơi khác.
ConstantineK

3

Bạn cũng có thể sử dụng SQL Server Management Studio (SSMS) để quản lý \ tạo các máy chủ được liên kết nếu bạn thấy thoải mái hơn với GUI. Làm như vậy:

  1. Khởi chạy SSMS và kết nối với một trong các phiên bản của SQL Server mà bạn muốn liên kết
  2. Mở rộng "Đối tượng máy chủ" trong Object Explorer
  3. Nhấp chuột phải vào "Máy chủ được liên kết" và chọn "Máy chủ được liên kết mới"
  4. Trên hộp thoại "Máy chủ được liên kết mới", chọn "Máy chủ SQL" làm Loại máy chủ và nhập phiên bản của SQL Server mà bạn muốn liên kết đến.
  5. Trên trang "Bảo mật", chọn cách người dùng sẽ xác thực từ máy chủ hiện tại đến máy chủ được liên kết. Bạn đã đề cập đến cả hai máy chủ được thiết lập để sử dụng Đăng nhập Windows. Nếu đây là trường hợp, trong phần có nhãn "Đối với thông tin đăng nhập không được xác định trong danh sách trên, các kết nối sẽ:" Tôi có thể sẽ chọn tùy chọn có nhãn "Được thực hiện bằng bối cảnh bảo mật hiện tại của Đăng nhập" .

Lưu ý rằng điều này giả định rằng người dùng có thông tin đăng nhập trên máy chủ A cũng có thông tin đăng nhập trên máy chủ B.


1

Tôi đang phát điên với cùng một vấn đề! Tôi nhớ làm điều này với 2000 luôn luôn dễ dàng. Tôi đã ở khắp google và tôi không thể làm việc này. Chính xác cùng một thiết lập, cả hai máy chủ đang chạy trên một tài khoản miền, Windows auth.

Tôi đang cố gắng sử dụng các đường dẫn có tên thay vì TCP và ít nhất tôi gặp một lỗi khác:

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".

*/

Điều này có thể có liên quan đến việc kích hoạt các đường dẫn tên, nhưng tôi có thể kết nối qua sqlcmd từ máy chủ A đến máy chủ B như thế này:

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

Nếu tôi không sử dụng đường ống có tên, và chỉ cần làm:

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

Tôi nhận được điều này:

Login failed for user NT AUTHORITY\ANONYMOUS LOGIN

[Chỉnh sửa] Tôi đã bắt đầu một cuộc thảo luận trên Sql Server Central về điều này. Về cơ bản, bạn phải thực hiện một số cấu hình phức tạp liên quan đến phái đoàn Kerberos để làm việc này.

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

Tôi quyết định chỉ tạo một tài khoản Đăng nhập Sql giới hạn, duy nhất để xử lý các truy vấn được liên kết. Tôi ghét phải dùng đến điều đó, nhưng có vẻ an toàn hơn những thay đổi bạn phải thực hiện để làm cho nó hoạt động với windows auth.


Xem bên dưới để thiết lập Kerberos phức tạp. Những thứ này đã giết tôi trong một thời gian dài, rất lâu!
evilhomer

0

Nếu bạn thực hiện tìm kiếm trên sp_addlinkbederver và sp_linkedservers, bạn sẽ nhận được một số ví dụ. Nó là khá đơn giản để thiết lập.


0

Ngoài ra nếu bạn có Trình quản lý SQL, bạn có thể thêm bằng GUI của nó.

Về cơ bản, bạn cần liên kết hai máy chủ bằng các SP được đề cập bởi Tim hoặc thông qua GUI và sau đó đặt quy tắc truy cập (thậm chí không cần thiết nếu bạn sử dụng xác thực Windows trên cả hai máy chủ).


0

Tôi biết điều này được cho là dễ dàng, nhưng nó hoàn toàn không hoạt động với tôi - tôi đang gặp vấn đề về bảo mật ở đây. Vì vậy, tôi muốn ai đó đánh vần các bước cho tôi.

Tôi đã làm điều này trong quá khứ trên SQL 2000 mà không gặp vấn đề gì.


0

Vì vậy, bạn có thể liên kết chúng, nhưng không thể thực hiện một truy vấn vì tài khoản sai?

Người dùng windows bạn cố sử dụng có quyền đọc dữ liệu trên cả hai máy chủ không?

Có lần tôi cũng gặp vấn đề vì thuộc tính "truy cập dữ liệu" được đặt thành false vì một số lý do không xác định.

Ngoài ra, hãy thử những gì sẽ xảy ra nếu bạn đặt một người dùng thành một người dùng khác cho liên kết.

(Tất cả những điều này có thể được thực hiện trong SQL Manager.)


0

Tim đã đăng các bước chính xác mà tôi đã giả định là những bước chính xác. Bước 5 là trang bảo mật. Tôi chọn "Được thực hiện bằng bối cảnh bảo mật hiện tại của đăng nhập".

Khi tôi nhấn ok, tôi nhận được lỗi sau. Tôi không biết lý do tại sao nó cố gắng sử dụng 'NT Author \ Anonymous đăng nhập'. Tôi đã đăng nhập vào máy trạm của mình bằng tài khoản miền có tất cả các quyền trên cả hai máy chủ.

TIÊU ĐỀ: Microsoft SQL Server Management Studio

"Máy chủ được liên kết đã được tạo nhưng không kiểm tra kết nối. Bạn có muốn giữ máy chủ được liên kết không?"

------------------------------ THÔNG TIN THÊM:

Một ngoại lệ đã xảy ra trong khi thực hiện một câu lệnh hoặc lô Transact-SQL. (Microsoft.SqlServer.ConnectionInfo)


Đăng nhập thất bại cho người dùng 'NT AUTHORITY \ ANONYMOUS LOGON'. (Máy chủ Microsoft SQL, Lỗi: 18456)

Để được trợ giúp, hãy nhấp: http://go.microsoft.com/fwlink?ProdName=Microsoft+Query+Server&ProdVer=09.00.3068&EvtSrc=MSQueryServer&EvtID=18456&LinkId=20476


0

Hãy thử làm điều này trong khi bạn đăng nhập cục bộ vào máy chủ, nếu bạn làm điều đó từ một máy từ xa, bạn có thể không gửi được thông tin đăng nhập thích hợp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.