IIS authentication problem with "Network Service"..

Hi, i have the following setup:
IIS 6.0 on W2K3.
A .NET 2.0 app.
A site with IUSR as anonymous access acount, running in the default app pool.
A sub folder "admin" in this site that has only the access config changed from the parent, using integrated win auth/digest domain auth with the domain in realm. No anonymous access..

I thought this would feed the users domain username to the app, but not so.. The app recieves all requests from the "NETWORK SERVICE"..

I guess this have to do something with the default app pool, and/or the auth methods used.. but i cant find any specifics on this on the web.. Anyone got an idea?

What this should work like is that all users/guest should be anonymous at the root, but the admin folder should require authentication through the domain. The users get the login box as intended now, but is still authenticated as "NETWORK SERVICE"..
LVL 15
Who is Participating?

Improve company productivity with a Business Account.Sign Up

AndresMConnect With a Mentor Commented:
in asp.net 2.0 you have to specify that the app needs impersonation; by default asp.net does'nt impersonate

To impersonate the Microsoft Internet Information Services (IIS) authenticating user on every request for every page in an ASP.NET application, you must include an <identity> tag in the Web.config file of this application and set the impersonate attribute to true. For example: <identity impersonate="true" />
mattisflonesAuthor Commented:
Hi there AndresM, i tried your tip, but got this error:

System.Data.SqlClient.SqlException: User does not have permission to perform this action.

My app is highly SQLE dependent, and this surprised me a bit.. there is no way to give a user acces but on NTFS level.. and thats done!
Now your app is impersonating, if you are using integrated authentication with SQL, you have to add the login in SQL Server for each user. Other option, use SQL authentication against SQL Server, with a generic user.
PS: If your SQL Server is in other machine than the web server, integrated authentication to SQL is little bit more complicated.
Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

mattisflonesAuthor Commented:
The funny part is that if i use <Page.User.Identity.Name.ToString()> in C# it gives me nothing.. On the devmachine it gives me the right (same) user name..
mattisflonesAuthor Commented:
I am using SQL 2005 Express and cant add users.. Its all local, running from the App_Data folder..
mattisflonesAuthor Commented:
Btw, this is my connstring:
<add name="ASPNETDB" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\ASPNETDB.MDF;Integrated Security=True;User Instance=True" providerName="System.Data.SqlClient"/>
Ok, if you don't impersonate, you can still obtain who is accesing your page, with a variable called 'user' I think. But the entire w3wp.exe process (IIS process) will run under network service (by default) or under the account configured in the IIS app pool. If you impersonate, w3wp.exe will run threads under the context of the user logged on to the website in that moment, that's why when you impersonate you get access denied in SQL.
mattisflonesAuthor Commented:
Thats the Page.User in C# that dont give me anything.. :-(

The thought you had about giving a generic user to access the SQL server is a good one, but i must admit i dont know how to do that with a SQLE install.. It seems to be limited what you can do with a attached DB..

Do you know any good tricks?

mattisflonesAuthor Commented:
I tried:

<add name="ASPNETDB" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\ASPNETDB.MDF;Database=ASPNETDB;User ID=sa;Password=<password>;" providerName="System.Data.SqlClient"/>

But got:

Cannot create file 'C:\Inetpub\SITES\test\DK2\App_Data\ASPNETDB_log.LDF' because it already exists. Change the file path or the file name, and retry the operation.
Could not open new database 'ASPNETDB'. CREATE DATABASE is aborted.
Could not attach file 'C:\Inetpub\SITES\test\DK2\App_Data\ASPNETDB.MDF' as database 'ASPNETDB'.
File activation failure. The physical file name "U:\Dev\ASP.NET\DataKjeden.no\5\App_Data\ASPNETDB_log.ldf" may be incorrect.

A wee bit of everything i guess.. :-)
mattisflonesAuthor Commented:
And thats with <identity impersonate="true" />
mattisflonesAuthor Commented:
The solution was:

Use: <identity impersonate="true" /> in web config.

Change the default generated ".\SQLEXPRESS" bit in the connstring to "<SERVERNAME>\SQLEXPRESS", and "User Instance=True" to User Instance=False"

Works like a charm!

The Page.User func in C# still does not work, but <System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString()> does!

The site can now run IUSR or whatever for the root, and use domain security for the admin section..
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.