giovedì, gennaio 29, 2009

Asp.Net - Login failed for user 'NT AUTHORITY\NETWORK SERVICE'

NT AUTHORITY\NETWORK SERVICE è l'utente di default usato da IIS6 per l'esecuzione degli Application Pool. Le pagine asp.net girano nel contesto di tale utente.
Quindi le connessioni verso sql server, se viene usata Integrated Secutiry, avvengono con le credenziali di NETWORK SERVICE.
Affinchè l'autenticazione vada a buon fine, l'utente NETWORK SERVICE deve essere riconosciuto da sql server e deve avere accesso al db in questione.


Paginetta di test abc.aspx:

<%@ Page Language="C#"  %>
<html>
<body>
Connection Test: <%=DateTime.Now.ToString()%><br><br>
<%
System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection("data source=localhost;integrated security=sspi;database=northwind");
conn.Open();
conn.Close();
%>
</body>
</html>


L'errore che normalmente si incontra è:
Login failed for user 'NT AUTHORITY\NETWORK SERVICE'

Significato: l'utente non è in grado di autenticarsi sul sql server (utente sconosciuto, password errata, ecc.).

E' necessario aggiungere l'utente a sql server in modo che possa essere riconosciuto.

SqlServer Management Studio
 - Security
    - Logins
      - New Login
         - Login Name --> Search - cercare 'NT AUTHORITY\NETWORK SERVICE' fra gli utenti locali

A questo punto l'utente è presenta nella lista dei login di Sql Server. Riprovando a connettersi dovrebbe apparire un messaggio di errore un po' diverso:
Cannot open database "northwind" requested by the login. The login failed.
Login failed for user 'NT AUTHORITY\NETWORK SERVICE'.

E' necessario abilitare l'utente NetworkService alla lettura e scrittura dei dati sul DB (nel nostro esempio northwind).

 - tasto destro su 'NT AUTHORITY\NETWORK SERVICE'
 - selezionare UserMapping
 - selezionare il DB (ad esempio NorthWind) nella tabella superiore
 - attivare db_datareader e db_datawriter nella tabella inferiore


A questo punto la connessione dovrebbe andare a buon fine e dovrebbe essere possibile eseguire le operazioni classiche su db (select,  update, delete, insert).  Se fosse necessario eseguire operazioni più di alto livello, tipo drop table e similari, sarà necessario assegnare all'utente privilegi più elevati.


Nota: 
Integrated Security=True oppure Integrated Security=SSPI ?
(AFAIK) Sembra che l'opzione true possa essere usata solo con NETSQLClient mentre non sia valida con OleDB. Boh... da quello che si legge in giro sembra che sia consigliato SSPI  (personalmente uso sempre SSPI).

venerdì, gennaio 23, 2009

Microsoft e Sun tagliano posti di lavoro

Ieri la notizia: Microsoft taglia 5000 posti di lavoro. Vari TG nazionali riportano la notizia.
E' invece passata più in sordina la notizia che anche Sun è sulla stessa strada: 1300 licenziamenti.
Se guardiamo ai numeri assoluti il taglio in  Microsoft è più consistente: 5000 contro 1300. Ma se guardiamo alle percentuali sul totale dei dipendenti, è messa peggio Sun: 20% contro il 5% di Microsoft.

TheRegister sostiene che il taglio in Sun è soprattutto nel settore open source.Vedremo che cosa vorrà dire per Java OpenJdk e soprattutto per OpenSolaris.
Sul fronte Microsoft sempre TheRegister sostiene che la versione ufficiale parla di tagli in aree di staff (marketing, sales, finance, legal, ecc.) ma sembra ci saranno taglia anche nell'area "online": Live, MSN, ecc.

mercoledì, gennaio 07, 2009

Segnalazione: MS Database Publishing Wizard

Piccola segnalazione, per chi non conoscesse questo tool: Microsoft Database Publishing Wizard
   http://www.codeplex.com/sqlhost/
Con pochissimi click di mouse è possibile creare uno script Sql con tutti o parte degli oggetti di un DB (tabelle, relazioni, indici, ecc.). Volendo si possono inserire in script anche i dati.
Con lo script sarò quindi possibile ricreare il DB, volendo anche con i dati. Molto utile.

Il tool è eseguibile anche alla riga di comando. Ad esempio:
  • SqlPubWiz.exe script -f -C "Data Source=.\sqlexpress;Initial Catalog=Tests;Integrated Security=True" -schemaonly c:\temp\out.sql
crea lo script con solo lo schema. Togliere -schemaonly per avere anche i dati.

Un'altra cosa molto utile: lo script contiene all'inizio anche le Drop Table per rimuovere le tabelle nel caso esistessero già sul DB target (ovviamente si può disabilitare la creazione delle Drop).