Discussione:
Accesso ad un server SQL da Windows XP
(troppo vecchio per rispondere)
the_poet
2005-06-13 07:35:56 UTC
Permalink
Salve ragazzi,
ci risiamo, lo so, ma ogni tanto mi inceppo su questa cosa. Ecco un
riepilogo della situazione:

ComputerA
Windows 2000 PRO
SQL Server 2000 sp3 Dev Edition
MSSQLSERVER parte con un account di sistema creato da me
SQLSERVERAGENT parte con un account di sistema creato da me
Ho aggiunto un utente UtenteComputerB agli utenti di Windows e da EM ho
aggiunto tale account e, successivamente, ho assegnato a tale utente
l'accesso ad un db


ComputerB
Windows XP Pro SP2
MSDE 2000 sp3
MSSQLSERVER parte con un l'aacount di sistema
SQLSERVERAGENT parte con un l'aacount di sistema
Ho aggiunto un utente UtenteComputerA agli utenti di Windows e da EM ho
aggiunto tale account e, successivamente, ho assegnato a tale utente
l'accesso ad un db


Dal ComputerA riesco tranquillamente ad accedere all'istanza di SQL Server
sul ComputerB e riesco a registrare tale computer fra i linked server.
Dal computerB invece se tento di eseguire questa query distribuita:

select * from openquery([ComputerA],'select * from [Tabella].[dbo].[Prova]')

ottengo questo messaggio di errore:

Server: messaggio 18456, livello 14, stato 1, riga 1
Impossibile eseguire l'accesso per l'utente 'NT AUTHORITY\ACCESSO ANONIMO'.


Dove sbaglio?
Andrea Benedetti
2005-06-13 08:03:00 UTC
Permalink
Salve the_poet,
Post by the_poet
Salve ragazzi,
ci risiamo, lo so, ma ogni tanto mi inceppo su questa cosa. Ecco un
ComputerA
Windows 2000 PRO
SQL Server 2000 sp3 Dev Edition
MSSQLSERVER parte con un account di sistema creato da me
SQLSERVERAGENT parte con un account di sistema creato da me
Ho aggiunto un utente UtenteComputerB agli utenti di Windows e da EM ho
aggiunto tale account e, successivamente, ho assegnato a tale utente
l'accesso ad un db
ComputerB
Windows XP Pro SP2
MSDE 2000 sp3
MSSQLSERVER parte con un l'aacount di sistema
SQLSERVERAGENT parte con un l'aacount di sistema
Ho aggiunto un utente UtenteComputerA agli utenti di Windows e da EM ho
aggiunto tale account e, successivamente, ho assegnato a tale utente
l'accesso ad un db
Dal ComputerA riesco tranquillamente ad accedere all'istanza di SQL Server
sul ComputerB e riesco a registrare tale computer fra i linked server.
select * from openquery([ComputerA],'select * from
[Tabella].[dbo].[Prova]')
Server: messaggio 18456, livello 14, stato 1, riga 1
Impossibile eseguire l'accesso per l'utente 'NT AUTHORITY\ACCESSO ANONIMO'.
Dove sbaglio?
Prova a dare un'occhiata a questo: http://support.microsoft.com/?id=238477
Mi sembra proprio che possa interessarti...

Andrea
the_poet
2005-06-13 10:32:09 UTC
Permalink
Bene, sono riuscito a risolvere, in realtà non si trattava di un problema
bensi di un doppio hop come descritto nel link da te indicatomi. Adesso ho
un altro problema, se racchiudo la query di prima in una transazione:

BEGIN TRANSACTION
SELECT * FROM OPENQUERY([ComputerA],'SELECT * FROM [Tabella].[dbo].[Prova]')
COMMIT TRANSACTION

Ottengo questo errore:
Messaggio 7391, livello 16, stato 1, server ComputerB, riga 2
Il provider OLE DB 'SQLOLEDB' non è in grado di avviare una transazione
distribuita. Impossibile eseguire l'operazione.
[OLE/DB provider returned message: Impossibile aggiungere la nuova
transazione
all'elenco del coordinatore di transazioni specificato. ]
Traccia di errore OLE DB [OLE/DB Provider 'SQLOLEDB'
ITransactionJoin::JoinTransaction returned 0x8004d00a].


Che fare?
Andrea Benedetti
2005-06-13 10:37:45 UTC
Permalink
Salve the_poet,
Post by the_poet
Bene, sono riuscito a risolvere, in realtà non si trattava di un problema
bensi di un doppio hop come descritto nel link da te indicatomi. Adesso ho
BEGIN TRANSACTION
SELECT * FROM OPENQUERY([ComputerA],'SELECT * FROM
[Tabella].[dbo].[Prova]')
COMMIT TRANSACTION
Messaggio 7391, livello 16, stato 1, server ComputerB, riga 2
Il provider OLE DB 'SQLOLEDB' non è in grado di avviare una transazione
distribuita. Impossibile eseguire l'operazione.
[OLE/DB provider returned message: Impossibile aggiungere la nuova
transazione
all'elenco del coordinatore di transazioni specificato. ]
Traccia di errore OLE DB [OLE/DB Provider 'SQLOLEDB'
ITransactionJoin::JoinTransaction returned 0x8004d00a].
Che fare?
Darei un'occhiata qui: http://support.microsoft.com/?id=306212

Andrea
the_poet
2005-06-13 11:06:36 UTC
Permalink
Grazie del link, l'avevo già notato, aggiorno la situazione

ComputerB
Windows Xp Pro (firewall disabilitato)
MSDE 2000 sp3
MSSQLSERVER e SQLSERVERAGENT partono con lo stesso account di sistema con il
quale mi loggo nella macchina (che è membro di Administrators)

1) Fornendo il comando DBCC TRACEON (3604, 7300) il messaggio di errore è
il medesimo
2) ComputerA e ComputerB sono in rete locale e si pingano l'un l'altro
utlizzando il nome delle macchine
3) Non ci sono firewall ne su ComputerA ne su ComputerB
4) L'oggetto della query è una semplice Tabella, non ci sono trigger
5) MSDTC è avviato su entrambi i computer
6) I computer non sono cluster... (magari si capiva, ma annoto punto punto
quello che leggo nel link)
7) select * from openquery([ComputerX],'select @@SERVERNAME') coincide con
il nome dei computer da ambo i lati
8) Il gruppo Administrators cui l'utente che esegue le query fa parte ha
pieno controllo sulla chiave di registro
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer

Non so più che pesci prendere
Andrea Benedetti
2005-06-13 11:53:13 UTC
Permalink
Ciao,
Post by the_poet
Grazie del link, l'avevo già notato, aggiorno la situazione
[cut]
Post by the_poet
1) Fornendo il comando DBCC TRACEON (3604, 7300) il messaggio di errore è
il medesimo
2) ComputerA e ComputerB sono in rete locale e si pingano l'un l'altro
utlizzando il nome delle macchine
3) Non ci sono firewall ne su ComputerA ne su ComputerB
4) L'oggetto della query è una semplice Tabella, non ci sono trigger
5) MSDTC è avviato su entrambi i computer
6) I computer non sono cluster... (magari si capiva, ma annoto punto punto
quello che leggo nel link)
il nome dei computer da ambo i lati
8) Il gruppo Administrators cui l'utente che esegue le query fa parte ha
pieno controllo sulla chiave di registro
HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer
Non so più che pesci prendere
Prova ad impostare :
SET XACT_ABORT ON

Ed apri la transazione con:
BEGIN DISTRIBUTED TRANSACTION

Inoltre tempo fa Franco Conenna [MS] suggeriva, per un problema simile al
tuo:

Prova ad aggiungere nella chiave di registry:
HKEY_LOCAL_MACHINE\SOFTWARE\Mi­crosoft\MSDTC
il valore: TurnOffRpcSecurity (REG_DWORD)=1

Andrea
the_poet
2005-06-13 12:45:18 UTC
Permalink
Post by Andrea Benedetti
SET XACT_ABORT ON
Fatto, non cambia nulla
Post by Andrea Benedetti
BEGIN DISTRIBUTED TRANSACTION
Fatto, non cambia nulla
Post by Andrea Benedetti
Inoltre tempo fa Franco Conenna [MS] suggeriva, per un problema simile al
HKEY_LOCAL_MACHINE\SOFTWARE\Mi­crosoft\MSDTC
il valore: TurnOffRpcSecurity (REG_DWORD)=1
Fatto (su entrambi i lati) non cambia nulla.
Post by Andrea Benedetti
Andrea
Andrea Benedetti
2005-06-13 13:01:52 UTC
Permalink
Ciao,
Post by the_poet
Post by Andrea Benedetti
SET XACT_ABORT ON
Fatto, non cambia nulla
Post by Andrea Benedetti
BEGIN DISTRIBUTED TRANSACTION
Fatto, non cambia nulla
Post by Andrea Benedetti
Inoltre tempo fa Franco Conenna [MS] suggeriva, per un problema simile al
HKEY_LOCAL_MACHINE\SOFTWARE\Mi­crosoft\MSDTC
il valore: TurnOffRpcSecurity (REG_DWORD)=1
Fatto (su entrambi i lati) non cambia nulla.
Il servizio MSDTC è avviato con credenziali differenti sulle due macchine?
Il problema potrebbe risiedere nella differenza che passa tra LocalSystem di
windows 2000 e NetworkService di WinXP.

Altro non saprei...

Andrea
the_poet
2005-06-13 13:38:40 UTC
Permalink
Adesso su entrambi i computer ho creato un account msdtc con password msdtc,
i servizi su entrambi i Computer partono adesso con questi account.
Il messaggio d'errore adesso è il seguente:

[ComputerB]

Microsoft Windows XP [Versione 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Documents and Settings\Administrator>osql -E
1> begin distributed transaction
2> select * from openquery([ComputerA],'select * from Prova.dbo.Tabella')
3> commit transaction
4> go

Messaggio 8501, livello 16, stato 3, server ASEM, riga 2 MSDTC nel server
'ComputerB' non è disponibile.


Da gestione servizi SQL il servizio lo vedo avviato, stessa cosa da gestione
servizi, stessa cosa con una xp_servicecontrol...
Che succede?
Andrea Benedetti
2005-06-13 13:49:10 UTC
Permalink
Ciao,
Post by the_poet
Messaggio 8501, livello 16, stato 3, server ASEM, riga 2 MSDTC nel server
'ComputerB' non è disponibile.
Ti segnalo questo tool: "DTCTester Tool", qui:
http://support.microsoft.com/default.aspx?scid=kb;en-us;293799

Inoltre: che tipo di privilegi ha il tuo account?

Andrea
the_poet
2005-06-14 07:41:06 UTC
Permalink
Riprendiamo da dove avevamo lasciato ieri.
Grazie per il link, ho scaricato il DTC Tester e l'ho eseguito da ambo i
lati della transazione:

ComputerA
----------------------------------------------------------------------------
-------------
Command Line: dtctester DSNVersoComputerB mioUtente miaPassword
Executed: dtctester
DSN: DSNVersoComputerB
User Name: mioUtente
Password: miaPassword
tablename=#dtc7421
Creating Temp Table for Testing: #dtc7421
Warning: No Columns in Result Set From Executing: 'create table #dtc7421
(ival int)'
Initializing DTC
Beginning DTC Transaction
Enlisting Connection in Transaction

...e qui si blocca non va avanti neppure dopo svariati minuti


ComputerB
----------------------------------------------------------------------------
---------------
Microsoft Windows XP [Versione 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Documents and Settings\Administrator>cd c:\3tech\dtc

C:\3tech\dtc>dtctester DSNVersoComputerA mioUtente miaPasswordExecuted:
dtctester
DSN: DSNVersoComputerA
User Name: mioUtente
Password: miaPasswordExecuted
tablename= #dtc31671
Creating Temp Table for Testing: #dtc31671
Warning: No Columns in Result Set From Executing: 'create table #dtc31671
(ivalint)'
Initializing DTC
Beginning DTC Transaction
Enlisting Connection in Transaction
Error:
SQLSTATE=25S12,Native error=-2147168220,msg='[Microsoft][ODBC SQL Server
Driver]
Errore di transazione distribuita.'
Error:
SQLSTATE=24000,Native error=0,msg=[Microsoft][ODBC SQL Server Driver]Stato
del cursore non valido.
Typical Errors in DTC Output When
a. Firewall Has Ports Closed
-OR-
b. Bad WINS/DNS entries
-OR-
c. Misconfigured network
-OR-
d. Misconfigured SQL Server machine that has multiple netcards.
Aborting DTC Transaction
Releasing DTC Interface Pointers
Successfully Released pTransaction Pointer.


Analizzaimo la risposta:

a) i computer sono in rete locale nessun firewall hardware fra i due,
Firewall di Windows XP disabilitato su ComputerB

b) Questa non l'ho capita...

c) A quale server si riferisce? ComputerA o ComputerB? Entrambi hanno 1 sola
scheda di rete.
Andrea Benedetti
2005-06-14 07:50:35 UTC
Permalink
Ciao,
Post by the_poet
Riprendiamo da dove avevamo lasciato ieri.
Se riusciamo ad uscirne ... ;-)
Post by the_poet
Grazie per il link, ho scaricato il DTC Tester e l'ho eseguito da ambo i
[cut]
Post by the_poet
SQLSTATE=25S12,Native error=-2147168220,msg='[Microsoft][ODBC SQL Server
Driver]
Errore di transazione distribuita.'
SQLSTATE=24000,Native error=0,msg=[Microsoft][ODBC SQL Server Driver]Stato
del cursore non valido.
Typical Errors in DTC Output When
a. Firewall Has Ports Closed
-OR-
b. Bad WINS/DNS entries
-OR-
c. Misconfigured network
-OR-
d. Misconfigured SQL Server machine that has multiple netcards.
Aborting DTC Transaction
Releasing DTC Interface Pointers
Successfully Released pTransaction Pointer.
a) i computer sono in rete locale nessun firewall hardware fra i due,
Firewall di Windows XP disabilitato su ComputerB
b) Questa non l'ho capita...
c) A quale server si riferisce? ComputerA o ComputerB? Entrambi hanno 1 sola
scheda di rete.
Prima una domanda: riesci a pingare le due macchine tramite nome? (DTC
richiede la risoluzione dei nomi)

Secondo me (attendo smentite) potrebbe essere un problema legato all'account
che ti esegue il DTC sotto Win2000.
Che tipo di utente è?

Andrea
the_poet
2005-06-14 08:06:26 UTC
Permalink
Post by Andrea Benedetti
Prima una domanda: riesci a pingare le due macchine tramite nome? (DTC
richiede la risoluzione dei nomi)
Da entrambi i lati riesco a pingare usando il nome della macchina
Post by Andrea Benedetti
Secondo me (attendo smentite) potrebbe essere un problema legato all'account
che ti esegue il DTC sotto Win2000.
Che tipo di utente è?
Ho provato ad avviare MSDTC sia come "usa l'account di sistema" sia
assegnando un account creto apposta (nome uetnet msdtc) membro del gruppo
Adminisatrator
Post by Andrea Benedetti
Andrea
Andrea Benedetti
2005-06-14 08:29:02 UTC
Permalink
Ciao,
Post by the_poet
Post by Andrea Benedetti
Prima una domanda: riesci a pingare le due macchine tramite nome? (DTC
richiede la risoluzione dei nomi)
Da entrambi i lati riesco a pingare usando il nome della macchina
Post by Andrea Benedetti
Secondo me (attendo smentite) potrebbe essere un problema legato
all'account
Post by Andrea Benedetti
che ti esegue il DTC sotto Win2000.
Che tipo di utente è?
Ho provato ad avviare MSDTC sia come "usa l'account di sistema" sia
assegnando un account creto apposta (nome uetnet msdtc) membro del gruppo
Adminisatrator
Ho un'ultima cartuccia da sparare... poi penso di dover gettare la spugna...

Prova ad aprire la finestra di COM+ (Component Services)
Start - pannello di controllo - tool amministrativi - servizi componenti

Espandi il nodo "Component Services", "Computers" --> tasto dx su "My
Computer" --> proprietà
Linguetta "MSDTC"

Noti differenze tra i tuoi due computer (soprattutto sotto il pulsante
"Security Configuration")?

Andrea
the_poet
2005-06-14 08:56:30 UTC
Permalink
Post by Andrea Benedetti
Ho un'ultima cartuccia da sparare... poi penso di dover gettare la spugna...
Prova ad aprire la finestra di COM+ (Component Services)
Start - pannello di controllo - tool amministrativi - servizi componenti
Espandi il nodo "Component Services", "Computers" --> tasto dx su "My
Computer" --> proprietà
Linguetta "MSDTC"
Noti differenze tra i tuoi due computer (soprattutto sotto il pulsante
"Security Configuration")?
Andrea
Nel computer con Windows 2000 PRO non c'è il pulsante "Security
Configurator"...
Andrea Benedetti
2005-06-14 08:59:13 UTC
Permalink
Ciao,
Post by Andrea Benedetti
Post by Andrea Benedetti
Ho un'ultima cartuccia da sparare... poi penso di dover gettare la
spugna...
Post by Andrea Benedetti
Prova ad aprire la finestra di COM+ (Component Services)
Start - pannello di controllo - tool amministrativi - servizi componenti
Espandi il nodo "Component Services", "Computers" --> tasto dx su "My
Computer" --> proprietà
Linguetta "MSDTC"
Noti differenze tra i tuoi due computer (soprattutto sotto il pulsante
"Security Configuration")?
Andrea
Nel computer con Windows 2000 PRO non c'è il pulsante "Security
Configurator"...
Ah...
Ho paura di aver finito le cartucce...

Provare sul newsgroup americano (dove ogni tanto passa qualcuno di MSFT)?
Mi spiace... ci abbiamo provato...

Andrea
the_poet
2005-06-14 09:08:03 UTC
Permalink
Non fa nulla, grazie per il tempo che mi hai dedicato.
Secondo te se cambio la modalità di accesso di SQL da Windows a mista
cambierebbe qualcosa?
Andrea Benedetti
2005-06-14 09:23:03 UTC
Permalink
Post by the_poet
Non fa nulla, grazie per il tempo che mi hai dedicato.
Secondo te se cambio la modalità di accesso di SQL da Windows a mista
cambierebbe qualcosa?
Direi di no... non dovrebbe...
Andrea

Continua a leggere su narkive:
Loading...