Connessione a db Access presente sul server

venerdì 28 maggio 2010 - 10.30

pixus Profilo | Newbie

Salve a tutti,
vi scrivo per presentarvi un problema che sto riscontrando, e che mi sta facendo sbattere un bel po' la testa.

Sto realizzando una pagina ASP.NET che deve interrogare un db access che risiede in un server. Io ho libero accesso al server in quanto il db si trova in una cartella condivisa con accesso e ogni tipo di controllo concesso all'utente generico EVERYONE.

Ho nel web.config l'elemento:

<add name="dbMio" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\NOMESERVER\Cartella1\cartella2\mioDatabase.mdb;"
providerName="System.Data.OleDb" />

Mentre nella mia pagina ho il codice:

String stringaConnessione = ConfigurationManager.ConnectionStrings["dbMio"].ConnectionString; OleDbConnection connessione = new OleDbConnection(stringaConnessione); try { connessione.Open(); Response.Write(connessione.ServerVersion.ToString()); connessione.Close(); } catch (Exception ex) { Response.Write(ex.ToString()); //Response.Write("Si è verificato un errore"); }

L'errore che mi viene segnalato è il seguente:

System.Data.OleDb.OleDbException (0x80004005): Il modulo di gestione di database Microsoft Jet non è in grado di aprire il file '\\NOMESERVER\Cartella1\cartella2\mioDatabase.mdb'. Il file è già aperto con accesso esclusivo da un altro utente o è necessario disporre dell'autorizzazione per visualizzare i dati.

Credo sia una questione di permessi (forse per l'utente asp.net? ), ma non ho idee a riguardo.
Qualcuno ha già affrontato questo problema o avrebbe qualche consiglio da darmi?
Grazie in anticipo a tutti!

Gluck74 Profilo | Guru

se proprio il database deve stare in quella cartella, ti consiglio di mapparla per lo meno come cartella virtuale sotto il sito in IIS.

Comunque controlla i permessi standard per l'accesso web. Dipendono dal sistema operativo e IIS.
Quali versioni hai?

____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

pixus Profilo | Newbie

Eh si, purtroppo il db dovrà stare in quella cartella del server mentre il server su cui girerà IIS è in un altro server.
Io al momento sto facendo dei test tenendo IIS nel mio pc, in locale, e provando la connessione a quel file.
Il pc su cui sto facendo girare IIS (versione 7.5) è un Windows 7.

Nel web.config ho messo

<identity impersonate="false" />
<authentication mode ="Windows" />

ma sono piuttosto inesperto e non ne conosco il significato.
Se provo a stampare da codice
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

mi restituisce: IIS APPPOOL\DefaultAppPool
Può essere di aiuto questa informazione?
Grazie nuovamente

TOPOAMORE Profilo | Expert

ciaooo

allora il problema e che tu devi accedere a un server remoto.

Per farlo devi avere un'utenza a disposizione che sia valida per entrambi i server.

Quindi le soluzioni sono 2:
1) se i server sono in dominio puoi usare un'utenza di dominio settando i permessi sulle cartelle interessate
2) oppure devi creare due utenze locali identiche. 1 sul server1 e una sul server2.Le due utenze devono avere stesso nome stessa password.

Una volta scelta la configurazione piu idonea devi settare il web.config cosi':
Se l'utenza è di dominio(soluzione 1)
<identity impersonate="true" user="nomedominio\nomeutente" password="password" />
Se l'utenza è locale:(soluzione 2)
<identity impersonate="true" user="nomeutente" password="password" />

inoltre un bel link per te
http://msdn.microsoft.com/en-us/library/aa292118(VS.71).aspx

>Grazie nuovamente
Prego

__.__.__.__.__.__

ASP 2.0 - VB 2008

Gluck74 Profilo | Guru

mamma mia...... io mi si cono scrornato una settimana con IIS7 e file in rete su altro server!!!!!!
Alla fine non so nemmeno più se ho risolto oppure ho trovato un accrocchio, dalle prove che abbiamo dovuto fare, ho perso il filo!!!

Comunque, sapere il pool che sta girando server perché puoi andare su IIS e vedere com'è configurato. Probabilmente di default.
L'utente non è più asp.net (che non esiste più sui nuovi sistemi), ma in genere l'eccesso viene effettuato con "Network service" ("Servizio di rete" con win ita).
Però su sistemi divisi in più macchine...... mmmm. non ricordo benissimo. Bisogna innanzi tutto vedere anche se cambiano i domini.

Intanto vedi ste cose e poi guarda anche questo:
http://learn.iis.net/page.aspx/243/aspnet-integration-with-iis-7/


P.S.:
io ho risolto come dice TOPOAMORE poiché ero in dominio:
un utente con permessi speciali su web e cartelle, impersonato nel webConfig.
ricorda che non basta, poiché lo stesso utente lo devi configurare in IIS mettendolo come utente che utilizza il POOL e facendogli caricare le impostazioni utente.
(soluzione che a me non piace per niente, ma forse siamo costretti. questione di gusti)
____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

TOPOAMORE Profilo | Expert

>P.S.:
>io ho risolto come dice TOPOAMORE poiché ero in dominio:
>un utente con permessi speciali su web e cartelle, impersonato
>nel webConfig.
>ricorda che non basta, poiché lo stesso utente lo devi configurare
>in IIS mettendolo come utente che utilizza il POOL e facendogli
>caricare le impostazioni utente.
>(soluzione che a me non piace per niente, ma forse siamo costretti.
>questione di gusti)

E se ti dicessi che io l'utente non l'ho configurato sotto IIS????
Cmq l'unica soluzione è quella che ho scritto quando ci sono server diversi in gioco....
Almeno che io conosca.....

__.__.__.__.__.__

ASP 2.0 - VB 2008

pixus Profilo | Newbie

>Quindi le soluzioni sono 2:
>1) se i server sono in dominio puoi usare un'utenza di dominio
>settando i permessi sulle cartelle interessate
>2) oppure devi creare due utenze locali identiche. 1 sul server1
>e una sul server2.Le due utenze devono avere stesso nome stessa
>password.
>
>Una volta scelta la configurazione piu idonea devi settare il
>web.config cosi':
>Se l'utenza è di dominio(soluzione 1)
><identity impersonate="true" user="nomedominio\nomeutente"
>password="password" />
>Se l'utenza è locale:(soluzione 2)
><identity impersonate="true" user="nomeutente" password="password"
>/>

FUNZIONA!! Grazie mille! Ho usato la soluzione 2, creando due utenze locali identiche!

Per la cronaca e per coloro che si troveranno a dover affrontare come me il problema aggiungo un dettaglio:
dopo aver creato l'identità mi è comparso un errore del tipo:

"identity does not have write access to Temporary ASP.NET Files ....."

E' stato sufficiente lanciare il prompt dei comandi come amministratore e fare il comando (con al posto di username il nome dell'utenza creata):
C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319 aspnet_regiis -ga "username"

Grazie nuovamente a tutti voi per l'aiuto fondamentale che mi avete dato!

TOPOAMORE Profilo | Expert

di nulla

ciaooooo

__.__.__.__.__.__

ASP 2.0 - VB 2008
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