Implementar bases de datos de pertenencia en entornos empresariales

por Jason Lee

Nota:

Desde que se escribió este artículo, los proveedores de pertenencia de ASP.NET han sido reemplazados por ASP.NET Identity. Se recomienda encarecidamente actualizar las aplicaciones para usar la plataforma ASP.NET Identity en lugar de los proveedores de pertenencia destacados en el momento en el que se escribió este artículo. ASP.NET Identity ofrece una serie de ventajas frente al sistema de pertenencia ASP.NET, incluidas las siguientes:

  • Mejor rendimiento
  • Extensibilidad y capacidad de prueba mejoradas
  • Compatibilidad con OAuth, OpenID Connect y autenticación en dos fases
  • Compatibilidad con identidades basadas en notificaciones
  • Mejor interoperabilidad con ASP.Net Core

En este tema se explican las consideraciones clave y los desafíos que deberá superar al aprovisionar bases de datos de servicios de aplicaciones ASP.NET (más comúnmente denominadas bases de datos de pertenencia) en entornos de prueba, ensayo o producción. También se describen los enfoques que puede usar para superar estos desafíos.

Este tema forma parte de una serie de tutoriales basados en los requisitos de implementación empresarial de una empresa ficticia denominada Fabrikam, Inc. Esta serie de tutoriales utiliza una solución de muestra (Contact Manager) para representar una aplicación web con un nivel de complejidad realista, que incluye una aplicación ASP.NET MVC 3, un servicio Windows Communication Foundation (WCF) y un proyecto de base de datos.

El método de implementación que constituye el núcleo de estos tutoriales se basa en el enfoque del archivo de proyecto dividido descrito en Descripción del archivo del proyecto, en el que el proceso de compilación está controlado por dos archivos de proyecto: uno que contiene las instrucciones de compilación que se aplican a todos los entornos de destino y otro que contiene los ajustes de compilación e implementación específicos del entorno. En tiempo de compilación, el archivo de proyecto específico del entorno se combina en el archivo de proyecto independiente del entorno para formar un conjunto completo de instrucciones de compilación.

¿Cuáles son los problemas al implementar una base de datos de pertenencia?

En la mayoría de los casos, al diseñar una estrategia de implementación para una base de datos, lo primero que debe tener en cuenta es qué datos desea implementar. En un entorno de desarrollo o prueba, es posible que quiera implementar datos de cuenta de usuario para facilitar las pruebas rápidas y sencillas. En un entorno de ensayo o producción, es muy poco probable que quiera implementar datos de cuenta de usuario.

Desafortunadamente, las bases de datos de pertenencia de ASP.NET presentan algunos desafíos específicos que hacen que esta decisión sea mucho más compleja:

  • Una implementación solo de esquema dejará la base de datos de pertenencia en un estado no operativo. Esto se debe a que la base de datos de pertenencia incluye algunos datos de configuración (en la tabla aspnet_SchemaVersions) que la base de datos requiere para funcionar. Por lo tanto, si realiza una implementación solo de esquema de la base de datos de pertenencia para excluir los datos de la cuenta de usuario, deberá ejecutar un script posterior a la implementación para agregar los datos de configuración esenciales.
  • En función de cómo se configure la base de datos de pertenencia, el proveedor de pertenencia puede usar la clave de máquina para cifrar contraseñas y almacenarlas en la base de datos. En este caso, los datos de la cuenta de usuario que implemente con la base de datos serán inutilizables en el servidor de destino. Por este motivo, la implementación de datos de cuentas de usuario no es un escenario admitido.

Elección de una estrategia de base de datos de pertenencia

Use estas instrucciones al elegir cómo aprovisionar una base de datos de pertenencia en un entorno de servidor empresarial:

  • Siempre que sea posible, no implemente bases de datos de pertenencia. En su lugar, cree la base de datos de pertenencia manualmente en el servidor de bases de datos de destino. Si no ha personalizado el esquema de la base de datos de pertenencia, simplemente puede crear uno in situ en el destino mediante la herramienta de registro de SQL Server (aspnet_regsql.exe) de ASP.NET.
  • Si no tiene otra opción, excepto implementar una base de datos de pertenencia (por ejemplo, si ha realizado modificaciones exhaustivas en el esquema de la base de datos), debe realizar una implementación de solo esquema de la base de datos de pertenencia, excluir los datos de la cuenta de usuario y, a continuación, ejecutar un script posterior a la implementación para agregar los datos de configuración necesarios. Puede encontrar instrucciones generales sobre estos enfoques en Procedimiento para implementar la base de datos de miembros de ASP.NET sin incluir cuentas de usuario.

Es importante recordar que es probable que el esquema de la base de datos de pertenencia sea bastante estático. Aunque haya personalizado la base de datos de pertenencia, es poco probable que tenga que actualizar el esquema de forma periódica, no va a cambiar con la misma frecuencia que el código de una aplicación web o un proyecto de base de datos. Por lo tanto, no es necesario incluir la base de datos de pertenencia en ningún proceso de implementación automatizado o de un solo paso.

Uso de VSDBCMD para actualizar un esquema de base de datos de pertenencia

Si modifica la estructura de la base de datos de pertenencia después de la primera implementación, es posible que no quiera usar la herramienta de implementación web de Internet Information Services (IIS) (Web Deploy) para volver a implementar la base de datos. La funcionalidad de implementación de base de datos en Web Deploy no incluye la capacidad de realizar actualizaciones diferenciales en una base de datos de destino; en su lugar, Web Deploy debe quitar y volver a crear la base de datos. Esto significa que se pierden los datos de cuentas de usuario existentes, que normalmente no son deseables en entornos de ensayo o producción.

La alternativa es usar la utilidad VSDBCMD para actualizar el esquema de la base de datos de destino. VSDBCMD incluye dos funcionalidades importantes. En primer lugar, puede importar el esquema de una base de datos existente en un archivo .dbschema. En segundo lugar, puede implementar un archivo .dbschema en una base de datos existente como una actualización diferencial, lo que significa que solo realiza los cambios necesarios para actualizar la base de datos de destino y no se pierden datos.

Puede usar estos pasos generales para actualizar un esquema de base de datos de pertenencia:

  1. Use la acción Importar de VSDBCMD para generar un archivo .dbschema para la base de datos de pertenencia a origen. Este procedimiento se describe en Procedimiento para importar un esquema desde un símbolo del sistema.
  2. Use la acción Implementar de VSDBCMD para implementar el archivo .dbschema en la base de datos de pertenencia de destino. Este procedimiento se describe en Referencia de línea de comandos para VSDBCMD.EXE (implementación e importación de esquemas).

Conclusión

En este tema se describen algunos de los desafíos a los que puede enfrentarse cuando necesita aprovisionar bases de datos de pertenencia de ASP.NET en varios entornos de destino. En concreto, explicó por qué las implementaciones de solo esquema dejarán la base de datos de pertenencia en un estado no operativo y por qué no se admite la implementación de datos de cuentas de usuario. En el tema también se presentan instrucciones sobre cómo aprovisionar, implementar y actualizar bases de datos de pertenencia en distintos escenarios.

Lecturas adicionales

Para obtener más instrucciones y ejemplos de cómo usar VSDBCMD, vea Referencia de la línea de comandos para VSDBCMD.EXE (implementación e importación de esquema) y Procedimiento para importar un esquema desde un símbolo del sistema. Para obtener más información sobre el uso de aspnet_regsql.exe para crear bases de datos de pertenencia, consulte Herramienta de registro de SQL Server (aspnet_regsql.exe) de ASP.NET. Para obtener instrucciones más generales sobre la implementación de bases de datos de pertenencia, vea Procedimiento para implementar la base de datos de miembros de ASP.NET sin incluir cuentas de usuario.