Consideraciones de seguridad para Notification Services
Notification Services implementa la seguridad mediante funciones de base de datos y cuentas de usuario de base de datos restringidas. En este tema se describe el modelo de seguridad de Notification Services, así como algunas prácticas recomendadas para mejorar la seguridad de las aplicaciones de Notification Services.
Modelo de seguridad de Notification Services
Notification Services tiene un motor que ejecuta proveedores de eventos alojados, generadores y distribuidores. También puede tener aplicaciones cliente que envían eventos o que administran suscripciones.
Las cuentas de inicio de sesión empleadas por el motor y por las aplicaciones cliente utilizan la autenticación de Windows o de SQL Server para obtener acceso a SQL Server; obtienen acceso a las bases de datos mediante cuentas de usuario de base de datos y, a continuación, obtienen los permisos necesarios para las bases de datos de instancia y de aplicación por medio de su pertenencia a las funciones de base de datos de Notification Services.
La ilustración siguiente muestra las funciones de base de datos que proporcionan los permisos necesarios para cada componente del motor, para un proveedor de eventos no alojado y para una interfaz de administración de suscripciones.
Los permisos de base de datos se asignan a las funciones de base de datos. Los usuarios de base de datos de componentes individuales obtienen los permisos necesarios gracias a su pertenencia a la función correcta:
- Las cuentas utilizadas por los proveedores de eventos obtienen permisos por medio de su pertenencia a la función de base de datos NSEventProvider. El host del proveedor de eventos ejecuta proveedores de eventos alojados. Los proveedores de eventos no alojados son aplicaciones independientes.
- Las cuentas utilizadas por los generadores obtienen permisos por medio de su pertenencia a la función de base de datos NSGenerator.
- Las cuentas utilizadas por los distribuidores obtienen permisos por medio de su pertenencia a la función de base de datos NSDistributor.
- Las cuentas utilizadas por las interfaces de administración de suscripciones obtienen permisos por medio de su pertenencia a la función de base de datos NSSubscriberAdmin.
Si un motor ejecuta proveedores de eventos alojados, generadores y distribuidores, su cuenta puede obtener todos los permisos necesarios por medio de la función de base de datos NSRunService.
Para obtener más información acerca de la implementación de la seguridad para Notification Services, vea Proteger Notification Services.
Cuentas adicionales para acciones de condición
En Microsoft SQL Server 2005, Notification Services tiene una nueva característica de regla de suscripción. Las reglas controladas por eventos y las reglas programadas ahora pueden utilizar acciones de condición, lo que permite a los suscriptores definir suscripciones más completas mediante cláusulas de consulta definidas por el usuario.
Dado que las suscripciones basadas en acciones de condición admiten cláusulas de consulta definidas por el usuario, los datos disponibles para la consulta deberían estar limitados. Por este motivo, debe definir un usuario de base de datos bajo el que se ejecuten las acciones de condición. El usuario de base de datos sólo puede lanzar consultas en tablas y vistas que contengan datos de entrada.
El generador activa las reglas que contienen acciones de condición. Sin embargo, las consultas de acciones de condición están aún más limitadas por el usuario de base de datos especificado. El usuario de base de datos se especifica al definir una aplicación de Notification Services.
Para obtener más información acerca de las acciones de condición, vea Definir acciones de condición.
Permisos de Windows
Además de los permisos de base de datos, algunos componentes también requieren permisos de Windows adicionales:
- La cuenta que se utiliza para ejecutar el motor de Notification Services debe ser un miembro del grupo SQLServer2005NotificationServicesUser$ComputerName de Windows. De este modo se proporciona acceso a los archivos binarios de Notification Services para ejecutar el servicio. Si utiliza el servicio NS$instanceName de Windows para ejecutar el motor, Notification Services agrega la cuenta de servicio al grupo SQLServer2005NotificationServicesUser$ComputerName cuando se registra la instancia.
Es posible que los otros componentes que requieren acceso a los archivos binarios de Notification Services también requieran la pertenencia al grupo SQLServer2005NotificationServicesUser$nombreDeEquipo. Los ensamblados y los recursos de Notification Services se encuentran en la caché de ensamblados global (GAC) y están disponibles sin necesidad de pertenecer a este grupo. - Los proveedores de eventos algunas veces requieren permisos para carpetas y otras bases de datos. Por ejemplo, un proveedor de eventos FileSystemWatcher necesita acceso de lectura a un archivo de definición de esquemas XML (XSD) que describe el esquema de eventos y acceso de lectura y modificación a la carpeta en la que se colocan los archivos de eventos. Los proveedores de eventos de SQL Server necesitan acceso a las tablas o vistas de base de datos que se utilizan como orígenes de eventos.
- Los distribuidores necesitan permisos para entregar notificaciones al servicio de entrega, como un servidor de protocolo simple de transferencia de correo (SMTP), un servicio de mensajes cortos (SMS), un servidor Web o un sistema de archivos. Los distribuidores que utilizan el formateador de contenido de transformación XSL (XSLT) también necesitan acceso a los archivos XSLT.
Recomendaciones de seguridad
En las secciones siguientes se proporcionan recomendaciones para proteger el motor de Notification Services, las interfaces de administración de suscripciones, los proveedores de eventos personalizados, los protocolos de entrega personalizados y otras aplicaciones personalizadas.
Motor de Notification Services
Al implementar una instancia de Notification Services, tenga en cuenta las siguientes recomendaciones de seguridad para el motor de Notification Services:
Configure el motor para utilizar la autenticación de Windows para el acceso a las bases de datos.
Ejecute el motor bajo un dominio con pocos privilegios o una cuenta local. No utilice la cuenta Sistema local, Servicio local o Servicio de red, ni ninguna cuenta del grupo Administradores.
Sin embargo, un protocolo de entrega puede requerir privilegios adicionales para la cuenta bajo la que se ejecuta el servicio. Por ejemplo, si envía notificaciones mediante el servicio SMTP de Servicios de Internet Information Server (IIS) local, la cuenta bajo la que se ejecuta el motor debe ser miembro del grupo Administradores local. Los privilegios de administrador no son un requisito cuando se envían notificaciones mediante un servicio SMTP en un equipo remoto.Al implementar una instancia de Notification Services, asegúrese de que cada motor tiene sólo los permisos necesarios.
En las implementaciones de un solo servidor, el motor ejecuta todos los proveedores de eventos alojados, los generadores y los distribuidores de la instancia. La cuenta utilizada por el motor debería obtener los permisos de base de datos necesarios por medio de su pertenencia a la función de base de datos NSRunService.
En las implementaciones escaladas, restrinja los permisos de los motores individuales. Por ejemplo, si un motor sólo ejecuta proveedores de eventos, restrinja los permisos de base de datos concedidos a la cuenta del motor; para ello, convierta dicha cuenta en miembro de la función de base de datos NSEventProvider y no le conceda otros permisos de base de datos o de servidor. No utilice la función NSRunService a menos que el motor ejecute todos sus componentes.[!NOTA] Lo que ejecuta cada motor se configura al especificar el nombre de sistema de cada proveedor de eventos alojado, generador y distribuidor cuando define una aplicación.
Si los componentes del motor de Notification Services y el Motor de base de datos de SQL Server están ubicados en servidores independientes, compruebe que TCP/IP o canalizaciones con nombre están habilitados para el Motor de base de datos. La mayoría de los protocolos de red se encuentran desactivados de forma predeterminada para contribuir a mejorar la seguridad del Motor de base de datos.
Asegúrese de que las cuentas de inicio de sesión tienen contraseñas seguras. Para obtener más información acerca de las contraseñas seguras, vea el tema que trata sobre la creación de contraseñas seguras en la documentación de Microsoft Windows.
Asegúrese de que todo el código ejecutado por el motor, como proveedores de eventos personalizados, formateadores de contenido y protocolos, proviene de una fuente de confianza. Notification Services supone que el código que aparece en la configuración de la instancia y en la definición de la aplicación, que se utiliza para crear y actualizar la instancia de Notification Services, procede de una fuente de confianza. Al definir aplicaciones, utilice el nombre de ensamblado completo para garantizar la carga del ensamblado correcto.
Notification Services no puede validar campos de encabezado de protocolo. Por lo tanto, si la aplicación utiliza información de suscriptores, dispositivos de suscriptor o suscripciones en un campo de protocolo, valide la entrada de usuario o utilice valores definidos por la aplicación (no definidos por el usuario). Para obtener ejemplos de datos de usuarios malintencionados, vea Inyección de código SQL.
Proteja todas las carpetas que contienen archivos de configuración o datos de la aplicación. Para obtener más información acerca de la protección de archivos y carpetas, vea Proteger archivos y carpetas.
Alojar el motor de Notification Services
Normalmente, el motor de Notification Services es un servicio de Windows NS$instanceName que se crea al registrar una instancia de Notification Services. Sin embargo, es posible alojar el motor en la propia aplicación en lugar de utilizar el servicio de Windows.
El motor inicia sesión en el Motor de base de datos y ejecuta la instancia de Notification Services. Si aloja el motor de Notification Services, asegúrese de proteger los archivos de origen y binarios.
Para obtener más información acerca del alojamiento del motor, vea Alojar el motor de Notification Services.
Interfaces de administración de suscripciones
Las interfaces de administración de suscripciones permiten a los usuarios suscribirse a una aplicación de notificaciones y crear suscripciones. Las interfaces de administración de suscripciones obtienen permisos de base de datos para las bases de datos de instancia y de aplicación por medio de la pertenencia a la función de base de datos NSSubscriberAdmin.
Al desarrollar una interfaz de administración de suscripciones, tenga en cuenta las siguientes recomendaciones de seguridad:
- Antes de agregar, eliminar o modificar datos de suscriptores y de suscripciones, compruebe la identidad del suscriptor y, a continuación, haga coincidir dicha identidad con un Id. de suscriptor.
- Cualquier usuario o aplicación que tenga una cuenta que pertenezca a la función de base de datos NSSubscriberAdmin (o tenga permisos efectivos superiores) puede modificar datos de suscriptores y de suscripciones. No conceda permisos innecesarios y proteja el nombre de usuario y la contraseña utilizados por las interfaces de administración de suscripciones.
- No almacene información confidencial en forma de texto sin formato, como nombres de usuario y contraseñas utilizados en las conexiones de base de datos de la aplicación. Utilice la Interfaz de programación de aplicaciones de protección de datos (DPAPI) para cifrar la información confidencial y almacenarla en el Registro.
- Si la aplicación debe utilizar información confidencial para la identificación de usuarios, como números de la Seguridad Social, quizás desee proporcionar al usuario un Id. de usuario no confidencial y, a continuación, utilizar una tabla de búsqueda de la base de datos para hacer coincidir la información confidencial.
Las interfaces de administración de suscripciones suelen ser aplicaciones Web. Para obtener más información acerca de las opciones de seguridad de la aplicación ASP.NET, vea Implementar una interfaz de administración de suscripciones.
Proveedores de eventos personalizados
Los proveedores de eventos envían datos de eventos a las aplicaciones de Notification Services. Puede desarrollar proveedores de eventos personalizados, ya sea alojados o no alojados, para las aplicaciones. Al desarrollar un proveedor de eventos personalizado, tenga en cuenta las siguientes recomendaciones de seguridad:
- Asegúrese de que los proveedores de eventos utilizan la función de base de datos NSEventProvider para enviar eventos.
- Cualquier usuario o aplicación puede enviar eventos si tiene un nombre de proveedor de eventos válido y una cuenta que pertenece a la función de base de datos NSEventProvider (o una con permisos efectivos superiores) en la base de datos de aplicación. No conceda permisos innecesarios y proteja el nombre de usuario y la contraseña utilizados por los proveedores de eventos no alojados.
- No almacene información confidencial, como nombres de usuario y contraseñas, en forma de texto sin formato. Utilice la DPAPI para cifrar la información confidencial y almacenarla en el Registro.
- Proteja todos los archivos de origen de componente personalizados y binarios.
Los proveedores de eventos alojados personalizados envían los eventos en el contexto del host del proveedor de eventos; no es necesario proporcionar credenciales de seguridad en el código del proveedor de eventos alojado para enviar los eventos. La recomendación siguiente se aplica específicamente a los proveedores de eventos alojados:
- Cuando crea la aplicación, proporciona información acerca del proveedor de eventos alojado personalizado en la definición de la aplicación. Notification Services confía en toda la información de la definición de la aplicación. Utilice el nombre de ensamblado completo para asegurarse de que se carga el ensamblado correcto.
Los proveedores de eventos no alojados se ejecutan fuera del contexto de la aplicación de Notification Services. La recomendación siguiente se aplica específicamente a los proveedores de eventos no alojados:
- Notification Services no confía explícitamente en los proveedores de eventos no alojados. Debe proporcionar credenciales de seguridad en el código del proveedor de eventos no alojado. La cuenta especificada debe ser capaz de iniciar sesión en la instancia del Database Engine (Motor de base de datos) y la cuenta de usuario de base de datos asociada debe ser miembro de la función de base de datos NSEventProvider en cada base de datos de instancia y de aplicación.
Protocolos de entrega personalizados
Los protocolos de entrega personalizados se ejecutan en el contexto del motor de Notification Services. Al igual que todos los componentes personalizados, proteja los archivos de origen y binarios para proteger cualquier información confidencial.
Objetos de administración de Notification Services
Si utiliza los objetos de administración de Notification Services (NMO) para configurar instancias de Notification Services, definir aplicaciones o desarrollar aplicaciones administrativas, asegúrese de proteger los archivos de origen y binarios. Los archivos que contienen bases de datos de instancia y de aplicación pueden contener información confidencial, como nombres de servidor, nombres de usuario y contraseñas.
Para obtener más información acerca de los metadatos de instancia y de aplicación y otros archivos, vea Proteger archivos y carpetas.
Vea también
Conceptos
Proteger Notification Services
Otros recursos
Consideraciones de seguridad para SQL Server
Implementar Notification Services