Condividi tramite


Distribuzione dei database di appartenenza negli ambienti aziendali

di Jason Lee

Nota

Poiché questo articolo è stato scritto, i provider di appartenenze ASP.NET sono stati sostituiti da ASP.NET Identity. È consigliabile aggiornare le app per usare ASP.NET Identity Platform anziché i provider di appartenenze in primo piano al momento della scrittura di questo articolo. ASP.NET Identity presenta diversi vantaggi rispetto al sistema di appartenenza ASP.NET, tra cui :

  • Prestazioni migliori
  • Miglioramento dell'estendibilità e della testability
  • Supporto per OAuth, OpenID Connect e autenticazione a due fattori
  • Supporto delle identità basate sulle attestazioni
  • Migliore interoperabilità con ASP.Net Core

In questo argomento vengono illustrate le considerazioni e le problematiche principali che è necessario superare quando si effettua il provisioning di ASP.NET database dei servizi applicazioni (più comunemente definiti database di appartenenza) in ambienti di test, gestione temporanea o di produzione. Descrive anche gli approcci che è possibile usare per soddisfare queste sfide.

Questo argomento fa parte di una serie di esercitazioni basate sui requisiti di distribuzione aziendali di una società fittizia denominata Fabrikam, Inc. Questa serie di esercitazioni usa una soluzione di esempio, la soluzione Contact Manager, per rappresentare un'applicazione Web con un livello realistico di complessità, tra cui un'applicazione ASP.NET MVC 3, un servizio Windows Communication Foundation (WCF) e un progetto di database.

Il metodo di distribuzione al centro di queste esercitazioni si basa sull'approccio split project file descritto in Informazioni sul file di progetto, in cui il processo di compilazione è controllato da due file di progetto, uno contenente le istruzioni di compilazione applicabili a ogni ambiente di destinazione e uno contenente le impostazioni di compilazione e distribuzione specifiche dell'ambiente. In fase di compilazione, il file di progetto specifico dell'ambiente viene unito al file di progetto indipendente dall'ambiente per formare un set completo di istruzioni di compilazione.

Quali sono i problemi relativi alla distribuzione di un database di appartenenza?

Nella maggior parte dei casi, quando si progetta una strategia di distribuzione per un database, è prima di tutto necessario considerare i dati da distribuire. In un ambiente di sviluppo o test, è possibile distribuire i dati dell'account utente per facilitare test rapidi e semplici. In un ambiente di gestione temporanea o di produzione è molto improbabile che si voglia distribuire i dati dell'account utente.

Sfortunatamente, ASP.NET database di appartenenza presentano alcune problematiche specifiche che rendono questa decisione molto più complessa:

  • Una distribuzione solo schema lascerà il database di appartenenza in uno stato non operativo. Ciò è dovuto al fatto che il database di appartenenza include alcuni dati di configurazione (nella tabella aspnet_SchemaVersions ) richiesti dal database per funzionare. Di conseguenza, se si esegue una distribuzione solo schema del database di appartenenza per escludere i dati dell'account utente, è necessario eseguire uno script post-distribuzione per aggiungere i dati di configurazione essenziali.
  • A seconda della configurazione del database di appartenenza, il provider di appartenenze può usare la chiave del computer per crittografare le password e archiviarle nel database. In questo caso, tutti i dati dell'account utente distribuiti con il database diventeranno inutilizzabili nel server di destinazione. Per questo motivo, la distribuzione dei dati dell'account utente non è uno scenario supportato.

Scelta di una strategia di database di appartenenza

Usare queste linee guida quando si sceglie come effettuare il provisioning di un database di appartenenza in un ambiente server aziendale:

  • Laddove possibile, non distribuire i database di appartenenza. Creare invece manualmente il database di appartenenza nel server di database di destinazione. Se lo schema del database di appartenenza non è stato personalizzato, è sufficiente crearne uno nuovo nella destinazione usando lo strumento di registrazione ASP.NET SQL Server (aspnet_regsql.exe).
  • Se non è possibile distribuire un database di appartenenza, ad esempio se sono state apportate modifiche complete allo schema del database, è necessario eseguire una distribuzione solo schema del database di appartenenza, per escludere i dati dell'account utente e quindi eseguire uno script di post-distribuzione per aggiungere i dati di configurazione necessari. È possibile trovare indicazioni generali su questi approcci in Procedura: Distribuire il database di appartenenza ASP.NET senza includere account utente.

È importante ricordare che è probabile che lo schema del database di appartenenza sia abbastanza statico. Anche se è stato personalizzato il database di appartenenza, è improbabile che sia necessario aggiornare regolarmente lo schema, ma non cambierà con la stessa frequenza del codice in un'applicazione Web o in un progetto di database. Di conseguenza, non è necessario includere il database di appartenenza in alcun processo di distribuzione automatizzato o in un singolo passaggio.

Uso di VSDBCMD per aggiornare uno schema del database di appartenenza

Se si modifica la struttura del database di appartenenza dopo la prima distribuzione, potrebbe non essere necessario usare lo strumento di distribuzione Web Internet Information Services (IIS) per ridistribuire il database. La funzionalità di distribuzione del database in Distribuzione Web non include la possibilità di apportare aggiornamenti differenziali a un database di destinazione. La distribuzione Web deve invece eliminare e ricreare il database. Ciò significa che si perdono tutti i dati dell'account utente esistenti, in genere indesiderati in ambienti di staging o di produzione.

L'alternativa consiste nell'usare l'utilità VSDBCMD per aggiornare lo schema del database di destinazione. VSDBCMD include due funzionalità importanti. In primo luogo, può importare lo schema di un database esistente in un file con estensione dbschema. In secondo luogo, può distribuire un file con estensione dbschema in un database esistente come aggiornamento differenziale, il che significa che apporta solo le modifiche necessarie per aggiornare il database di destinazione e non si perdono dati.

È possibile usare questi passaggi generali per aggiornare uno schema del database di appartenenza:

  1. Usare l'azione di importazione VSDBCMD per generare un file con estensione dbschema per il database di appartenenza all'origine. Questa procedura è descritta in Procedura: Importare uno schema da un prompt dei comandi.
  2. Usare l'azione di distribuzione VSDBCMD per distribuire il file con estensione dbschema nel database di appartenenza di destinazione. Questa procedura è descritta in Informazioni di riferimento sulla riga di comando per VSDBCMD.EXE (distribuzione e importazione dello schema).This procedure is described in Command-Line Reference for VSDBCMD.EXE (Deployment and Schema Import).

Conclusione

In questo argomento sono state descritte alcune delle problematiche che possono verificarsi quando è necessario effettuare il provisioning di ASP.NET database di appartenenza in vari ambienti di destinazione. In particolare, ha spiegato perché le distribuzioni solo schema lasceranno il database di appartenenza in uno stato non operativo e perché la distribuzione dei dati dell'account utente non è supportata. L'argomento ha inoltre presentato indicazioni su come effettuare il provisioning, distribuire e aggiornare i database di appartenenza in scenari diversi.

Altre informazioni

Per altre indicazioni ed esempi su come usare VSDBCMD, vedere Informazioni di riferimento sulla riga di comando per VSDBCMD.EXE (distribuzione e importazione dello schema) e Procedura: Importare uno schema da un prompt dei comandi. Per altre informazioni sull'uso di aspnet_regsql.exe per creare database di appartenenza, vedere ASP.NET SQL Server Strumento di registrazione (aspnet_regsql.exe).For more information on using aspnet_regsql.exe to create membership databases, see ASP.NET SQL Server Registration Tool (aspnet_regsql.exe). Per indicazioni più generali sulla distribuzione dei database di appartenenza, vedere Procedura: Distribuire il database di appartenenza ASP.NET senza includere account utente.