Seguridad y cumplimiento de normas para bases de datos SQL Server

Cuando se discute la seguridad de SQL Server, uno de los términos más importantes es entidad de seguridad. Las entidades de seguridad son entidades de SQL Server, organizadas en una jerarquía, la cual puede requerir recursos de SQL Server específicos. Hay varias entidades de seguridad en SQL Server, y en este artículo nos enfocaremos en un entidad de usuario de una base de datos. A diferencia de las entidades login de SQL Server, las cuales son usadas para acceder a una instancia SQL Server (una entidad de seguridad a nivel de servidor), una entidad de usuario de base de datos (una entidad de seguridad a nivel de base de datos) es usada para definir el acceso a una base de datos particular que pertenece a la instancia de SQL Server.

Junto con las preocupaciones generales de seguridad de SQL Server Es muy importante rastrear y documentar cualquier cambio aplicado a una base de datos en relación con el cumplimiento de regulaciones. Todas las regulaciones de cumplimiento (por ejemplo, Basel II, HIPAA, PCI, FERPA, GLBA y SOX) requieren auditoría de cualquier cambio en entidades de datos y usuarios que tiene acceso a los datos. Las soluciones de auditoría deben proveer una documentación apropiada, como un rastro de evidencia que muestra si la precisión y confiabilidad de datos importantes no está comprometida.

Las siguientes entidades de usuario están relacionadas a la seguridad de bases de datos SQL Server:

  • Database role membership – SQL Server provee muchos roles como entidades de seguridad para administrar fácilmente los permisos en base de datos
  • Securables – una lista de los asegurables a los cuales permisos específicos han sido otorgados o negados a esta entidad de usuario, tales como varios permisos de alterar, crear, eliminar y ver.

Cualquiera de las propiedades puede ser modificada vía T-SQL (usando la operación GRANT, REVOKE o DENY) o SQL Server Management Studio.

Para cumplir con los requerimientos de cumplimiento de SQL Server y mantener la seguridad de la base de datos SQL Server, es necesario auditar los cambios en entidades de usuario y sus propiedades.

Audite cambios de seguridad de SQL Server usando desencadenadores DDL

Como una solución nativa, disponible en todas las ediciones SQL Server, los desencadenadores DDL pueden ser usados para auditar cambios de seguridad en entidades de usuarios de bases de datos. Para mostrar cómo hacer eso, rastrearemos los eventos a nivel de base de datos CREATE_USER, ALTER_USER y DROP_USER.

CREATE TRIGGER DatabaseUserChange
ON DATABASE
    FOR CREATE_USER, ALTER_USER, DROP_USER
AS
     SET NOCOUNT ON;
     DECLARE
        @AuditTable TABLE (
                          AType nvarchar(max),
                          AObject varchar(100),
                          ADate datetime,
                          AWho varchar(100),
                          ACommand nvarchar(max)
        );
     DECLARE
        @AType nvarchar(max);
     DECLARE
        @AObject varchar(100);
     DECLARE
        @ATSQL nvarchar(max);
     SELECT
            @AType = EVENTDATA().value(
            '(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(max)')
            , @AObject = EVENTDATA().value(
            '(/EVENT_INSTANCE/ObjectName)[1]', 'nvarchar(max)')
            , @ATSQL = EVENTDATA().value(
            '(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]',
            'nvarchar(max)');
      INSERT INTO @AuditTable
      SELECT
            @AType, @AObject, GETDATE(), SUSER_SNAME(), @ATSQL;
      SET NOCOUNT OFF;
GO

Los desencadenadores DDL de SQL Server pueden ser una solución muy eficiente y efectiva respecto del costo para rastrear cambios en entidades de usuarios de bases de datos. De todas maneras, son fáciles de traspasar – un usuario malicioso con suficientes permisos puede fácilmente deshabilitar el desencadenador, aplicar cambios en la entidad de usuario y volver a habilitar el desencadenador después. Algunas desventajas adicionales de este método de auditoría son que no hay un repositorio de auditoría de evidencia de manipulación y un requerimiento de conocimiento de T-SQL. T-SQL es requerido no sólo para la configuración, sino para proveer la información capturada para cualquier tipo de revisión de cumplimiento de normas o auditoría.

Rastree cambios en las entidades de usuarios de base de datos SQL Server usando la característica SQL Server Audit

Otra solución nativa de SQL Server es rastrear los cambios en las entidades de usuarios de la base de datos usando la característica SQL Serer Audit.Auditar a nivel de base de datos es soportado por las ediciones de SQL Server Enterprise y Developer solamente.

Para configurar la característica SQL Server Audit, T-SQL y SQL Management Studio pueden ser usados. EN el siguiente ejemplo, usaremos SQL Server Management Studio. Note que el correspondiente T-SQL para cada paso puede ser creado usando la opción CREATE TO en el panel de vista de árbol Object Explorer.

Para configurar la característica SQL Server Audit para rastrear cambios en las entidades de usuario de la base de datos:

  1. Expanda la carpeta Security en el panel Object Explorer
  2. Seleccione New Audit desde el menú contextual de carpetas Audits y establezca Audit name (por ejemplo, AuditDatabaseUsers) y File path (donde la información capturada será grabada en un archivo .sqlaudit)

    Specifying path and name for a new SQL Server Audit

  3. Haga clic en OK para confirmar la creación del objeto de auditoría SQL Server
  4. Seleccione la opción Enable Audit desde el menú contextual del objeto de auditoría creado

Después de que el objeto de auditoría es creado o habilitado, es necesario definir la auditoría en la base de datos creando una especificación de auditoría de base de datos. Los siguientes pasos deben ser realizados para cada base de datos que será monitoreada para cambios en entidades de usuarios de base de datos.

  1. Expanda la base de datos en Object Explorer
  2. Expanda la carpeta Security
  3. Seleccione New Database Audit Specification en el menú contextual de la carpeta Database Audit Specification
  4. Establezca el nombre de la nueva especificación de auditoría de base de datos (por ejemplo, DatabaseAuditUsersSpecification) y usando el menú desplegable Audit, seleccione la auditoría SQL Server previamente creada. Para afinar la auditoría, en nuestro caso, para especificar los cambios auditados en las entidades de usuarios de base de datos, establezca las siguientes filas de Audit Action Type:
    DATABASE_ROLE_MEMBER_CHANGE_GROUP, DATABASE_PERMISSION_CHANGE_GROUP, and DATABASE_PRINCIPAL_CHANGE_GROUP

    Setting the name of the new database audit specification and Audit Action Type rows

  5. Grabe la especificación de auditoria de la base de datos, y habilítela desde su menú contextual seleccionando la opción Enable Database Audit Specification

Después de que las especificaciones de auditoría de la base de datos y objetos fueron configuradas, cada cambio en las entidades de usuarios será rastreado y grabado en el archivo .sqlaudit.

Aunque el archivo .sqlaudit puede ser abierto desde el menú contextual del objeto de auditoría AuditDatabaseUsers (la opción View Audit Logs), ese no es un método conveniente, como tampoco es una buena forma para proveer datos auditados.

Opening the .sqlaudit file via View Audit Logs option

Otra forma de proveer información capturada es usar la función fn_get_file_audit que lee los archivos *.sqlaudit creados por la característica SQL Server Audit. El siguiente script recupera la información relacionada con las sentencias DDL y las acciones que cambiaron las entidades de usuarios:

SELECT
       event_time ,
       session_server_principal_name AS UserName ,
       server_instance_name AS ServerName,
       database_name ,
       object_name ,
       statement
  FROM sys.fn_get_audit_file('C:\AUDITs\AuditDatabaseUsers*.sqlaudit',
DEFAULT, DEFAULT);

Reading the .sqlaudit file using fn_get_file_audit function

Similar a los desencadenadores DDL, las características SQL Server Audit no provee un repositorio de evidencia de manipulación, puede ser fácilmente deshabilitado por un usuario con suficientes permisos y requiere T-SQL para reportes y análisis exhaustivos de la información capturada.

La solución de auditoría por defecto para cambios en la seguridad de bases de datos SQL Server

ApexSQL Audit es una herramienta de cuplimiento de normas de SQL Server que provee un amplio rango de características de monitoreo y reportes de una manera fácil como apuntar y hacer clic. Asegura la seguridad de SQL Server y los requerimientos de cumplimiento auditando el acceso y los cambios a múltiples instancias SQL Server y sus objetos.

Para auditar cambios en las entidades de usuario de la base de datos en una base de datos específica SQL Server:

  1. Inicie el GUI de ApexSQL Audit GUI
  2. Seleccione la instancia SQL Server y seleccione la base de datos que desea rastrear por cambios
  3. Para afinar el rastreo hacia capturar cambios en las entidades de usuarios de la base de datos, seleccione las opciones DDL y Security en la sección Operation types

    Database auditing settings found in ApexSQL Audit

    Si usted necesita auditar múltiples instancias SQL Server o bases de datos, repita los pasos 2 y 3 de acuerdo a las instancias y bases de datos deseadas.

  4. 4. Para confirmar la selección de configuraciones, haga clic en la opción Apply en la cinta pop-up amarilla

    ApexSQL Audit report showing database user entity changes

Los reportes integrados que proveen información acerca de cambios en las entidades de usuarios de la base de datos son Security configuration history, Role history, y User history. Estas plantillas de reportes difieren en los campos de parámetros usados para filtrar la información capturada y los tipos de columna usados para presentar la información.

Para ver la información, haga clic en el botón View reports en la barra de herramientas principal y use cualquiera de los reportes previamente listados. También, en el caso de requerimientos adicionales en proveer documentación de auditoría, lo cual es común en caso de revisiones de cumplimiento, ApexSQL Audit provee un diseñador de reportes personalizado e integrado.

El proceso de rastrear la seguridad de una base de datos SQL Server vía ApexSQL Audit provee:

  • Monitoreo y reportes sin uso ni conocimiento de T-SQL
  • Configuración de apuntar y hacer clic
  • Auditoría automática de todos los cambios de seguridad, sin importar el rol SQL al que pertenece el usuario que hizo el cambio
  • Identificación de riesgos de seguridad y problemas de cumplimiento potenciales
  • Un repositorio centralizado con la característica de archivar
  • Evidencia precisa de manipulación y reportes personalizables y exhaustivos para análisis y revisiones
  • Soporte para todas las ediciones de SQL Server, excepto la edición SQL Server Express

La seguridad y el cumplimiento de normas para bases de datos SQL Server pueden ser hechos vía características nativas de SQL Server o usando herramientas de terceras partes como ApexSQL Audit. Incluso los métodos nativos no proveen repositorios de evidencia de manipulación y requieren conocimientos avanzados de T-SQL para configurar, monitorear y reportar. ApexSQL Audit provee un método de auditoría y reporte amigable para el usuario y eficiente, junto con la solución todo en uno para múltiples instancias SQL Server y sus bases de datos.

Fuentes útiles:

Principals (Database Engine)
Database-Level Roles
Microsoft SQL Server 2012 Security Cookbook
SQL Server Audit Action Groups and Actions

Traductor: Daniel Calbimonte

junio 19, 2015