[SQL Server 2005]

martedì 30 novembre 2010 - 17.49
Tag Elenco Tags  Windows Server 2000

yahuzz Profilo | Newbie

Salve a tutti... ho questo problema enorme e sto sudando freddo:
Sto cercando di creare un utente in un database, ma quando cerco di crearlo, ottengo sempre questo errore:
"An exception occured while executing a Transact-SQL statement or batch".
e subito sotto
"The login already has an account under a different user name" (errore 15063).

Premetto che son dentro sqlserver man come administrator...
Oltretutto il servizio Distributed Transaction Coordinator è disabilitato in quanto non utilizzato dall'applicativo.

Cosa devo fare per aggiungere un utente X all'interno del mio DB, considerando che questo utente X è già un utente administrator di sqlserver?

Aiutatemi vi prego!!!

lbenaglia Profilo | Guru

>Salve a tutti... ho questo problema enorme e sto sudando freddo:
>Sto cercando di creare un utente in un database, ma quando cerco
>di crearlo, ottengo sempre questo errore:
>"An exception occured while executing a Transact-SQL statement
>or batch".
>e subito sotto
>"The login already has an account under a different user name"
>(errore 15063).

L'errore indica che in quel db esiste già uno user account mappato alla login che hai specificato.
Se anche fosse possibile, per quale motivo vorresti mappare due user account differenti alla stessa login?
In questo caso, quando ti autentichi all'istanza quale user account verrebbe usato nella fase di autorizzazione per l'accesso al db? Uno qualunque?
Al più una login può essere mappata a più user account, ma in database differenti!

>Oltretutto il servizio Distributed Transaction Coordinator è
>disabilitato in quanto non utilizzato dall'applicativo.
Il DTC è un servizio di sistema utilizzato da diversi servizi. Ad esempio SQL Server lo utilizza quando esegui delle transazioni distribuite.

>Cosa devo fare per aggiungere un utente X all'interno del mio
>DB, considerando che questo utente X è già un utente administrator
>di sqlserver?
Semplice, non devi farlo in quando una login sysadmin è già mappata di suo allo user account dbo.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/

yahuzz Profilo | Newbie

Grazie per la risposta... cerco di spiegare meglio il mio problema.
Ho il DB del cliente alla cui istanza ci si deve collegare con un utente specifico (es: MACSQL)... nelle altre installazioni presso altri clienti, per il database in questione ho tra l'elenco degli utenti anche l'utente MACSQL... in questo caso, non ce l'ho! ho solo lo usernamen dbo che ha come login MACSQL...
Tra le login che accedono a SQLServer cè MACSQL, ma ovviamente andando a verificare lo usermapping, vedo che per la login MACSQL l'utente che accede al mio database è dbo....
Detto ciò, io non riesco ne ad aggiungere al DB l'utente MACSQL, ne riesco a modificare le rules per l'utende dbo, in modo da parametrizzarlo secondo le mie esigenze...
Ho pensato che l'unico modo per farlo sia ricreare un DB da zero... correggimi se sbaglio... altrimenti cosa dovrei/potrei fare.

Tutte queste considerazioni le faccio in quanto, da qualche giorno, si verificano problemi di chiave duplicata nel momendo di esecuzione di una funzione che è sotto transazione. Alla ricerca delle possibili cause di questo problema (che non si è mai verificato) ho riscontrato questa diversità nella parametrizzazione del database rispetto alle altre installazioni...

Grazie mille.
Ciao
Davide

lbenaglia Profilo | Guru

>Ho il DB del cliente alla cui istanza ci si deve collegare con
>un utente specifico (es: MACSQL)... nelle altre installazioni
>presso altri clienti, per il database in questione ho tra l'elenco
>degli utenti anche l'utente MACSQL... in questo caso, non ce
>l'ho! ho solo lo usernamen dbo che ha come login MACSQL...
>Tra le login che accedono a SQLServer cè MACSQL, ma ovviamente
>andando a verificare lo usermapping, vedo che per la login MACSQL
>l'utente che accede al mio database è dbo....
>Detto ciò, io non riesco ne ad aggiungere al DB l'utente MACSQL,
>ne riesco a modificare le rules per l'utende dbo, in modo da
>parametrizzarlo secondo le mie esigenze...
>Ho pensato che l'unico modo per farlo sia ricreare un DB da zero...
>correggimi se sbaglio... altrimenti cosa dovrei/potrei fare.

E' sufficiente modificare l'owner del db (tasto DX sul db, Properties, Files, Owner) specificando una login differente (ad es. "sa").
In questo modo lo user account dbo verrà mappato alla login sa e quindi sei libero di definire lo user account MACSQL mappato alla login MACSQL.

>Tutte queste considerazioni le faccio in quanto, da qualche giorno,
>si verificano problemi di chiave duplicata nel momendo di esecuzione
>di una funzione che è sotto transazione. Alla ricerca delle possibili
>cause di questo problema (che non si è mai verificato) ho riscontrato
>questa diversità nella parametrizzazione del database rispetto
>alle altre installazioni...
Stai tranquillo che questo errore non ha niente a che vedere con login/user account

>Grazie mille.
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/

yahuzz Profilo | Newbie

Ti ringrazio ancora per la risposta, ma

>E' sufficiente modificare l'owner del db (tasto DX sul db, Properties,
>Files, Owner) specificando una login differente (ad es. "sa").
>In questo modo lo user account dbo verrà mappato alla login sa
>e quindi sei libero di definire lo user account MACSQL mappato
>alla login MACSQL.
nonostante abbia lanciato la sp_changedbowner, questo non sembra aver sortito alcun effetto, e non posso ancora creare l'utente desiderato

>Stai tranquillo che questo errore non ha niente a che vedere
>con login/user account
Son convinto anch'io che il problema non sia nella login/user account, ma non capisco per quale motivo un programma che sono mesi che funziona correttamente, di punto in bianco dopo la migrazione da sql server 2003 al 2005, abbia cominciato a dare queste segnalazioni... Il discorso della login/user è stata la prima cosa che mi è saltata all'occhio come unica differenza nella configurazione del database...

A sto punto ho modificato il programma, trappando l'errore e gestendolo in altro modo... anche se mi rimane ancora oscura la motivazione per cui: in una transaction, se eseguo un controllo di esistenza di una chiave per un tabella, ottengo (correttamente) che questa non esiste; allora eseguo una funzione di inserimento nuova riga nella medesima tabella con i parametri desiderati, e ottengo inesorabilmente un errore di chiave duplicata... se eseguo immediatamente di seguito (sempre nella transaction) un altro controllo di esistenza, ottengo nuovamente che tale chiave non esiste!!!
E questo problema avviene sporadicamente, ogni tanto, e dopo qualche minuto sparisce permettendomi di inserire correttamente (tramite l'applicativo ovviamente) quegli stessi valori che prima scatenavano l'errore!!!!!

lbenaglia Profilo | Guru

>nonostante abbia lanciato la sp_changedbowner, questo non sembra
>aver sortito alcun effetto, e non posso ancora creare l'utente
>desiderato
Hai modificato il db owner?

>Son convinto anch'io che il problema non sia nella login/user
>account, ma non capisco per quale motivo un programma che sono
>mesi che funziona correttamente, di punto in bianco dopo la migrazione
>da sql server 2003 al 2005, abbia cominciato a dare queste segnalazioni...
>Il discorso della login/user è stata la prima cosa che mi è saltata
>all'occhio come unica differenza nella configurazione del database...
>
>A sto punto ho modificato il programma, trappando l'errore e
>gestendolo in altro modo... anche se mi rimane ancora oscura
>la motivazione per cui: in una transaction, se eseguo un controllo
>di esistenza di una chiave per un tabella, ottengo (correttamente)
>che questa non esiste; allora eseguo una funzione di inserimento
>nuova riga nella medesima tabella con i parametri desiderati,
>e ottengo inesorabilmente un errore di chiave duplicata... se
>eseguo immediatamente di seguito (sempre nella transaction) un
>altro controllo di esistenza, ottengo nuovamente che tale chiave
>non esiste!!!
Faccio fatica a crederlo

>E questo problema avviene sporadicamente, ogni tanto, e dopo
>qualche minuto sparisce permettendomi di inserire correttamente
>(tramite l'applicativo ovviamente) quegli stessi valori che prima
>scatenavano l'errore!!!!!
Senza un esempio che riproduca il problema non credo che sia possibile identificare l'errore.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/

yahuzz Profilo | Newbie

>Faccio fatica a crederlo
Beh, Ti assicuro che è cosi...
Ti faccio subito vedere la porzione di codice che mi restituisce l'errore:

-> In questo punto, all'interno della mia Transaction, verifico l'esistenza della chiave primaria che voglio andare ad inserire nella tabella
TCARI.Magazz = Maga
TCARI.Mandan = Op.MandPF
TCARI.NRCARI = NrCa

TB_READEXIST TCARI
If Trim(clsMsgErr) <> "" Then GoTo Fine

-> Dopo non aver riscontrato errori e aver verificato che non esista tale chiave primaria, prosegue nell'inserimento dei dati nella tabella.
TB_NEW TCARI
If Trim(clsMsgErr) <> "" Then GoTo Fine

TCARI.Magazz = Maga
TCARI.Mandan = Op.MandPF
TCARI.NRCARI = NrCa
TCARI.DTCARI = Format(ora, "YYYYMMDD")
TCARI.TPCARI = tpcariDaReparto
TCARI.NRENTR = NrEn
TCARI.DTENTR = Format(ora, "YYYYMMDD")
'TCARI.NRDOMI = dfNumeToText(Val(NrOp), 10, 0, "NUM")
TCARI.NRDOMI = dfNumeToText(Val(NrOp), 7, 0, "NUM")

TB_WRITE TCARI
If Trim(clsMsgErr) <> "" Then GoTo Fine

-> Qui mi viene restituito l'errore di chiave duplicata e più precisamente:
Errore = 40002 - 01000: [Microsoft][ODBC SQL Server Driver][SQL Server]The statement has been terminated.
01000: [Microsoft][ODBC SQL Server Driver][SQL Server]The statement has been terminated.
23000: [Microsoft][ODBC SQL Server Driver][SQL Server]Cannot insert duplicate key row in object 'dbo.DTCARI' with unique index 'TCARI'.

Ho anche provato in debug dell'applicativo a rifare un controllo di esistenza, sempre sotto la transazione di quella chiave primaria e ti garantisco (anche perchè nn avrebbe senso che io chieda aiuto per una cosa che mi invento) che mi viene restituito che tale chiave (e di conseguenza il record) non esiste nella tabella!!!!!

>Senza un esempio che riproduca il problema non credo che sia
>possibile identificare l'errore.
Come posso riportarti un esempio concreto se non ci sono delle condizioni ripetibili per cui tale evento si verifica? Questa cosa si verifica ogni tanto... non trovo nulla che mi porti a trovare un errore... anche provando a pensare che siano i dati stessi a portare il programma in errore: perchè allora dopo qualche minuto, ripetendo il tentativo con gli stessi identici dati l'inserimento va a buon fine?????
:(
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5