My ASP.NET v3.5 web application is throwing the following exception when it attempts to open a connection to a SQL Server 2008 database:
Cannot open database "MyDbName"
requested by the login. The login
failed. Login failed for user ‘NT
The thing is, I’ve added
NT AUTHORITY\IUSR to the server’s list of logins, and to the database’s list of users. For the server, I’ve granted the user the Public role, and for the database I’ve granted
I’ve also granted the same for
NT AUTHORITY\NETWORK SERVICE, which is the identity that the application pool is running under.
The web application is hosted by IIS7, if that makes a difference. The problem repros when the DB and IIS are on the same physical machine as well.
The trick here is that
NT AUTHORITY\NETWORK SERVICE actually appears to the database as
DOMAINNAME\MACHINENAME$ (note the
$ sign!). That is, when you cross the machine boundary from your web server to the SQL Server, SQL Server sees the machine account if you use the
NETWORK SERVICE or
LOCAL SYSTEM accounts. If you use any other non-domain account, SQL Server will not receive your credentials.
I’m a bit puzzled by your error message. Truth be told, I don’t think that when the DB is on another box, you’ll see anything other than
Login Failed for NT AUTHORITY\ANONYMOUS LOGON.
IUSR is used for anonymous websites, and can’t pass over the wire to SQL Server. You may find a way for it to work if you’re doing everything on the same machine, but I’d never know because I’d never do it that way… 😉
Answered By – Dave Markle
Answer Checked By – David Goodson (BugsFixing Volunteer)