Installazione del server collegato da SQL Server a SQL Server


25

Spiegare cosa è necessario per configurare un server collegato SQL Server.

Il server A è solo accessi Windows SQL 2005 Il server B è uguale (solo accessi Windows SQL 2005)

Il server A esegue Windows XP Il server B esegue Windows Server 2003

Entrambi i servizi di SQL Server sono in esecuzione con lo stesso account di dominio. Ho effettuato l'accesso alla mia workstation con un account di dominio con diritti amministrativi su entrambi i server SQL.

Si noti che questi sono entrambi SQL Server 2005 SP2 - mi sono stati indicati i vecchi hotfix, ma quelli sono già applicati.

Il problema che sto riscontrando è questo errore: "Accesso non riuscito per l'utente 'NT AUTHORITY \ ANONYMOUS LOGON'. (Microsoft SQL Server, errore: 18456)"

Risposte:


18

Dalla mia comprensione di questo problema è un problema "HOP".

vale a dire che stai tentando di utilizzare il server A per inoltrare i tuoi dati di accesso (con SSPI) al server B.

In SQL Server 2005 hanno aggiunto un sacco di problemi di sicurezza che lo rendono più difficile di quanto dovrebbe essere. Le parole "Autenticazione Kerberos" diventeranno la base della maggior parte delle vite degli amministratori di sistema / DBA. Viene effettivamente utilizzato per l'autenticazione pass-through.

Ecco le basi di ciò di cui hai bisogno. 1) I server (A e B) devono essere impostati in Active Directory (AD) con la delega per Kerberos abilitata. (questo è impostato tramite il pannello di amministrazione della directory attiva)

2) L'account del servizio su cui sono in esecuzione i server SQL deve avere anche la delega abilitata (anche questa è impostata attraverso il pannello di amministrazione della directory attiva). - se non sono in esecuzione con un account di servizio, è necessario crearne uno.

3) I server devono avere SPN definiti per l'istanza, l'HOST e il nome della macchina. (Utilizzando uno strumento chiamato SetSPN negli strumenti di supporto di Windows)

Strumenti di supporto (SetSPN è in questo set) http://www.microsoft.com/downloads/details.aspx?FamilyID=96a35011-fd83-419d-939b-9a772ea2df90&DisplayLang=en

(Panoramica su come aggiungere un SPN) http://technet.microsoft.com/en-us/library/bb735885.aspx

4) Potrebbe essere necessario impostare il DB su "affidabile"

ALTER DATABASE SET affidabile

5) Dopo aver fatto tutto ciò, riavvia le tue istanze.

6) Quindi prova a creare nuovamente il tuo server collegato.

Finalmente puoi testare la tua connessione a SQL Server. Questo dovrebbe funzionare bene se hai configurato tutto correttamente.

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

Questo ti dirà il tuo tipo di autenticazione della connessione.

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

Vuoi ottenere "KERBEROS" qui e non "NTLM".

È una pendenza scivolosa, KERBEROS e delegazione Pass-through, seguitela e alla fine lo capirete.

Riferimenti 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

Altre manifestazioni del problema 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

Spero che tutto ciò aiuti.


Bella risposta! Questo riassume sicuramente un carico di informazioni che non sono organizzate in modo utile in altri luoghi.
ConstantineK,

3

Puoi anche utilizzare SQL Server Management Studio (SSMS) per gestire \ creare server collegati e se ti senti più a tuo agio con la GUI. Fare così:

  1. Avviare SSMS e connettersi a una delle istanze di SQL Server che si desidera collegare
  2. Espandere "Oggetti server" in Esplora oggetti
  3. Fare clic con il tasto destro del mouse su "Server collegati" e selezionare "Nuovo server collegato"
  4. Nella finestra di dialogo "Nuovo server collegato", seleziona "SQL Server" come Tipo di server e inserisci l'istanza di SQL Server a cui desideri collegarti.
  5. Nella pagina "Sicurezza", seleziona come gli utenti eseguiranno l'autenticazione dal server corrente al server collegato. Hai menzionato che entrambi i server sono configurati per utilizzare gli accessi di Windows. In tal caso, nella sezione "Per un accesso non definito nell'elenco precedente, le connessioni saranno:" Probabilmente sceglierei l'opzione "Effettua utilizzando il contesto di protezione corrente del login" .

Si noti che ciò presuppone che gli utenti che dispongono di accessi sul server A abbiano anche accessi sul server B.


1

Sto impazzendo con lo stesso problema! Ricordo che farlo con 2000 era sempre facile. Sono stato su Google e non riesco a farlo funzionare. Stessa configurazione, entrambi i server in esecuzione su un account di dominio, autenticazione di Windows.

Sto cercando di usare named pipe invece di TCP e almeno ottengo un errore diverso:

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

*/

Questo potrebbe avere qualcosa a che fare con l'abilitazione delle pipe dei nomi, ma posso collegarmi tramite sqlcmd dal server A al server B in questo modo:

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

Se non ho usato le pipe denominate, e faccio solo:

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

Capisco questo:

Login failed for user NT AUTHORITY\ANONYMOUS LOGIN

[Modifica] Ho iniziato una discussione su SQL Server Central su questo. Fondamentalmente, devi fare alcune complicate configurazioni relative alla delega Kerberos per farlo funzionare.

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

Ho deciso di creare un unico account di accesso SQL limitato per gestire le query collegate. Odio ricorrere a questo, ma sembra più sicuro delle modifiche che devi fare per farlo funzionare con Windows Autent.


Vedi sotto per la complicata configurazione di Kerberos. Questa roba mi ha ucciso per molto, molto tempo!
evilhomer,

0

Se si esegue una ricerca su sp_addlinkedserver e sp_linkedservers, si ottengono alcuni esempi. È abbastanza semplice da configurare.


0

Inoltre, se si dispone di SQL Manager, è possibile aggiungere con la sua GUI.

Fondamentalmente è necessario collegare i due server tramite gli SP menzionati da Tim o tramite la GUI e quindi impostare le regole di accesso (che non è nemmeno necessario se si utilizza l'autenticazione di Windows su entrambi i server).


0

So che dovrebbe essere facile, ma non funziona affatto per me - sto avendo problemi di sicurezza qui. Quindi vorrei che qualcuno spiegasse i passaggi per me.

L'ho fatto in passato su SQL 2000 senza problemi.


0

Quindi puoi collegarli, ma non puoi eseguire una query a causa di account errati?

L'utente di Windows che si tenta di utilizzare dispone dei diritti per leggere i dati su entrambi i server?

Una volta ho avuto anche un problema perché la proprietà "accesso ai dati" era impostata su false per qualche motivo sconosciuto.

Prova anche cosa succede se si imposta esplicitamente un utente su un altro utente per il collegamento.

(Tutto ciò può essere fatto in SQL Manager.)


0

Tim ha pubblicato i passi esatti che avevo ipotizzato fossero quelli corretti. Il passaggio 5 è la pagina di sicurezza. Seleziono "Effettuare utilizzando l'attuale contesto di sicurezza dell'account di accesso".

Quando faccio clic su OK, viene visualizzato il seguente errore. Non so perché stia cercando di utilizzare "Autorità NT \ Accesso anonimo". Ho effettuato l'accesso alla mia workstation con il mio account di dominio che ha tutti i diritti su entrambi i server.

TITOLO: Microsoft SQL Server Management Studio

"Il server collegato è stato creato ma non è riuscito un test di connessione. Vuoi mantenere il server collegato?"

------------------------------ INFORMAZIONI AGGIUNTIVE:

Si è verificata un'eccezione durante l'esecuzione di un'istruzione o batch Transact-SQL. (Microsoft.SqlServer.ConnectionInfo)


Accesso non riuscito per l'utente "NT AUTHORITY \ ANONYMOUS LOGON". (Microsoft SQL Server, errore: 18456)

Per assistenza, fare clic: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=09.00.3068&EvtSrc=MSSQLServer&EvtID=18456&LinkId=20476


0

Prova a farlo mentre sei connesso localmente al server, se lo fai da un computer remoto potresti non inviare le credenziali appropriate.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.