So che questo è quasi un duplicato di: L'errore "Accesso non riuscito per l'utente 'NT AUTHORITY \ IUSR'" in ASP.NET e SQL Server 2008 e Accesso non riuscito per l'utente 'nome utente' - System.Data.SqlClient.SqlException con LINQ in progetto esterno / libreria di classi ma alcune cose non si sommano rispetto ad altre applicazioni sul mio server e non sono sicuro del perché.
Scatole utilizzate:
Casella Web Box
SQL Casella di
prova SQL
La mia applicazione:
Ho un'applicazione Web ASP.NET, che fa riferimento a una libreria di classi che utilizza LINQ-to-SQL. Stringa di connessione impostata correttamente nella libreria di classi. Come per Accesso non riuscito per l'utente 'nome utente' - System.Data.SqlClient.SqlException con LINQ nella libreria di progetto / classe esterna, ho anche aggiunto questa stringa di connessione all'applicazione Web.
La stringa di connessione utilizza le credenziali SQL in questo modo (sia nell'app Web che nella libreria di classi):
<add name="Namespace.My.MySettings.ConnectionStringProduction"
connectionString="Data Source=(SQL Test Box);Initial Catalog=(db name);Persist Security Info=True;User ID=ID;Password=Password"
providerName="System.Data.SqlClient" />
Questa connessione è stata confermata come funzionante aggiungendola a Esplora server. Questa è la stringa di connessione utilizzata dal mio file .dbml.
Il problema:
Ottengo il seguente errore:
System.Data.SqlClient.SqlException: Login failed for user 'DOMAIN\MACHINENAME$'.
Ora fa riferimento a questo L'errore "Accesso non riuscito per l'utente 'NT AUTHORITY \ IUSR'" in ASP.NET e SQL Server 2008 dice che è davvero il servizio di rete locale e l'utilizzo di qualsiasi altro nome non di dominio non funzionerà.
Ma sono confuso perché ho controllato sia SQL Box che SQL Test Box SQL Management Studio ed entrambi hanno NT AUTHORITY/NETWORK SERVICE
in Security -> Logins, a livello di database, che non è elencato in Security -> Users, ma a livello di database Security -> Utenti Ho l'utente visualizzato nella stringa di connessione.
A livello NTFS sul server web, le autorizzazioni hanno il SERVIZIO DI RETE ha il pieno controllo.
Il motivo per cui sono confuso è perché ho molte altre applicazioni Web sul mio server Web, che fanno riferimento a database sia su SQL Box che su SQL Test Box, e funzionano tutte. Ma non riesco a trovare una differenza tra loro e la mia attuale applicazione, a parte il fatto che sto usando una libreria di classi. Che importa? Il controllo delle autorizzazioni NTFS, la configurazione degli accessi di sicurezza a livello di server e database, stringa di connessione e metodo di connessione (credenziali di SQL Server), pool di applicazioni IIS e altre opzioni di cartella sono tutti uguali.
Perché queste applicazioni funzionano senza aggiungere il machinename $ alle autorizzazioni di una delle mie caselle SQL? Ma questo è ciò che l'unico collegamento mi dice di fare per risolvere questo problema.