Ragazzi, sono giorni che ci sto uscendo pazzo: problemi con connession...

venerdì 05 settembre 2008 - 14.01

-*Web_Horse*- Profilo | Junior Member

Ciao a tutti,
dopo essermi impazzito con gli utenti del forum di silverlight.net per riuscire a capire che il problema della mia applicazione silverlight
non era WCF ma la connessione al database tramite sql express, ora sono giorni che mi sto impazzendo per cercare di capire il motivo per
il quale questa maledetta connessione avviene sul server di sviluppo di visual studio, e non da IIS.

La mia stringa di connessione attualmente in uso, é la seguente:
<add name="database1ConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|database2.mdf;Integrated Security=True;User Instance=True;" providerName="System.Data.SqlClient" />

Il problema che mi restituisce il server quando richiedo i dati dal database dalla mia applicazione silverlight é:

715x291 38Kb


Sapete di cosa si tratta?

Grazie a tutti.

lbenaglia Profilo | Guru

>La mia stringa di connessione attualmente in uso, é la seguente:
><add name="database1ConnectionString" connectionString="Data
>Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|database2.mdf;Integrated
>Security=True;User Instance=True;" providerName="System.Data.SqlClient"
>/>
C'è un particolare motivo che ti spinge ad utilizzare le User Instances?
Fossi in te eseguirei l'attach dl db database2 all'istanza denominata .\SQLEXPRESS, modificando la stringa di connessione in:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Dato che utilizzi la Windows Authentication l'account utilizzato dal tuo sito deve essere mappato in SQL Server ad una login (tramite il comando CREATE LOGIN...FROM WINDOWS;) e a livello di database dovrà esistere uno user account mappato alla login con le dovute permission sugli oggetti (CREATE USER...FOR LOGIN...;).

Per approfondire questi argomenti, consulta i Books Online:
http://www.microsoft.com/downloads/details.aspx?FamilyId=BE6A2C5D-00DF-4220-B133-29C1E0B6585F

>Grazie a tutti.
Prego.

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

-*Web_Horse*- Profilo | Junior Member

Ciao,

ho modificato la stringa secondo le credenziali che mi hai fornito, ed ora mi da il problema che mi ha dato le altre volte quando riuscivo ad oltrepassare quello che ho presentato,
e cioé:

Impossibile aprire il database "database2" richiesto dall'account di accesso. Accesso non riuscito.

Accesso non riuscito per l'utente 'NT AUTHORITY\SERVIZIO DI RETE'.
.Net SqlClient Data Provider

Void OnError(System.Data.SqlClient.SqlException, Boolean)

Questo attualmente sia da IIS che dal developer server (dal server developer al posto di Authority NT mi da il nome del mio PC).

Il database ha già i permessi per iis e sql server.

lbenaglia Profilo | Guru

>ho modificato la stringa secondo le credenziali che mi hai fornito,
>ed ora mi da il problema che mi ha dato le altre volte quando
>riuscivo ad oltrepassare quello che ho presentato,
>e cioé:
>
>Impossibile aprire il database "database2" richiesto dall'account
>di accesso. Accesso non riuscito.
>
>Accesso non riuscito per l'utente 'NT AUTHORITY\SERVIZIO DI RETE'.
>.Net SqlClient Data Provider

Fammi capire, hai eseguito l'attach del db all'istanza?
Esiste in SQL Server una login mappata all'utente Windows 'NT AUTHORITY\SERVIZIO DI RETE'?
Esiste in SQL Server uno user account a livello di database mappato alla login precedente?
Lo user account ha i permessi minimi necessari ad accedere agli oggetti che ti servono?

>Il database a già i permessi per iis e sql server.
Ovvero?

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

-*Web_Horse*- Profilo | Junior Member

Fammi capire, hai eseguito l'attach del db all'istanza?
-No, sql server tenta in automatico l'accesso al database tramite quell'account di accesso, non gliel'ho specificato io;


Esiste in SQL Server una login mappata all'utente Windows 'NT AUTHORITY\SERVIZIO DI RETE'?
-Dalla panoramica di sql management vedo NT AUTHORITY\System che suppongo sia lo stesso

Esiste in SQL Server uno user account a livello di database mappato alla login precedente?
-Non ho capito a cosa ti riferisci in particolare

Lo user account ha i permess minimi necessari ad accedere agli oggetti che ti servono?
NT AUTHORITY\System ha i permessi concessi tramite user sa per le connessioni sql (Connect SQL) come valore predefinito

>Il database ha già i permessi per iis e sql server.
Ovvero?
La cartella app_data e relativi contenuti, é stata dotata degli accessi ai vari membri di iis (iusr, IIS_uisr ecc ecc..)

lbenaglia Profilo | Guru

>Fammi capire, hai eseguito l'attach del db all'istanza?
>-No, sql server tenta in automatico l'accesso al database tramite
>quell'account di accesso, non gliel'ho specificato io;
Attach all'istanza significa eseguire la stored procedure sp_attach_db, utilizzare il comando CREATE DATABASE...FOR ATTACH o utilizzare l'analoga procedura da SQL Server Management Studio Express.

>Esiste in SQL Server una login mappata all'utente Windows 'NT
>AUTHORITY\SERVIZIO DI RETE'?
>-Dalla panoramica di sql management vedo NT AUTHORITY\System
>che suppongo sia lo stesso
No, NT AUTHORITY\System equivale all'account Windows localsystem.

>>Esiste in SQL Server uno user account a livello di database mappato
>alla login precedente?
>-Non ho capito a cosa ti riferisci in particolare
Leggi questo articolo di Luca per capire cosa si intende per Autenticazione, Autorizzazione, Login e User Account:
http://technet.microsoft.com/it-it/library/cc645510.aspx

>Lo user account ha i permess minimi necessari ad accedere agli
>oggetti che ti servono?
>NT AUTHORITY\System ha i permessi concessi tramite user sa per
>le connessioni sql (Connect SQL) come valore predefinito
No, NT AUTHORITY\System non ha niente a che vedere con la login "sa".
La login NT AUTHORITY\System mappata al localsystem account di Windows, appartiene alle fixed server roles guest e sysadmin.
1) Tu non stai accedendo con questa login;
2) Tu NON DEVI accedere con questa login

>>Il database ha già i permessi per iis e sql server.
>Ovvero?
>La cartella app_data e relativi contenuti, é stata dotata degli
>accessi ai vari membri di iis (iusr, IIS_uisr ecc ecc..)
E che c'entra con SQL Server?
Leggi l'articolo di Luca...

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

-*Web_Horse*- Profilo | Junior Member

Ma perché tenta di accedere al database tramite un account che io non ho ne specificato ne creato?
E' questo che non riesco a capire, comunque ho già iniziato a leggere l'articolo,
grazie mille.

lbenaglia Profilo | Guru

>Ma perché tenta di accedere al database tramite un account che
>io non ho ne specificato ne creato?
Perché è quello utilizzato dall'application pool associato al tuo sito.

>E' questo che non riesco a capire, comunque ho già iniziato a
>leggere l'articolo,
>grazie mille.
Prego.

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

-*Web_Horse*- Profilo | Junior Member

Non ci sto capendo un cavolo.

Queste guide sono criptiche.

lbenaglia Profilo | Guru

>QUindi, stando a quell'articolo, la soluzione sarebbe quella
>di creare un nuovo account di accesso da sql management e
>specificare nella connectionstring di accedere ai dati tramite
>quest'ultimo.
E' quello che ti ho scritto nei primi due post.

>Non é possibile aggiungere l'account authority servizio di rete?
http://forums.asp.net/t/1221631.aspx

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

-*Web_Horse*- Profilo | Junior Member

Nulla, ho aggiunto il maledetto servizio di rete authority a sql server con tutti i permessi come nell'immagine, ma ancora non permette l'accesso:

1671x986 171Kb


Ma come é possibile una cosa del genere, cosa mi sto perdendo per strada, non riesco a capire.

lbenaglia Profilo | Guru

>Ma come é possibile una cosa del genere, cosa mi sto perdendo
>per strada, non riesco a capire.
Perché non hai per nulla chiaro come funziona la security di SQL Server (eppure hai detto di aver letto l'articolo di Luca... lì è spiegato bene ).
OK, hai creato la login.
Ora devi creare lo user account a livello di database (hai le istruzioni passo passo nel link che ti ho indicato nell'ultimo post).
Seleziona il tuo DB e crea un utente mappato alla login che hai appena creato.
Assegna questo utente alla fixed database role "dbo" (sebbene tutte queste permission sono superflue, ma se affrontiamo il discorso GRANT non ne usciamo davvero più ).

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

-*Web_Horse*- Profilo | Junior Member

CI sono diversi problemi:
1- il database database2.mdf non me lo trova perché quando lo vado a cercare con lo strumento integrato di sql management non mi fa navigare nelle sottocartelle
dove ho salvato il progetto all'interno della cartella predefinita di visual studio, apre la cartella e non visualizza nulla;

2-quando clicco in sql management su apri file, il programma si chiude dicendo che il programma ha smesso di funzionare.

Nella cartella database di sql management, mi fa vedere solo i database di sistema..

-*Web_Horse*- Profilo | Junior Member

E poi quando vado a creare una nuova connessione al database da visual studio, con le credenziali del nuovo utente sql che ho creato all'interno di sql management,
mi dice impossibile generare una nuova istanza dell'utente sql, o una cosa del genere..

lbenaglia Profilo | Guru

>CI sono diversi problemi:
>1- il database database2.mdf non me lo trova perché quando lo
>vado a cercare con lo strumento integrato di sql management non
>mi fa navigare nelle sottocartelle
>dove ho salvato il progetto all'interno della cartella predefinita
>di visual studio, apre la cartella e non visualizza nulla;
Utilizza il comando:

CREATE DATABASE <nome del tuo db> ON ( FILENAME = '<percorso>\<tuo file>.mdf' ) FOR ATTACH;


>2-quando clicco in sql management su apri file, il programma
>si chiude dicendo che il programma ha smesso di funzionare.
E come ti potrei aiutare?
Consulta l'event log alla ricerca della causa...

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

-*Web_Horse*- Profilo | Junior Member

A questo punto ho bisogno di ricapitolare tutto:

1-allora, ho creato un'applicazione silverlight che dovrò hostare su un altro server basato su iis, quindi mi serve provare se funziona;
2-quest'applicazione usufruisce di un servizio wcf e linq per ottenere i dati dal database;
3-sul server di sviluppo funziona;
4- su iis no, perché l'accesso al database avviene tramite l'account utente identificato come NT AUTHORITY\SERVIZIO DI RETE che non ha le autorizzazioni necessarie secondo SQL SERVER;
5-vado su sql server e creo un nuovo account per l'identificativo NT AUTHORITY\SERVIZIO DI RETE con relative autorizzazioni, in questo modo si presume che dovrebbe funzionare, ma invece non funziona;
6-provo a creare un nuovo account utente con modalità di accesso sql server;
7-lo creo, vado a testare la connessione direttamente sul database e mi da una serie di problemi tra i quali "impossibile generare un'istata utente sql server";
8-non riesco a trovare su sql management gli strumenti necessari per risolvere il problema.

Con questo schema credo che possiamo procedere a gradi in modo da individuare la soluzione in maniera più rapida.

Allora io ho sviluppato questa applicazione e la devo portare su iis perché ovviamente quando verrà rilasciata, dovrà girare su questo sistema;
allora decido di passare ad IIS 7.0;
quando passo su iis si verifica questo errore che mi dice che l'utente NT AUTHORITY\SERVIZIO DI RETE non ha le autorizzazioni necessarie;
come faccio a far funzionare questo metodo in modo da poter ottenere i dati dal mio database?

Meglio che ricominciamo da qui, se no ci perdiamo.


(ho dimenticato di dirti che non sono un esperto di sql, quindi alcuni passaggi per me potrebbero risultare difficili, per il momento mi serve solamente di riuscire a far funzionare
quest'applicazione su iis nel modo più semplice possibile, poi il tempo per studiare le cose avanzate per me arriverà dopo la pubblicazione dell'applicazione)
Tu non hai mai avuto a che fare con una situazione simile alla mia?...come hai fatto a far funzionare un'applicazione che prima girava su developer server di visual studio, anche su IIS, nella maniera più semplice?

lbenaglia Profilo | Guru

>5-vado su sql server e creo un nuovo account per l'identificativo
>NT AUTHORITY\SERVIZIO DI RETE con relative autorizzazioni, in
>questo modo si presume che dovrebbe funzionare, ma invece non
>funziona;
Se manca lo user account a livello di database NON PUO' FUNZIONARE.

>6-provo a creare un nuovo account utente con modalità di accesso
>sql server;
Se utilizzi la Windows Authentication, una login SQL Server non ti serve a niente.

>come faccio a far funzionare questo metodo in modo da poter ottenere
>i dati dal mio database?
E' tutto il pomeriggio che te lo sto dicendo...

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

-*Web_Horse*- Profilo | Junior Member

Ho aggiornato il messaggio di prima X D

lbenaglia Profilo | Guru

>(ho dimenticato di dirti che non sono un esperto di sql, quindi
>alcuni passaggi per me potrebbero risultare difficili, per il
>momento mi serve solamente di riuscire a far funzionare
>quest'applicazione su iis nel modo più semplice possibile, poi
>il tempo per studiare le cose avanzate per me arriverà dopo la
>pubblicazione dell'applicazione)
Cioè fammi capire, vuoi sviluppare qualcosa senza conoscere gli strumenti per farlo?
Alle elementari facevi 50 addizioni senza conoscere il concetto di somma?

>Tu non hai mai avuto a che fare con una situazione simile alla
>mia?
No.

>...come hai fatto a far funzionare un'applicazione che prima
>girava su developer server di visual studio, anche su IIS, nella
>maniera più semplice?
Non sviluppo ormai da tempo, sono DBA, ma prima di "giocare" con un prodotto lo studio in modo approfondito.

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

-*Web_Horse*- Profilo | Junior Member

SI, lo so..Mi sono ritrovato a passare da uno strumento ad un altro e non ho il tempo di approfondire allo stato attuale, i principi li ho capiti, ma non ho le conoscenze
necessarie per scopi di debug, per questo sto chiedendo aiuto alle community dedicate.

Non ho molto tempo per divulgare il mio lavoro, poi gli aggiornamenti verranno successivamente con l'acquisizione di conoscenze aggiuntive.
Il mio compito adesso é quello di superare questo errore per andare avanti.

Quindi, quando passo su IIS l'account che richiede l'accesso a sql database é differente e non ha le autorizzazioni.
Da sql management creo tale account in modo da dargli le relative autorizzazioni.
Il problema é che ora tale account lo devo autorizzare anche a livello di database.
Il database però non me lo rileva per i motivi prima elencati.
Le risoluzioni?...la stringa che mi hai postato tu, che però non so dove inserirla..Altre?..se gentilmente ce ne sono sempre..

Grazie cmq per l'aiuto finora datomi.

lbenaglia Profilo | Guru

>Il database però non me lo rileva per i motivi prima elencati.
>Le risoluzioni?...la stringa che mi hai postato tu, che però
>non so dove inserirla..
Apri SQL Server Management Studio Express, connettiti all'istanza denominata .\SQLEXPRESS con una login amministrativa ("sa" se hai abilitato la SQL Server Authentication oppure devi loggarti a Windows con un utente appartenentente al gruppo locale Administrator, selezionando Windows Authentication), premi il bottone "New Query", copia il comando che ti ho postato sostituendo opportunamente i valori compresi tra "<" e ">".

>Grazie cmq per l'aiuto finora datomi.
Prego.

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

-*Web_Horse*- Profilo | Junior Member

Mi dice:
Messaggio 102, livello 15, stato 1, riga 1
Sintassi non corretta in prossimità di '<'.

La stringa l'ho modificata in questo modo:
CREATE DATABASE <database2>
ON (FILENAME = '<C:\Users\Luca\Documents\Visual Studio 2008\Projects\SilverlightApplication6\SilverlightApplication6Web\App_Data>\<database2>.mdf ') FOR ATTACH;

lbenaglia Profilo | Guru

>Mi dice:
>Messaggio 102, livello 15, stato 1, riga 1
>Sintassi non corretta in prossimità di '<'.
>
>La stringa l'ho modificata in questo modo:
>CREATE DATABASE <database2>
>ON (FILENAME = '<C:\Users\Luca\Documents\Visual Studio 2008\Projects\SilverlightApplication6\SilverlightApplication6Web\App_Data>\<database2>.mdf
>') FOR ATTACH;

Devi togliere "<" e ">"...

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

-*Web_Horse*- Profilo | Junior Member

Ma se io da visual studio facessi pubblicazione nel provider, é lo stesso?
(tasto destro sul database, pubblica nel provider...)

lbenaglia Profilo | Guru

>Ma se io da visual studio facessi pubblicazione nel provider,
>é lo stesso?
>(tasto destro sul database, pubblica nel provider...)
Non ne ho idea ma tu NON farlo

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

-*Web_Horse*- Profilo | Junior Member

Ok.

La query é stata eseguita, la stringa nel formato esatto é la seguente:
CREATE DATABASE database2
ON (FILENAME = 'C:\Users\Luca\Documents\Visual Studio 2008\Projects\SilverlightApplication6\SilverlightApplication6Web\App_Data\database2.mdf') FOR ATTACH;

ma nella cartella database, nessuna traccia di daabase2.mdf

lbenaglia Profilo | Guru

>Ok.
>
>La query é stata eseguita, la stringa nel formato esatto é la
>seguente:
>CREATE DATABASE database2
>ON (FILENAME = 'C:\Users\Luca\Documents\Visual Studio 2008\Projects\SilverlightApplication6\SilverlightApplication6Web\App_Data\database2.mdf')
>FOR ATTACH;
Si, te l'ho postata

>ma nella cartella database, nessuna traccia di daabase2.mdf
Refresh....
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

-*Web_Horse*- Profilo | Junior Member

Ok, adesso si vede per fortuna.

Ora devo andare sull'account di accesso Authority ecc ecc, col tasto destro > proprietà > database predefinito > database2 ?

lol, non avevo visto il riquadro con il codice nascosto..

lbenaglia Profilo | Guru

>Ok, adesso si vede per fortuna.
Meno male

>Ora devo andare sull'account di accesso Authority ecc ecc, col
>tasto destro > proprietà > database predefinito > database2?
No.
Clicca "+" vicino a database2 > Security > Users > tasto DX > New Users...
User name: NETWORK SERVICE
Login: NT AUTHORITY\NETWORK SERVICE
Default schema: dbo
Database role membership: db_owner

Premi OK.
Modifica la connection string come indicato nella mia prima risposta e verifica se funziona.

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

-*Web_Horse*- Profilo | Junior Member

Ho settato tutto secondo le disposizioni che mi hai consigliato, non mi resta che provare..

-*Web_Horse*- Profilo | Junior Member

SI

SIIIIIIIIIIIIIIII

SIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII

Adesso funziona

FUNZIONAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

Non posso pensare che sono rimasto 5 giorni ad impazzirmi per questa banalità.

Ti ringrazio molto per l'aiuto.

(un'ultima informazione, quando porterò il database sul server che ospiterà la mia applicazione, le autorizzazioni saranno già settate,
o dovrò riaccedere a sql management e rifare lo stesso procedimento?)

Grazie infinite.

lbenaglia Profilo | Guru

>Adesso funziona
Mi sarei stupito del contrario

>(un'ultima informazione, quando porterò il database sul server
>che ospiterà la mia applicazione, le autorizzazioni saranno già
>settate,
>o dovrò riaccedere a sql management e rifare lo stesso procedimento?)
Boh, ora sai tutte le verifiche che devi fare.

>Grazie infinite.
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5