Configurar un servidor de base de datos para la publicación de la implementación web

por Jason Lee

En este tema se describe cómo configurar un servidor de base de datos de SQL Server 2008 R2 para admitir la publicación y la implementación web.

Las tareas descritas en este tema son comunes a todos los escenarios de implementación: no importa si los servidores web están configurados para usar el servicio de agente remoto de la Herramienta de implementación web (Web Deploy) de IIS, el controlador de implementación web o la implementación sin conexión o la aplicación se ejecuta en un solo servidor web o una granja de servidores. La forma en que implemente la base de datos puede cambiar según los requisitos de seguridad y otras consideraciones. Por ejemplo, puede implementar la base de datos con o sin datos de ejemplo, y podría implementar asignaciones de roles de usuario o configurarlas manualmente después de la implementación. Sin embargo, la forma de configurar el servidor de bases de datos sigue siendo la misma.

No es necesario instalar ningún producto o herramienta adicional para configurar un servidor de bases de datos para admitir la implementación web. Suponiendo que el servidor de base de datos y el servidor web se ejecuten en máquinas diferentes, basta con:

  • Permitir que SQL Server se comunique mediante TCP/IP.
  • Permitir el tráfico de SQL Server a través de los firewalls.
  • Asignar a la cuenta de máquina del servidor web un inicio de sesión de SQL Server.
  • Asignar el inicio de sesión de la cuenta de máquina a los roles de base de datos necesarios.
  • Asignar a la cuenta que ejecutará la implementación de un inicio de sesión de SQL Server y permisos de creador de base de datos.
  • Para admitir implementaciones repetidas, asigne el inicio de sesión de la cuenta de implementación al rol de base de datos de db_owner.

En este tema se explica cómo realizar cada uno de estos procedimientos. En las tareas y tutoriales de este tema se supone que empieza con una instancia predeterminada de SQL Server 2008 R2 que se ejecuta en Windows Server 2008 R2. Antes de continuar, asegúrese de lo siguiente:

  • Tiene instalado Windows Server 2008 R2 Service Pack 1 y todas las actualizaciones disponibles.
  • El servidor está unido a un dominio.
  • El servidor tiene una dirección IP estática.
  • Tiene instalado SQL Server 2008 R2 Service Pack 1 y todas las actualizaciones disponibles.

La instancia de SQL Server solo debe incluir el rol de servicios de motor de base de datos, que se incluye automáticamente en cualquier instalación de SQL Server. Sin embargo, para facilitar la configuración y el mantenimiento, se recomienda incluir los roles de servidor de herramientas de administración: las básicas y herramientas de administración: las completas.

Nota:

Para obtener más información sobre cómo unir equipos a un dominio, consulte Unir equipos al dominio e iniciar sesión. Para obtener más información sobre cómo configurar direcciones IP estáticas, consulte Configurar una dirección IP estática. Para obtener más información sobre cómo instalar SQL Server, vea Instalación de SQL Server 2008 R2.

Habilitación del acceso remoto a SQL Server

SQL Server usa TCP/IP para comunicarse con equipos remotos. Si el servidor de bases de datos y el servidor web están en máquinas diferentes, debe hacer lo siguiente:

  • Configurar las opciones de red de SQL Server para permitir la comunicación a través de TCP/IP.
  • Configurar cualquier firewall de hardware o software para permitir el tráfico TCP (y, en algunos casos, el tráfico del Protocolo de datagramas de usuario (UDP)) en los puertos que usa la instancia de SQL Server.

Para permitir que SQL Server se comunique a través de TCP/IP, use el Administrador de configuración de SQL Server para cambiar la configuración de red de la instancia de SQL Server.

Para permitir que SQL Server se comunique mediante TCP/IP

  1. En el menú Inicio, seleccione Todos los programas, haga clic en Microsoft SQL Server 2008 R2, haga clic en Herramientas de configuracióny, a continuación, haga clic en Administrador de configuración de SQL Server.

  2. En el panel de vista de árbol, expanda Configuración de red de SQL Server y haga clic en Protocolos para MSSQLSERVER.

    Nota:

    Si ha instalado varias instancias de SQL Server, verá un elemento deProtocolos para[nombre de instancia] para cada instancia. Debe configurar las opciones de red en una instancia por instancia.

  3. En el panel de detalles, haga clic con el botón derecho en la fila de TCP/IP y, a continuación, haga clic en Habilitar.

    In the details pane, right-click the TCP/IP row, then click Enable

  4. En el cuadro de diálogo Advertencia, haga clic en Aceptar.

    In the Warning dialog box, click OK

  5. Debe reiniciar el servicio MSSQLSERVER antes de que su nueva configuración de red surta efecto. Puede hacerlo en un símbolo del sistema, desde la consola de Servicios o desde SQL Server Management Studio. En este procedimiento, usará SQL Server Management Studio.

  6. Cierre el Administrador de configuración de SQL Server.

  7. En el menú Inicio, seleccione Todos los programas, haga clic en Microsoft SQL Server 2008 R2 y, a continuación, haga clic en SQL Server Management Studio.

  8. En el cuadro de diálogo Conectar al servidor, en el cuadro Nombre del servidor, escriba el nombre del servidor de bases de datos y, a continuación, haga clic en Conectar.

    In the Connect to Server dialog box, in the Server name box, type the name of the database server, and then click Connect.

  9. En el panel Explorador de objetos, haga clic con el botón derecho en el nodo de servidor primario (por ejemplo, TESTDB1) y, a continuación, haga clic en Reiniciar.

    In the Object Explorer pane, right-click the parent server node (for example, TESTDB1), and then click Restart.

  10. En el cuadro de diálogo Microsoft SQL Server Management Studio, haga clic en .

    In the Microsoft SQL Server Management Studio dialog box, click Yes.

  11. Cuando se haya reiniciado el servicio, cierre SQL Server Management Studio.

Para permitir el tráfico de SQL Server a través de un firewall, primero debe saber qué puertos usa la instancia de SQL Server. Esto dependerá de cómo se creó y configuró la instancia de SQL Server:

  • Una instancia predeterminada de SQL Server escucha (y responde) solicitudes en el puerto TCP 1433.
  • Una instancia con nombre de SQL Server escucha (y responde) solicitudes en un puerto TCP asignado dinámicamente.
  • Si el servicio SQL Server Browser está habilitado, los clientes pueden consultar el servicio en el puerto UDP 1434 para averiguar qué puerto TCP usar para una instancia determinada de SQL Server. Sin embargo, este servicio suele deshabilitarse por motivos de seguridad.

Suponiendo que usa una instancia predeterminada de SQL Server, debe configurar el firewall para permitir el tráfico.

Dirección Desde el puerto Al puerto Tipo del puerto
Entrada Any 1433 TCP
Salida 1433 Any TCP

Nota:

Técnicamente, un equipo cliente usará un puerto TCP asignado aleatoriamente entre 1024 y 5000 para comunicarse con SQL Server y puede restringir las reglas de firewall en consecuencia. Para obtener más información sobre los puertos y firewalls de SQL Server, consulte Los números de puerto TCP/IP necesarios para comunicarse con SQL a través de un firewall y Cómo: Configurar un servidor para escuchar en un puerto TCP específico (Administrador de configuración de SQL Server).

En la mayoría de los entornos de Windows Server, es probable que tenga que configurar Firewall de Windows en el servidor de bases de datos. De forma predeterminada, Firewall de Windows permite todo el tráfico saliente a menos que una regla lo prohíbe específicamente. Para permitir que el servidor web llegue a la base de datos, debe configurar una regla de entrada que permita el tráfico TCP en el número de puerto que usa la instancia de SQL Server. Si usa una instancia predeterminada de SQL Server, puede usar el siguiente procedimiento para configurar esta regla.

Para configurar firewall de Windows para permitir la comunicación con una instancia predeterminada de SQL Server

  1. En el servidor de bases de datos, en el menú Inicio, seleccione Herramientas administrativas y, a continuación, haga clic en Firewall de Windows con seguridad avanzada.

  2. En el panel de vista de árbol, haga clic en Reglas de entrada.

    In the tree view pane, click Inbound Rules.

  3. En el panel Acciones, en reglas de entrada, haga clic en Nueva regla.

  4. En el Asistente para nueva regla de entrada, en la página Tipo de regla, seleccione Puertoy, a continuación, haga clic en Siguiente.

    In the New Inbound Rule Wizard, on the Rule Type page, select Port, and then click Next.

  5. En la página Protocolo y puertos, asegúrese de que TCP esté seleccionado y, en el cuadro Puertos locales específicos, escriba 1433y, a continuación, haga clic en Siguiente.

    On the Protocol and Ports page, ensure that TCP is selected, and in the Specific local ports box, type 1433, and then click Next.

  6. En la página Acción, deje Permitir la conexión seleccionada y haga clic en Siguiente.

  7. En la página perfil, deje Dominio seleccionado, desactive las casillas privada y pública y, a continuación, haga clic en Siguiente.

    On the Profile page, leave Domain selected, clear the Private and Public check boxes, and then click Next.

  8. En la página Nombre, asigne a la regla un nombre descriptivo adecuado (por ejemplo, instancia predeterminada de SQL Server: acceso a la red) y, a continuación, haga clic en Finalizar.

Para obtener más información sobre cómo configurar firewall de Windows para SQL Server, especialmente si necesita comunicarse con SQL Server a través de puertos dinámicos o no estándar, consulte Cómo: Configurar un Firewall de Windows para el acceso al motor de base de datos.

Configurar inicios de sesión y permisos de base de datos

Al implementar una aplicación web en Internet Information Services (IIS), la aplicación se ejecuta mediante la identidad del grupo de aplicaciones. En un entorno de dominio, las identidades del grupo de aplicaciones usan la cuenta de equipo del servidor en el que se ejecutan para acceder a los recursos de red. Las cuentas de equipo tienen el formato [nombre de dominio]</strong>[nombre de máquina]$—por ejemplo, FABRIKAM\TESTWEB1$. Para permitir que la aplicación web acceda a una base de datos a través de la red, debe:

  • Agregar un inicio de sesión para la cuenta de máquina del servidor web a la instancia de SQL Server.
  • Asignar el inicio de sesión de la cuenta de máquina a los roles de base de datos necesarios (normalmente db_datareader y db_datawriter).

Si la aplicación web se ejecuta en una granja de servidores, en lugar de un solo servidor, deberá repetir estos procedimientos para cada servidor web de la granja de servidores.

Nota:

Para más información sobre las identidades del grupo de aplicaciones y el acceso a los recursos de red, consulte Identidades del grupo de aplicaciones.

Puede abordar estas tareas de varias maneras. Para crear el inicio de sesión, puede:

  • Crear el inicio de sesión manualmente en el servidor de bases de datos mediante Transact-SQL o SQL Server Management Studio.
  • Usar un proyecto de SQL Server 2008 Server en Visual Studio para crear e implementar el inicio de sesión.

Un inicio de sesión de SQL Server es un objeto de nivel de servidor, en lugar de un objeto de nivel de base de datos, por lo que no depende de la base de datos que desea implementar. Por lo tanto, puede crear el inicio de sesión en cualquier momento y el enfoque más sencillo suele ser crear el inicio de sesión manualmente en el servidor de bases de datos antes de empezar a implementar bases de datos. Puede usar el siguiente procedimiento para crear un inicio de sesión en SQL Server Management Studio.

Para crear un inicio de sesión de SQL Server para la cuenta de máquina del servidor web

  1. En el servidor de bases de datos, en el menú Inicio, seleccione Todos los programas, haga clic en Microsoft SQL Server 2008 R2 y, a continuación, haga clic en SQL Server Management Studio.

  2. En el cuadro de diálogo Conectar al servidor, en el cuadro Nombre del servidor, escriba el nombre del servidor de bases de datos y, a continuación, haga clic en Conectar.

    This image illustrates: in the Connect to Server dialog box, in the Server name box, type the name of the database server, and then click Connect.

  3. En el panel Explorador de objetos, haga clic con el botón derecho en Seguridad, seleccione Nuevo y, a continuación, haga clic en Inicio de sesión.

  4. En el cuadro de diálogo Inicio de sesión: nuevo, en el cuadro Nombre de inicio de sesión, escriba el nombre de la cuenta de máquina del servidor web (por ejemplo, FABRIKAM\TESTWEB1$).

    In the Login – New dialog box, in the Login name box, type the name of your web server machine account (for example, FABRIKAM\TESTWEB1$).

  5. Haga clic en OK.

En este momento, el servidor de bases de datos está listo para la publicación de Web Deploy. Sin embargo, las soluciones que implemente no funcionarán hasta que asigne el inicio de sesión de la cuenta de máquina a los roles de base de datos necesarios. La asignación del inicio de sesión a los roles de base de datos requiere mucho más pensamiento, ya que no se pueden asignar roles hasta después de implementar la base de datos. Para asignar el inicio de sesión de la cuenta de máquina a los roles de base de datos necesarios, puede:

  • Asignar los roles de base de datos al inicio de sesión manualmente, después de implementar la base de datos por primera vez.
  • Usar un script posterior a la implementación para asignar los roles de base de datos al inicio de sesión.

Para obtener más información sobre cómo automatizar la creación de inicios de sesión y asignaciones de roles de base de datos, consulte Implementación de pertenencias a roles de base de datos en entornos de prueba. Como alternativa, puede usar el siguiente procedimiento para asignar el inicio de sesión de la cuenta de máquina a los roles de base de datos necesarios manualmente. Recuerde que no puede realizar este procedimiento hasta que después de haya implementado la base de datos.

Para asignar roles de base de datos al inicio de sesión de la cuenta de máquina del servidor web

  1. Abrir SQL Server Management Studio como antes.

  2. En el panel Explorador de objetos, expanda el nodo Seguridad, expanda el nodo Inicios de sesión y, a continuación, haga doble clic en el inicio de sesión de la cuenta de equipo (por ejemplo, FABRIKAM\TESTWEB1$).

    In the Object Explorer pane, expand the Security node, expand the Logins node, and then double-click the machine account login (for example, FABRIKAM\TESTWEB1$).

  3. En el cuadro de diálogo Propiedades de inicio de sesión, haga clic en Asignación de usuarios.

  4. En la tabla Usuarios asignados a este inicio de sesión, seleccione el nombre de la base de datos (por ejemplo, ContactManager).

  5. En la lista Pertenencia a roles de base de datos para:[nombre de base de datos], seleccione los permisos necesarios. En el caso de la solución de ejemplo Contact Manager, debe seleccionar los roles de db_datareader y db_datawriter.

    In the Database role membership for: [database name] list, select the permissions required. In the case of the Contact Manager sample solution, you must select the db_datareader and db_datawriter roles.

  6. Haga clic en OK.

Aunque la asignación manual de roles de base de datos suele ser más adecuada para entornos de prueba, es menos deseable para implementaciones automatizadas o con un solo clic en entornos de ensayo o producción. Puede encontrar más información sobre la automatización de este tipo de tareas mediante scripts posteriores a la implementación en Implementación de pertenencias a roles de base de datos en entornos de prueba.

Nota:

Para obtener más información sobre proyectos de servidor y proyectos de base de datos, vea Proyectos de base de datos de SQL Server de Visual Studio 2010.

Configurar permisos para la cuenta de implementación

Si la cuenta que va a usar para ejecutar la implementación no es un administrador de SQL Server, también deberá crear un inicio de sesión para esta cuenta. Para crear la base de datos, la cuenta debe ser miembro del rol del servidordbcreator o tener permisos equivalentes.

Nota:

Al usar Web Deploy o VSDBCMD para implementar una base de datos, puede usar credenciales de Windows o credenciales de SQL Server (si la instancia de SQL Server está configurada para admitir la autenticación en modo mixto). En el siguiente procedimiento se da por supuesto que desea usar credenciales de Windows, pero no hay nada que le impida especificar un nombre de usuario y una contraseña de SQL Server en la cadena de conexión al configurar la implementación.

Configurar permisos para la cuenta de implementación

  1. Abrir SQL Server Management Studio como antes.

  2. En el panel Explorador de objetos, haga clic con el botón derecho en Seguridad, seleccione Nuevo y, a continuación, haga clic en Inicio de sesión.

  3. En el cuadro de diálogo Inicio de sesión: nuevo, en el cuadro Nombre de inicio de sesión, escriba el nombre de la cuenta de implementación (por ejemplo, FABRIKAM\matt).

  4. En el panel Seleccionar una página, haga clic en Roles de servidor.

  5. Seleccione dbcreator y haga clic en Aceptar.

    Select dbcreator, and then click OK.

Para admitir implementaciones posteriores, también deberá agregar la cuenta de implementación al rol de db_owner en la base de datos después de la primera implementación. Esto se debe a que en las implementaciones posteriores está modificando el esquema de una base de datos existente, en lugar de crear una nueva base de datos. Como se describe en la sección anterior, no puede agregar un usuario a un rol de base de datos hasta que haya creado la base de datos, por motivos obvios.

Para asignar el inicio de sesión de la cuenta de implementación al rol de base de datos de db_owner

  1. Abrir SQL Server Management Studio como antes.

  2. En la ventana Explorador de objetos, expanda el nodo Seguridad, expanda el nodo Inicios de sesión y, a continuación, haga doble clic en el inicio de sesión de la cuenta de equipo (por ejemplo, FABRIKAM\matt).

  3. En el cuadro de diálogo Propiedades de inicio de sesión, haga clic en Asignación de usuarios.

  4. En la tabla Usuarios asignados a este inicio de sesión, seleccione el nombre de la base de datos (por ejemplo, ContactManager).

  5. En la lista Pertenencia a roles de base de datos para:[nombre de base de datos], seleccione el rol db_owner.

    In the Database role membership for: [database name] list, select the db_owner role.

  6. Haga clic en OK.

Conclusión

El servidor de bases de datos debe estar listo para aceptar implementaciones remotas de bases de datos y permitir que los servidores web de IIS remotos accedan a las bases de datos. Antes de intentar implementar y usar bases de datos, es posible que desee comprobar estos puntos clave:

  • ¿Ha configurado SQL Server para aceptar conexiones TCP/IP remotas?
  • ¿Ha configurado algún firewall para permitir el tráfico de SQL Server?
  • ¿Ha creado un inicio de sesión de cuenta de equipo para cada servidor web que tendrá acceso a SQL Server?
  • ¿La implementación de la base de datos incluye un script para crear asignaciones de roles de usuario o debe crearlas manualmente después de implementar la base de datos por primera vez?
  • ¿Ha creado un inicio de sesión para la cuenta de implementación y lo ha agregado al rol de servidor dbcreator?

Lecturas adicionales

Para obtener instrucciones sobre cómo implementar proyectos de base de datos, consulte Implementación de proyectos de base de datos. Para obtener instrucciones sobre cómo crear pertenencias a roles de base de datos mediante la ejecución de un script posterior a la implementación, consulte Implementación de pertenencias a roles de base de datos en entornos de prueba. Para obtener instrucciones sobre cómo cumplir los desafíos de implementación únicos que suponen las bases de datos de pertenencia, consulte Implementación de bases de datos de pertenencia en entornos empresariales.