Permission in Asp.net

venerdì 17 giugno 2011 - 17.46

Cuky Profilo | Newbie

Ciao a todos, chiedo chiarimenti sul discorso dei permessi in Asp.Net.
Non sono per niente un novellino di Asp.net però vi giuro che ci sono ancora dei lati abbastanza oscuri riguardanti i permessi. Prima di scrivere ho letto articoli web e capitoli dei libri sull'argomento ma mi sembra che nessuno faccia chiarezza.

Questa volta non riesco a dare i permessi per l'upload in asp.net. Riesco però a creare un file con l'istruzione FIle.Create("file.txt") nella stessa directory in cui provo fare l'upload. Ma è possibile?

Uso Visual Studio 2010, Asp.net 4.0 uso il web server di test locale.

Grazie

Gluck74 Profilo | Guru

che errore hai?
Dove sta la cartella? è mappata su IIS?
dacci informazioni in più


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

Cuky Profilo | Newbie

L'eccezione è UnauthorizedAccessException.

Lo stack:
in System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
in System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath)
in System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
in System.IO.FileStream..ctor(String path, FileMode mode)
in System.Web.HttpPostedFile.SaveAs(String filename)
in System.Web.UI.WebControls.FileUpload.SaveAs(String filename)
in WebApplication1.Pages.GestioneDocumenti.UploadBtn_Click(Object sender, EventArgs e) in C:\Projects\INTRANET\WebApplication1\Pages\GestioneDocumenti.aspx.cs:riga 158
in System.Web.UI.WebControls.Button.OnClick(EventArgs e)

Cosa intendi per mappata su IIS? Al momento lo sto testando sul web server di test integrato in VS 2010, ma non riesco a fare l'upload in entrambi i casi.

Grazie per l'attenzione

Gluck74 Profilo | Guru

Puoi trovarti in 2 situazioni diverse:
1 - La cartella è stata creata direttamente nel sito web, tramite ad esempio visualstudio con "aggiungi cartella". Quindi ad esempio:
c:\inetpub\wwwroot\ilmiosito è la cartella root del sito
c:\inetpub\wwwroot\ilmiosito\uploads è la cartella dove devono essere messi i file

2 - la cartella sta da un'altra parte ed è stata "mappata" da IIS con "aggiungi virtual directory"
c:\inetpub\wwwroot\ilmiosito è la cartella root del sito
d:\store\shared\uploadsWeb - accedibile quindi dal sito web con "~/uploadsweb"

nel primo caso la cartella eredita i permessi del sito e non dovrebbero essere necessarie ulteriori configurazioni
nel secondo caso invece bisogna gestire i permessi di accesso.

Controlla lo stato della cartella e fammi sapere che permessi ha.
Inoltre controlla l'ApplicationPool del tuo sito che utente utilizza.


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

Cuky Profilo | Newbie

Il problema era proprio derivante dal fatto di aver creato la cartella in Visual studio e non averla mappata...
Grazie

Già che ci sono potresti sciogliermi questo dubbio?

In generale quando asp.net esegue del codice server questo verrà eseguito come ogni cosa sotto un account windows. Non riesco a capire come si integrano i due concetti seguenti, mi faresti un piacere dicendomi se quello che scrivo è corretto ed eventualmente chi ha la priorità.

Un applicazione ASP.NET viene eseguita da un application pool per il quale viene indicato un account in IIS. (so come farlo).
Un applicazione ASP.NET può usare l'impersonate nel web.config per "impersonare" un account di sistema (se impostati user e password) oppure l'account autenticato con la windows authentication (se si usa la form authentication l'impersonate viene ignorato). Nel caso in cui non siano specificate le credenziali o non sia autenticato viene impersonato l'utente anonimo (si può scegliere ma di norma è IUSR_nomemacchina).

Gluck74 Profilo | Guru

http://learn.iis.net/page.aspx/140/understanding-built-in-user-and-group-accounts-in-iis-7/
http://forums.iis.net/t/1150222.aspx


Dovresti rosolvere i tuoi dubbi.
Leggi bene l'articolo.
In breve comunque:
IUSR_nomemacchina (IIS 6), IUSR (IIS 7) è l'utente se hai abilitato l'accesso anonimo, altrimenti viene utilizzato l'utente che fa il login, e viene usato per l'accesso alle pagine web e/o cartelle web configurabile nel web.config.
L'identità che specifichi per il Pool, è quella che viene usata per l'accesso alle risorse del sistema, tipo accesso alle cartelle e/o SQL Server.

Ciao

____________
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.
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5