Configurazione di un server di database per la pubblicazione con Distribuzione Web
di Jason Lee
In questo argomento viene descritto come configurare un server di database SQL Server 2008 R2 per supportare la distribuzione e la pubblicazione Web.
Le attività descritte in questo argomento sono comuni a ogni scenario di distribuzione, non importa se i server Web sono configurati per l'uso del servizio agente remoto IIS Web Deployment Tool (Distribuzione Web), del gestore distribuzione Web o della distribuzione offline o dell'applicazione in esecuzione in un singolo server Web o in una server farm. Il modo in cui si distribuisce il database può cambiare in base ai requisiti di sicurezza e ad altre considerazioni. Ad esempio, è possibile distribuire il database con o senza dati di esempio e distribuire i mapping dei ruoli utente o configurarli manualmente dopo la distribuzione. Tuttavia, la modalità di configurazione del server di database rimane invariata.
Non è necessario installare prodotti o strumenti aggiuntivi per configurare un server di database per supportare la distribuzione Web. Supponendo che il server di database e il server Web vengano eseguiti in computer diversi, è sufficiente:
- Consentire a SQL Server di comunicare tramite TCP/IP.
- Consentire il traffico di SQL Server attraverso qualsiasi firewall.
- Assegnare all'account del computer server Web un account di accesso di SQL Server.
- Eseguire il mapping dell'account di accesso del computer a tutti i ruoli del database necessari.
- Assegnare all'account che eseguirà la distribuzione un account di accesso di SQL Server e le autorizzazioni di creazione di database.
- Per supportare le distribuzioni ripetute, eseguire il mapping dell'account di accesso dell'account di distribuzione al ruolo del database db_owner .
Questo argomento illustra come eseguire ognuna di queste procedure. Le attività e le procedure dettagliate in questo argomento presuppongono che si inizi con un'istanza predefinita di SQL Server 2008 R2 in esecuzione in Windows Server 2008 R2. Prima di continuare, assicurarsi che:
- Windows Server 2008 R2 Service Pack 1 e tutti gli aggiornamenti disponibili sono installati.
- Il server è aggiunto a un dominio.
- Il server ha un indirizzo IP statico.
- SQL Server 2008 R2 Service Pack 1 e tutti gli aggiornamenti disponibili sono installati.
L'istanza di SQL Server deve includere solo il ruolo motore di database Services, incluso automaticamente in qualsiasi installazione di SQL Server. Tuttavia, per semplificare la configurazione e la manutenzione, è consigliabile includere strumenti di gestione - Strumenti di base e gestione - Ruoli del server completi .
Nota
Per altre informazioni sull'aggiunta di computer a un dominio, vedere Aggiunta di computer al dominio e accesso. Per altre informazioni sulla configurazione di indirizzi IP statici, vedere Configurare un indirizzo IP statico. Per altre informazioni sull'installazione di SQL Server, vedere Installazione di SQL Server 2008 R2.
Abilitare l'accesso remoto a SQL Server
SQL Server usa TCP/IP per comunicare con i computer remoti. Se il server di database e il server Web si trovano in computer diversi, è necessario:
- Configurare le impostazioni di rete di SQL Server per consentire la comunicazione tramite TCP/IP.
- Configurare qualsiasi firewall hardware o software per consentire il traffico TCP (e in alcuni casi il traffico UDP) dell'utente sulle porte usate dall'istanza di SQL Server.
Per consentire a SQL Server di comunicare tramite TCP/IP, usare Gestione configurazione SQL Server per modificare la configurazione di rete per l'istanza di SQL Server.
Per consentire a SQL Server di comunicare tramite TCP/IP
Scegliere Tutti i programmi dal menu Start, fare clic su Microsoft SQL Server 2008 R2, scegliere Strumenti di configurazione e quindi fare clic su Gestione configurazione SQL Server.
Nel riquadro della visualizzazione albero espandere Configurazione di rete di SQL Server e quindi fare clic su Protocolli per MSSQLSERVER.
Nota
Se sono state installate più istanze di SQL Server, verrà visualizzato un elemento Protocols for[instance name] per ogni istanza. È necessario configurare le impostazioni di rete in base all'istanza.
Nel riquadro dei dettagli fare clic con il pulsante destro del mouse sulla riga TCP/IP e quindi scegliere Abilita.
Nella finestra di dialogo Avviso fare clic su OK.
È necessario riavviare il servizio MSSQLSERVER prima che la nuova configurazione di rete venga applicata. A tale scopo, è possibile eseguire questa operazione al prompt dei comandi, dalla console Servizi o da SQL Server Management Studio. In questa procedura si userà SQL Server Management Studio.
Chiudere Gestione configurazione SQL Server.
Scegliere Tutti i programmi dal menu Start, fare clic su Microsoft SQL Server 2008 R2 e quindi su SQL Server Management Studio.
Nella finestra di dialogo Connetti al server digitare il nome del server di database nella casella Nome server e quindi fare clic su Connetti.
Nel riquadro Esplora oggetti fare clic con il pulsante destro del mouse sul nodo del server padre (ad esempio, TESTDB1) e quindi scegliere Riavvia.
Nella finestra di dialogo Microsoft SQL Server Management Studio fare clic su Sì.
Al riavvio del servizio, chiudere SQL Server Management Studio.
Per consentire il traffico di SQL Server attraverso un firewall, è prima necessario conoscere le porte in uso dell'istanza di SQL Server. Questo dipende dalla modalità di creazione e configurazione dell'istanza di SQL Server:
- Un'istanza predefinita di SQL Server è in ascolto delle richieste (e risponde) sulla porta TCP 1433.
- Un'istanza denominata di SQL Server è in ascolto delle richieste (e risponde) su una porta TCP assegnata dinamicamente.
- Se il servizio SQL Server Browser è abilitato, i client possono eseguire query sul servizio sulla porta UDP 1434 per individuare la porta TCP da usare per una determinata istanza di SQL Server. Tuttavia, questo servizio viene spesso disabilitato per motivi di sicurezza.
Supponendo di usare un'istanza predefinita di SQL Server, è necessario configurare il firewall per consentire il traffico.
Direzione | Da porta | Da convertire | Tipo di porta |
---|---|---|---|
In ingresso | Qualsiasi | 1433 | TCP |
In uscita | 1433 | Any | TCP |
Nota
Tecnicamente, un computer client userà una porta TCP assegnata in modo casuale tra 1024 e 5000 per comunicare con SQL Server ed è possibile limitare di conseguenza le regole del firewall. Per altre informazioni sulle porte e i firewall di SQL Server, vedere Numeri di porta TCP/IP necessari per comunicare con SQL tramite un firewall e Procedura: Configurare un server per l'ascolto su una porta TCP specifica (Gestione configurazione SQL Server).For more information on SQL Ports and Firewalls, see TCP port numbers required to communicate to SQL over a firewall and How to: Configure a Server to Listen on a Specific TCP Port (Gestione configurazione SQL Server).
Nella maggior parte degli ambienti Windows Server è probabile che sia necessario configurare Windows Firewall nel server di database. Per impostazione predefinita, Windows Firewall consente tutto il traffico in uscita, a meno che una regola non lo impedisca in modo specifico. Per consentire al server Web di raggiungere il database, è necessario configurare una regola in ingresso che consenta il traffico TCP sul numero di porta usato dall'istanza di SQL Server. Se si usa un'istanza predefinita di SQL Server, è possibile usare la procedura successiva per configurare questa regola.
Per configurare Windows Firewall per consentire la comunicazione con un'istanza predefinita di SQL Server
Nel server di database scegliere Strumenti di amministrazione dal menu Start e quindi fare clic su Windows Firewall con sicurezza avanzata.
Nel riquadro della visualizzazione albero fare clic su Regole in ingresso.
Nel riquadro Azioni, in Regole in ingresso, fare clic su Nuova regola.
Nella pagina Tipo di regola della Creazione guidata nuova regola in ingresso selezionare Porta e quindi fare clic su Avanti.
Nella pagina Protocollo e porte verificare che TCP sia selezionato e nella casella Porte locali specifiche digitare 1433 e quindi fare clic su Avanti.
Nella pagina Azione lasciare selezionata l'opzione Consenti connessione e fare clic su Avanti.
Nella pagina Profilo lasciare selezionata l'opzione Dominio, deselezionare le caselle di controllo Privato e Pubblico e quindi fare clic su Avanti.
Nella pagina Nome assegnare alla regola un nome descrittivo appropriato( ad esempio, istanza predefinita di SQL Server - accesso alla rete) e quindi fare clic su Fine.
Per altre informazioni sulla configurazione di Windows Firewall per SQL Server, in particolare se è necessario comunicare con SQL Server tramite porte non standard o dinamiche, vedere Procedura: Configurare Windows Firewall per motore di database Access.
Configurare gli account di accesso e le autorizzazioni del database
Quando si distribuisce un'applicazione Web in Internet Information Services (IIS), l'applicazione viene eseguita usando l'identità del pool di applicazioni. In un ambiente di dominio le identità del pool di applicazioni usano l'account computer del server in cui vengono eseguiti per accedere alle risorse di rete. Gli account computer hanno il formato [nome di dominio]</strong>[nome computer]$, ad esempio FABRIKAM\TESTWEB1$. Per consentire all'applicazione Web di accedere a un database attraverso la rete, è necessario:
- Aggiungere un account di accesso per l'account computer del server Web all'istanza di SQL Server.
- Eseguire il mapping dell'account di accesso del computer a tutti i ruoli del database necessari (in genere db_datareader e db_datawriter).
Se l'applicazione Web è in esecuzione in una server farm anziché in un singolo server, sarà necessario ripetere queste procedure per ogni server Web nella server farm.
Nota
Per altre informazioni sulle identità del pool di applicazioni e sull'accesso alle risorse di rete, vedere Identità del pool di applicazioni.
È possibile affrontare queste attività in diversi modi. Per creare l'account di accesso, è possibile:
- Creare manualmente l'account di accesso nel server di database usando Transact-SQL o SQL Server Management Studio.
- Usare un progetto di SQL Server 2008 Server in Visual Studio per creare e distribuire l'account di accesso.
Un account di accesso di SQL Server è un oggetto a livello di server, anziché un oggetto a livello di database, pertanto non dipende dal database che si vuole distribuire. Di conseguenza, è possibile creare l'account di accesso in qualsiasi momento e l'approccio più semplice consiste spesso nel creare manualmente l'account di accesso nel server di database prima di iniziare a distribuire i database. È possibile usare la procedura successiva per creare un account di accesso in SQL Server Management Studio.
Per creare un account di accesso di SQL Server per l'account computer del server Web
Nel server di database scegliere Tutti i programmi dal menu Start, fare clic su Microsoft SQL Server 2008 R2 e quindi su SQL Server Management Studio.
Nella finestra di dialogo Connetti al server digitare il nome del server di database nella casella Nome server e quindi fare clic su Connetti.
Nel riquadro Esplora oggetti fare clic con il pulsante destro del mouse su Sicurezza, scegliere Nuovo e quindi fare clic su Account di accesso.
Nella casella Nome account di accesso della finestra di dialogo Account di accesso digitare il nome dell'account computer del server Web, ad esempio FABRIKAM\TESTWEB1$.
Fare clic su OK.
A questo punto, il server di database è pronto per la pubblicazione di Distribuzione Web. Tuttavia, tutte le soluzioni distribuite non funzioneranno finché non si esegue il mapping dell'account del computer ai ruoli del database necessari. Per eseguire il mapping dell'account di accesso ai ruoli del database è necessario molto altro, perché non è possibile eseguire il mapping dei ruoli fino a quando non è stato distribuito il database. Per eseguire il mapping dell'account di accesso del computer ai ruoli del database necessari, è possibile:
- Assegnare manualmente i ruoli del database all'account di accesso dopo aver distribuito il database per la prima volta.
- Usare uno script di post-distribuzione per assegnare i ruoli del database all'account di accesso.
Per altre informazioni sull'automazione della creazione di account di accesso e mapping dei ruoli del database, vedere Distribuzione di appartenenze ai ruoli del database in ambienti di test. In alternativa, è possibile usare la procedura successiva per eseguire manualmente il mapping dell'account di accesso del computer ai ruoli del database necessari. Tenere presente che non è possibile eseguire questa procedura fino a quando non è stato distribuito il database.
Per eseguire il mapping dei ruoli del database all'account del computer del server Web
Aprire SQL Server Management Studio come in precedenza.
Nel riquadro Esplora oggetti espandere il nodo Sicurezza, espandere il nodo Account di accesso e quindi fare doppio clic sull'account di accesso del computer, ad esempio FABRIKAM\TESTWEB1$.
Nella finestra di dialogo Proprietà account di accesso fare clic su Mapping utenti.
Nella tabella Utenti mappati a questa tabella di accesso selezionare il nome del database, ad esempio ContactManager.
Nell'elenco Appartenenza al ruolo database per: [nome database] selezionare le autorizzazioni necessarie. Nel caso della soluzione di esempio Contact Manager, è necessario selezionare i ruoli db_datareader e db_datawriter .
Fare clic su OK.
Anche se il mapping manuale dei ruoli del database è spesso più appropriato per gli ambienti di test, è meno consigliabile per le distribuzioni automatiche o con un clic in ambienti di staging o di produzione. Per altre informazioni sull'automazione di questo tipo di attività, vedere Distribuzione di appartenenze ai ruoli del database in Ambienti di test.
Nota
Per altre informazioni sui progetti server e sui progetti di database, vedere Progetti di database di SQL Server di Visual Studio 2010.
Configurare le autorizzazioni per l'account di distribuzione
Se l'account che si userà per eseguire la distribuzione non è un amministratore di SQL Server, sarà necessario creare anche un account di accesso per questo account. Per creare il database, l'account deve essere membro del ruolo del server dbcreator o disporre di autorizzazioni equivalenti.
Nota
Quando si usa Distribuzione Web o VSDBCMD per distribuire un database, è possibile usare credenziali di Windows o credenziali di SQL Server (se l'istanza di SQL Server è configurata per supportare l'autenticazione in modalità mista). La procedura successiva presuppone che si desideri usare le credenziali di Windows, ma non c'è nulla che impedisca di specificare un nome utente e una password di SQL Server nel stringa di connessione quando si configura la distribuzione.
Per configurare le autorizzazioni per l'account di distribuzione
Aprire SQL Server Management Studio come in precedenza.
Nel riquadro Esplora oggetti fare clic con il pulsante destro del mouse su Sicurezza, scegliere Nuovo e quindi fare clic su Account di accesso.
Nella finestra di dialogo Account di accesso - Nuovo digitare il nome dell'account di distribuzione, ad esempio FABRIKAM\matt.
Nel riquadro Selezionare una pagina fare clic su Ruoli del server.
Selezionare dbcreator e quindi fare clic su OK.
Per supportare le distribuzioni successive, è anche necessario aggiungere l'account di distribuzione al ruolo db_owner nel database dopo la prima distribuzione. Ciò è dovuto al fatto che nelle distribuzioni successive si modifica lo schema di un database esistente, anziché creare un nuovo database. Come descritto nella sezione precedente, non è possibile aggiungere un utente a un ruolo del database fino a quando non è stato creato il database per motivi ovvi.
Per eseguire il mapping dell'account di distribuzione al ruolo del database db_owner
Aprire SQL Server Management Studio come in precedenza.
Nella finestra Esplora oggetti espandere il nodo Sicurezza, espandere il nodo Account di accesso e quindi fare doppio clic sull'account di accesso del computer, ad esempio FABRIKAM\matt.
Nella finestra di dialogo Proprietà account di accesso fare clic su Mapping utenti.
Nella tabella Utenti mappati a questa tabella di accesso selezionare il nome del database, ad esempio ContactManager.
Nell'elenco Appartenenza al ruolo database per: [nome database] selezionare il ruolo db_owner .
Fare clic su OK.
Conclusione
Il server di database dovrebbe ora essere pronto per accettare distribuzioni di database remoti e consentire ai server Web IIS remoti di accedere ai database. Prima di tentare di distribuire e usare i database, è consigliabile controllare questi punti chiave:
- SQL Server è stato configurato per accettare connessioni TCP/IP remote?
- Sono stati configurati firewall per consentire il traffico di SQL Server?
- È stato creato un account di accesso del computer per ogni server Web che accederà a SQL Server?
- La distribuzione del database include uno script per creare mapping dei ruoli utente oppure è necessario crearli manualmente dopo la distribuzione del database per la prima volta?
- È stato creato un account di accesso per l'account di distribuzione e aggiunto al ruolo del server dbcreator ?
Altre informazioni
Per indicazioni sulla distribuzione di progetti di database, vedere Distribuzione di progetti di database. Per indicazioni sulla creazione di appartenenze ai ruoli del database eseguendo uno script post-distribuzione, vedere Distribuzione di appartenenze ai ruoli del database in ambienti di test. Per indicazioni su come soddisfare i problemi di distribuzione univoci che i database di appartenenza presentano, vedere Distribuzione di database di appartenenza in ambienti aziendali.