lunes, 15 de enero de 2018

SQL Server Opciones de configuración de conexiones al servidor

Opciones de configuración de conexiones al servidor

Introducción

Microsoft SQL Server permite el manejo de conexiones al servidor o instancia que se pueden clasificar como; simplemente conexiones y conexiones de servidor remoto.

Para el caso de Conexiones se presentaran las referidas a las conexiones concurrentes, el uso de un gobernador de consultas para el manejo de aquellas que tengan una ejecución larga y las opciones de conexión que se utilizan de forma predeterminada; en el caso de las conexiones de servidor remoto se indicará si se permiten las conexiones remotas, el tiempo de espera que se permitirá en este tipo de conexiones y si se requerirán transacciones distribuidas en la comunicación de servidor a servidor.
Finalmente las opciones que se verán en esta ocasión son:

Opción
Descripción
query governor cost limit
Costo estimado máximo permitido por el gobernador de consulta
remote access
Permitir acceso remoto
remote proc trans
Crear transacción DTC para procedimientos remotos
remote query timeout (s)
Tiempo de espera de consulta remota
user connections
Número máximo de conexiones de usuario permitidas
user options
Opciones de usuario para las conexiones

Estas opciones se han mantenido presentes desde hace tiempo en Microsoft SQL Server. Ya hemos indicado que algunas opciones de configuración en Microsoft SQL Server pueden identificarse como avanzadas, por lo que en caso de utilizar el procedimiento almacenado de sistema sp_configure, se debe habilitar la posibilidad de despliegue de dichas opciones avanzadas. Veamos cómo configurar y como afecta cada una de estas opciones.

Opción query governor cost limit

La opción de configuración query governor cost limit especifica un límite superior en un período de tiempo en el que una consulta se puede ejecutar. Deber recordarse que el costo de una consulta se refiere al tiempo transcurrido estimado, en segundos, que se requiere para completar una consulta en una configuración de hardware específica.

Por omisión, el valor predeterminado para esta opción es 0, lo que indica que el gobernador de consultas está desactivado. Esto significa que todas las consultas se ejecutarán sin límite de tiempo. Si el valor de esta opción de configuración se especifica con un valor distinto de cero, no negativo, el gobernador de consultas no permitirá la ejecución de consultas que tenga un costo estimado que exceda ese valor indicado.
Como se ha indicado, esa opción se especifica para qué aplique a todas las conexiones que se lleven a cabo en la instancia, sin embargo, si se desea afectar únicamente una conexión, puede utilizarse la sentencia SET QUERY_GOVERNOR_COST_LIMIT en una base por conexión.

La opción de configuración query governor cost limit es una opción avanzada. Si se utiliza el procedimiento almacenado del sistema sp_configure para establecer la configuración, recuerde habilitar que se muestren las opciones avanzadas. Después de ejecutar el comando RECONFIGURE el valor solicitado se aplica inmediatamente sin necesidad de reiniciar los servicios de la instancia de Microsoft SQL Server.
En el siguiente ejemplo se establece el límite de 120 segundos, de tal manera que las consultas que excedan el tiempo estimado especificado, no se ejecutaran.

EXEC sp_configure 'query governor cost limit', 120; 
RECONFIGURE; 
GO 

Opción remote access


La opción de configuración remote access controla la ejecución de procedimientos almacenados desde servidores locales o remotos en los que se ejecutan instancias de Microsoft SQL Server. Por omisión, el valor predeterminado para esta opción es 1. Esto significa que se otorga permiso para ejecutar los procedimientos almacenados locales desde servidores remotos o procedimientos almacenados en servidores remotos desde el servidor local.  Es importante indicar que ésta opción de configuración solo se aplica a los servidores que se agregan mediante el uso del procedimiento almacenado de sistema denominado sp_addserver, y se tiene compatibilidad con versiones anteriores.
Si se requiere evitar que los procedimientos almacenados locales se ejecuten desde un servidor remoto o que los procedimientos almacenados en servidores remotos se ejecuten en el servidor local, se debe establecer el valor de ésta opción en 0.

Nota:
Microsoft ha indicado que ésta opción de configuración se eliminará en la próxima versión de SQL Server. Por lo que se solicita evitar su uso, recomendando que se use sp_addlinkedserver en su lugar.

La opción de configuración remote access es una opción no avanzada. Si se utiliza el procedimiento almacenado del sistema sp_configure para establecer la configuración, no necesita habilitar que se muestren las opciones avanzadas. Después de ejecutar el comando RECONFIGURE el valor solicitado se aplica inmediatamente sin necesidad de reiniciar los servicios de la instancia de Microsoft SQL Server.
El siguiente ejemplo, especifica que se inhabilitara la ejecución de los procedimientos almacenados desde servidores locales o remotos.

EXEC sp_configure 'remote access', 0; 
RECONFIGURE; 
GO

Opción remote proc trans


La opción de configuración remote proc trans nos ayuda a proteger las acciones de un procedimiento de servidor a servidor a través de una requerir una transacción del Coordinador de Transacciones Distribuidas de Microsoft (MS DTC). Es importante mencionar que deben permitirse las conexiones de servidor remoto antes de poder establecer este valor de la opción de configuración. Por omisión el valor de esta opción de configuración se establece en 0, indicando que no se requiere una transacción coordinada por MS DTC.
Para proporcionar una transacción distribuida coordinada por MS DTC que proteja las propiedades ACID (atómicas, consistentes, aisladas y duraderas) de las transacciones debe establecerse el valor de la opción de configuración remote proc trans en 1. De esta forma, las sesiones iniciadas después de configurar esta opción de configuración en 1 heredan la configuración establecida.

Nota:
Microsoft ha indicado que ésta opción de configuración se eliminará en la próxima versión de SQL Server. Por lo que se solicita evitar su uso, recomendando que se use sp_addlinkedserver en su lugar.

La opción de configuración remote proc trans es una opción no avanzada. Si se utiliza el procedimiento almacenado del sistema sp_configure para establecer la configuración, no necesita habilitar que se muestren las opciones avanzadas. Después de ejecutar el comando RECONFIGURE el valor solicitado se aplica inmediatamente sin necesidad de reiniciar los servicios de la instancia de Microsoft SQL Server.
El siguiente ejemplo, indica que se establezca la habilitación de la ejecución de los procedimientos almacenados desde servidores locales o remotos y la necesidad de transacciones coordinadas por MS DTC.

EXEC sp_configure 'remote access', 1; 
EXEC sp_configure 'remote proc trans', 1; 
RECONFIGURE; 
GO

Opción remote query timeout (s)


La opción de configuración remote query timeout especifica cuánto tiempo puede tomar una operación remota antes de que supere el tiempo de espera, indicado en segundos. Por omisión, el valor predeterminado para esta opción de configuración es 600 segundos, por lo tanto, se permite una espera de 10 minutos.
Cabe indicar que éste valor de la opción de configuración se aplica a una conexión saliente, esto es, iniciada por el motor de base de datos como una consulta remota. El valor de la opción de configuración no tiene ningún efecto en las consultas que son recibidas por el motor de base de datos. Se debe indicar que para poder establecer el valor de esta opción de configuración, es requerido que las conexiones de servidor remoto se halla habilitado antes de poder establecer el valor de esta opción de configuración.

Para cambiar el valor de la opción de configuración que desactive el tiempo de espera, se deberá establecer el valor de la opción de configuración en 0. De esta manera, una consulta esperará el tiempo necesario hasta que se complete.
La opción de configuración remote query timeout es una opción no avanzada. Si se utiliza el procedimiento almacenado del sistema sp_configure para establecer la configuración, no necesita habilitar que se muestren las opciones avanzadas. Después de ejecutar el comando RECONFIGURE el valor solicitado se aplica inmediatamente sin necesidad de reiniciar los servicios de la instancia de Microsoft SQL Server.

El siguiente ejemplo establece el valor de la opción de configuración en 0, indicado que se deshabilitara el tiempo de espera.

EXEC sp_configure 'remote query timeout', 0; 
RECONFIGURE; 
GO

Opción user connections

La opción de configuración user connections nos permite especificar la cantidad máxima de conexiones de usuario simultáneas permitidas en una instancia de Microsoft SQL Server. Si bien la cantidad real de conexiones de usuario que son permitidas depende de la versión de Microsoft SQL Server que esté utilizando, también depende de los límites de las aplicaciones y el hardware que las contiene. Microsoft SQL Server permite establecer hasta un máximo de 32,767 conexiones de usuario.

Debe considerarse que se trata de una opción de configuración dinámica (se lleva a cabo una autoconfiguración), por lo que Microsoft SQL Server ajusta automáticamente el número máximo de conexiones de usuario según vaya siendo necesario, hasta alcanzar el valor máximo permitido. En la mayoría de los casos, no tiene que cambiar el valor de esta opción. Cabe mencionar que el valor predeterminado de esta opción de configuración es 0, esto significa que se permiten hasta 32,767 conexiones de usuario como máximo.
El uso de esta opción de configuración user connections ayuda a evitar sobrecargar el servidor con demasiadas conexiones simultáneas. Es posible estimar la cantidad de conexiones según los requisitos del sistema y del usuario que la utilizara. Generalmente en un sistema que es usado por muchos usuarios, cada usuario no suele requerir una conexión única, estas conexiones se pueden compartir entre los usuarios. Sin embargo, los usuarios que ejecutan aplicaciones a través de OLE DB requieren una conexión para cada objeto de conexión abierto, y los usuarios que ejecutan aplicaciones Open Database Connectivity (ODBC) necesitan una conexión para cada manejador de conexión activo en la aplicación, y los usuarios que ejecutan aplicaciones DB-Library necesitan una conexión para cada proceso iniciado que llama a la función dbopen DB-Library.

Nota:
Si debe modificar el valor de esta opción de configuración, no configure un valor demasiado alto, ya que cada conexión tiene una sobrecarga, independientemente de si la conexión se está utilizando. Si en algún momento se supera la cantidad máxima de conexiones de usuario, se recibirá un mensaje de error y no podrá conectarse hasta que haya otra conexión disponible.

La opción de configuración user connections es una opción avanzada. Si se utiliza el procedimiento almacenado del sistema sp_configure para establecer la configuración, se necesita habilitar que se muestren las opciones avanzadas. Después de ejecutar el comando RECONFIGURE el valor solicitado se aplica cuando se reinicien los servicios de la instancia de Microsoft SQL Server.
El siguiente ejemplo establece el máximo de 325 conexiones de usuario en la instancia.

EXEC sp_configure 'user connections', 325; 
RECONFIGURE; 
GO 

Una vez que se aplique el cambio, debe reiniciar los servicios de la instancia de Microsoft SQL Server, para que el valor de esta opción de configuración pueda ser efectivo.

Opción user options


La opción de configuración user options permite especificar los valores predeterminados globales para todos los usuarios.  La tabla que se muestra continuación establece una lista de opciones para el procesamiento de consultas que se indican como predeterminadas en la duración de la sesión de trabajo de un usuario. La opción de configuración user options permite cambiar los valores predeterminados de las opciones de la instrucción SET, en caso de que la configuración predeterminada del servidor no sea la adecuada.
A través de la instrucción SET, un usuario puede anular los valores predeterminados, los cuales son establecidos para cada nuevo inicio de sesión de usuario. Cuando se cambia el valor de la opción de configuración de user options, las nuevas sesiones de inicio de sesión usarán la nueva configuración; las sesiones de inicio de sesión actuales no se afectarán.

La tabla con la lista de opciones de se procesamiento se observa a continuación:

Nombre
Valor
Configuración
Descripción

1
DISABLE_DEF_CNST_CHK
Controla la comprobación de las restricciones interinas o diferidas.
implicit transactions
2
IMPLICIT_TRANSACTIONS.
Para conexiones de biblioteca de red dblib, controla si una transacción se inicia implícitamente cuando se ejecuta una instrucción. La configuración IMPLICIT_TRANSACTIONS no tiene ningún efecto en las conexiones ODBC o OLEDB
cursor close on commit
4
CURSOR_CLOSE_ON_COMMIT
Controla el comportamiento de los cursores después de que se haya realizado una operación de confirmación.
ansi warnings
8
ANSI_WARNINGS
Controla el truncamiento y NULL en advertencias agregadas.
ansi padding
16
ANSI_PADDING
Controla el relleno de las variables de longitud fija.
ANSI NULLS
32
ANSI_NULLS
Controla el manejo NULL cuando se usan operadores de igualdad.
arithmetic abort
64
ARITHABORT
Termina una consulta cuando se produce un error de desbordamiento o de división por cero durante la ejecución de la consulta.
arithmetic ignore
128
ARITHIGNORE
Devuelve NULL cuando ocurre un error de desbordamiento o de división por cero durante una consulta.
quoted identifier
256
QUOTED_IDENTIFIER
Diferencia  entre comillas simples y dobles al evaluar una expresión.
no count
512
NO COUNT
Desactiva el mensaje devuelto al final de cada instrucción que indica cuántas filas se vieron afectadas.
ANSI NULL Default On
1024
ANSI_NULL_DFLT_ON
Modifica el comportamiento de la sesión para usar compatibilidad ANSI para la capacidad de anulación. Las columnas nuevas definidas sin anulabilidad explícita se definen para permitir nulos.
ANSI NULL Default Off
2048
ANSI_NULL_DFLT_OFF
Modifica el comportamiento de la sesión para no utilizar la compatibilidad ANSI para nulability. Las columnas nuevas definidas sin anulabilidad explícita no permiten nulos.
concat null yield null
4096
CONCAT_NULL_YIELDS_NULL
Devuelve NULL al concatenar un NULL con una cadena.
numeric round abort
8192
NUMERIC_ROUNDABORT
Genera un error cuando ocurre una pérdida de precisión en una expresión.
xact abort
16384
XACT_ABORT
Revierte una transacción si una instrucción de Transact-SQL genera un error de tiempo de ejecución.

Cabe mencionar que no todos los valores de configuración son compatibles entre sí. Podemos mencionar que, los valores de ANSI_NULL_DFLT_ON y ANSI_NULL_DFLT_OFF no pueden ser configurados al mismo tiempo. Es importante indicar que las posiciones de bits en las opciones de usuario son idénticas a la variable global @@OPTIONS. Cada conexión tiene su propia función @@OPTIONS, representando el entorno de configuración. Al iniciar sesión en una instancia de Microsoft SQL Server, un usuario recibe un entorno predeterminado que asigna el valor de las opciones del usuario actual a @@OPTIONS. La ejecución de las sentencias SET para las opciones de usuario afecta el valor correspondiente en la función @@OPTIONS de la sesión. Todas las conexiones creadas después de cambiar esta configuración reciben el nuevo valor.
Por defecto, las siguientes opciones se presentan en las conexiones de usuario:

Options Enabled
Description
 CONCAT_NULL_YIELDS_NULL
Devuelve NULL al concatenar un NULL con una cadena.
 ANSI_NULL_DFLT_ON
Las columnas nuevas definidas sin anulabilidad explícita se definen para permitir nulos.
 QUOTED_IDENTIFIER
Diferencia  entre comillas simples y dobles al evaluar una expresión.
 ARITHABORT
Termina una consulta cuando se produce un error de desbordamiento o de división por cero durante la ejecución de la consulta.
 ANSI_NULLS
Controla el manejo NULL cuando se usan operadores de igualdad.
 ANSI_PADDING
Controla el manejo NULL cuando se usan operadores de igualdad.
 CURSOR_CLOSE_ON_COMMIT
Controla el comportamiento de los cursores después de que se haya realizado una operación de confirmación.
 IMPLICIT_TRANSACTIONS
Para conexiones de biblioteca de red dblib, controla si una transacción se inicia implícitamente cuando se ejecuta una instrucción. La configuración IMPLICIT_TRANSACTIONS no tiene ningún efecto en las conexiones ODBC o OLEDB
 DISABLE_DEF_CNST_CHK
Controla la comprobación de las restricciones interinas o diferidas.

La opción de configuración user options es una opción no avanzada. Si se utiliza el procedimiento almacenado del sistema sp_configure para establecer la configuración, no necesita habilitar que se muestren las opciones avanzadas. Después de ejecutar el comando RECONFIGURE el valor solicitado se aplica inmediatamente sin necesidad de reiniciar los servicios de la instancia de Microsoft SQL Server.
El siguiente ejemplo cambia el valor de la opción de configuración user options para establecer ansi warnings, sin afectar los otros valores establecidos.

EXEC sp_configure 'user options', 8; 
RECONFIGURE;
GO

Comentarios

Como se ha observado, conocer las opciones de configuración de conexiones es responsabilidad de un Microsoft SQL Server Database Administrator, es importante indicar que los efectos de modificar una opción de esta sección, solo aplica para las conexiones locales y de servidores remotos.

En este punto podemos decir que se han visto cada una de las opciones de configuración relativas a las conexiones de nivel instancia de servidor, estas mismas opciones aparecen en la pestaña de conexiones de la ventana de propiedades del servidor, como se puede observar en la siguiente imagen:


Como se ha mencionado anteriormente, es posible realizar el cambio de alguna de las opciones de configuración en esta ventana, ya que los valores se muestran y están habilitados, es preferible llevar a cabo la modificación de estos valores con el procedimiento almacenado de sistema denominado sp_configure,  de esta forma se puede mantener un control apropiado sobre los valores indicados en la opción de configuración modificada.


lunes, 8 de enero de 2018

SQL Server Opciones de configuración de seguridad

Opciones de configuración de seguridad

Introducción


Microsoft SQL Server, desde hace algún tiempo, ha proporcionado una arquitectura de seguridad diseñada para permitir que los administradores y desarrolladores de bases de datos puedan crear aplicaciones de bases de datos que sean seguras y ayuden a contrarrestar amenazas. Cada instancia de Microsoft SQL Server contiene una colección jerárquica de entidades, iniciando con el servidor.
De esta forma el acceso a cada instancia del servidor es la primera entidad que debe ser segura, para que las múltiples bases de datos que contiene sean seguras. Para Microsoft SQL Server se define un principal como la entidad que puede solicitar recursos dentro de una instancia. Dentro del marco de seguridad que maneja Microsoft SQL Server, se gestiona el acceso a través de la autenticación y la autorización a los objetos.

·     La autenticación en Microsoft SQL Server es el proceso de iniciar sesión mediante el cual un principal solicita acceso mediante el envío de credenciales que el servidor evalúa. La autenticación establece la identidad del usuario o proceso que se está autenticando.

·     La autorización es el proceso de determinar a qué recursos asegurables puede acceder un principal y qué operaciones están permitidas para esos recursos.

De esta forma, cuando se configura la seguridad de la instancia, se deben indicar el modo de autenticación que se tendrá, y las características de  registro de auditoria que se debe llevar a cabo en la instancia. Ya se ha visto en las Opciones de Configuración que para las características de auditoria y de encadenamiento de propiedad entre bases de datos se pueden establecer con las siguientes opciones:  

Nombre de opción
Descripción
c2 audit mode
modo de auditoría c2
common criteria compliance enabled
Modo de cumplimiento Common Criteria habilitado
cross db ownership chaining
Permitir el encadenamiento de propiedad cross db

No obstante, aunque el modo de autenticación a la instancia es definido desde la instalación, es posible modificarlo, como veremos en esta ocasión, además de indicar el modo de auditoria que se lleva en al registro de Microsoft SQL Server.
Ya hemos indicado que algunas opciones de configuración en Microsoft SQL Server pueden identificarse como avanzadas, por lo que en caso de utilizar el procedimiento almacenado de sistema sp_configure, se debe habilitar la posibilidad de despliegue de dichas opciones avanzadas.

Opción Autenticación en servidor


Para esta opción de configuración, que no se encuentra en el listado de opciones previamente indicadas, Microsoft SQL Server permite dos modos de autenticación, el modo de autenticación de Windows y modo mixto, entendiendo con ello, la autenticación de Windows y autenticación de Microsoft SQL Server de modo indistinto.
El modo de autenticación de Windows es el modo predeterminado, también se denomina seguridad integrada indicando que el modelo de seguridad de Microsoft SQL Server está estrechamente integrado con Windows. De esta forma, Microsoft SQL Server confía en las cuentas específicas de usuarios y grupos de Windows para iniciar sesión y permitir el acceso al usuario portador de estas credenciales, siempre que el usuario haya sido autorizado previamente. Los usuarios de Windows que ya han sido autenticados no tienen que presentar credenciales adicionales.

El modo de autenticación mixto, como se ha indicado permite la autenticación tanto de los usuarios de Windows como de los usuarios definidos únicamente en Microsoft SQL Server, donde los pares de nombre de usuario y contraseña se mantienen.
Es importante indicar que si cuando se instala la instancia de Microsoft SQL Server, se indica que se permitirá el modo de autenticación Windows, entonces solo los usuarios que están registrados en Windows podrán acceder, sin embargo, en ocasiones es necesario generar inicios de sesión de acceso en Microsoft SQL Server y en muchas instalaciones se indica el modo de autenticación mixto.

Al usar autenticación de modo mixto, si se han creado inicios de sesión de Microsoft SQL Server, se debe proporcionar el nombre de usuario y la contraseña de la instancia de Microsoft SQL Server en tiempo de ejecución, o bien utilizar las credenciales de Windows para acceder a la instancia de Microsoft SQL Server.
La opción de configuración del modo de autenticación de la instancia de Microsoft SQL Server se mantiene en el registro de Windows, donde se mantiene el valor dentro de la llave LoginMode, en éste se pueden encontrar dos valores:

·         1 = Modo de Autenticación Windows

·         2 = Modo de Autenticación Mixto (Windows and Microsoft SQL Server)

En este ejemplo se cambiará el modo de autenticación mixto en la instancia de default

USE [master]
GO
-------------------------------------------------------------------------
-- Cambiar el modo de Autenticación
--------------------------------------------------------------------------
--
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE',
              N'Software\Microsoft\MSSQLServer\MSSQLServer',
              N'LoginMode',
              REG_DWORD,
              2
GO


NOTA:
Microsoft siempre ha recomendado utilizar la autenticación de Windows siempre que sea posible. La autenticación de Windows usa una serie de mensajes cifrados para autenticar usuarios en Microsoft SQL Server. Cuando se utilizan los inicios de sesión de Microsoft SQL Server, los nombres de inicio de sesión y las contraseñas de Microsoft SQL Server se pasan a través de la red, lo que los hace menos seguros.

Opción Nivel de Auditoria


La opción de configuración de nivel de auditoría expone el comportamiento de registro de autenticación de Microsoft SQL Server. El registro de autenticación escribe las entradas de registro dentro del registro de errores de Microsoft SQL Server y en el registro de aplicación de Windows.
La opción de configuración del nivel de auditoría de la instancia de Microsoft SQL Server se mantiene en el registro de Windows, donde se mantiene el valor dentro de la llave AuditLevel, en éste se tienen las siguientes opciones:

·         0 = No registra intentos de autenticación.

·         1 = Registros de autenticación exitosa.

·         2 = Registros de autenticación fallida.

·         3 = Registra todos los intentos de autenticación independientemente del éxito o el fracaso.

En este ejemplo se cambiara el nivel de auditoria a solo los registros de autenticación exitoso.

USE [master]
GO
--
--- Change Audit Level
--
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE',
              N'Software\Microsoft\MSSQLServer\MSSQLServer',
              N'AuditLevel',
              REG_DWORD,
              1
GO


NOTA:
Esta característica se eliminará en una versión futura de Microsoft SQL Server. Evite usar esta característica en nuevos trabajos de desarrollo y planee modificar las aplicaciones que actualmente usan esta característica.

Opción Cuenta de proxy al servidor


Idealmente una aplicación que se conecta a Microsoft SQL Server necesita acceder a objetos y recursos dentro de la instancia únicamente. Sin embargo, es frecuente que la aplicación necesité acceder a recursos externos del sistema, como archivos, la red, variables de entorno. Es posible que la aplicación necesite ejecutar el procedimiento almacenado extendido xp_cmdshell para invocar un shell de comandos de Windows y ejecutar un comando de shell para recuperar una lista de archivos en un directorio.
Cuando un miembro de la función sysadmin de la instancia ejecuta el procedimiento almacenado extendido xp_cmdshell, el proceso de Windows del shell de comandos se ejecuta con el contexto de seguridad de la cuenta de servicio de Microsoft SQL Server.  En un ambiente seguro, la cuenta de servicio de Microsoft SQL Server es una cuenta que no tiene permisos administrativos sobre el servidor, de tal forma que si se requiere acceder a elementos que requieran las habilidades administrativas, es por ello que la cuenta proxy nos apoya en lograr ese objetivo.

En Microsoft SQL Server para permitir que un inicio de sesión que no sea sysadmin pueda ejecutar el procedimiento almacenado extendido  xp_cmdshell, entonces el administrador debe crear una credencial de sistema especial denominado”## xp_cmdshell_proxy_account ##” y especificar una cuenta de Windows. Esta cuenta se usará para ejecutar xp_cmdshell por usuarios que no son miembros de la función sysadmin.

En este ejemplo se genera la cuenta de proxy asociada a la cuenta Windows WinAccount.

USE [master]
GO
--
-- Change to create a proxy shell account
--
CREATE CREDENTIAL [##xp_cmdshell_proxy_account##]
       WITH IDENTITY = N'WinAccount', SECRET = N'Pa$$5w0rd'
GO

Es importante indicar que para que un inicio de sesión pueda ejecutar el procedimiento almacenado extendido xp_cmdshell requiere que se habilite la opción de configuración xp_cmdshell.

Opción c2 audit mode


Desde hace tiempo, el Departamento de Defensa de EE. UU. ha establecido un conjunto de calificaciones que se aplican a los niveles de seguridad de los sistemas informáticos, en función de sus capacidades con respecto a la auditoría y el control de acceso discrecional. De acuerdo con esta clasificación, Microsoft SQL Server tiene la opción de configuración del modo de auditoría C2. Todas las versiones de Microsoft SQL Server tienen certificación C2 (siempre que se ejecute en una computadora y red certificadas por C2). En consecuencia, Microsoft SQL Server garantiza que sus procedimientos de auditoría satisfacen los requisitos de C2, por ejemplo, el almacenamiento de datos generados solo en una partición NTFS.
La información de los registros de auditoría C2 van más allá de los eventos a nivel de servidor, como apagar o reiniciar, los intentos de inicio de sesión fallidos y exitosos, ampliar el uso exitoso y fallido de permisos al acceder a objetos de bases de datos individuales y ejecutar toda la definición de datos, el control de acceso a datos y la manipulación de datos a través de las declaraciones de lenguaje.

La información del registro de auditoría contiene la marca de tiempo de realización del evento, el identificador de la cuenta que desencadenó el evento, el nombre del servidor de destino, el tipo de evento, su resultado (éxito o fracaso), el nombre de la aplicación del usuario e ID de proceso del servidor de la conexión del usuario y el nombre de la base de datos. Seleccionar esta opción de configuración permitirá que la instancia de Microsoft SQL Server registre los intentos fallidos y exitosos para acceder a las declaraciones y objetos. Esta información nos ayuda a perfilar la actividad del sistema y rastrear posibles violaciones de las políticas de seguridad establecidas.

Los datos del registro de modo de auditoría C2 se almacenan en un archivo en el directorio predeterminado de datos de la instancia, dicho archivo de registro de auditoría puede alcanzar hasta 200 megabytes (MB) en tamaño, una vez que se ha alcanzado el límite indicado se creará un nuevo archivo, cerrando el archivo anterior y escribirá todos los registros de auditoría nuevos en el nuevo archivo. El proceso de escritura en el registro continuará hasta que el directorio de datos, donde se lleva a cabo el registro de auditoría se llene o se deshabilite la auditoría.

Importante:
El modo de auditoría C2 guarda una gran cantidad de información de los eventos en el archivo de registro, por lo que puede crecer rápidamente. Si el directorio de datos en el que se guardan los registros se queda sin espacio, provocará que  Microsoft SQL Server se cierre automáticamente. En el caso de que la auditoría está configurada para un inicio automático, se debe reiniciar la instancia con la bandera  -f (que permite omitir la auditoría) o bien liberar espacio adicional en el disco para mantener el registro de auditoría.

En este ejemplo se habilitara la opción de configuración de modo de auditoria c2

EXEC sys.sp_configure N'c2 audit mode', N'1'
RECONFIGURE WITH OVERRIDE
GO

La opción de configuración de modo de auditoria C2 es una opción avanzada. Si se utiliza el procedimiento almacenado del sistema sp_configure para establecer la configuración, recuerde habilitar que se muestren las opciones avanzadas. Después de ejecutar el comando RECONFIGURE el valor solicitado se aplica inmediatamente sin necesidad de reiniciar los servicios de Microsoft SQL Server.

Nota:
Microsoft ha indicado que ésta característica se eliminará en una versión futura de Microsoft SQL Server, por lo que recomienda evitar su uso. El estándar de seguridad C2 ha sido reemplazado por Common Criteria Certification.

Opción common criteria compliance enabled


El Common Criteria Compliance (generalmente se abrevia como CC) es un método para asegurar que los productos de las tecnologías de información cumplen con un conjunto definido de especificaciones de seguridad. Lo que se intenta es estandarizar la evaluación de seguridad para una amplia variedad de sistemas. En general, Common Criteria se define como un marco en el que los usuarios de sistemas informáticos pueden especificar sus requisitos de seguridad funcional y de aseguramiento mediante el uso de perfiles de protección, de esta manera Common Criteria proporciona la seguridad de que el proceso de especificación, implementación y evaluación de un producto de seguridad informática se ha llevado a cabo de manera rigurosa, estándar y repetible a un nivel acorde con el entorno objetivo para su uso.

Common Criteria se utiliza como base para un esquema de certificación impulsado por el gobierno y, por lo general, las evaluaciones se llevan a cabo para el uso de las agencias del gobierno federal y la infraestructura crítica. Es "intencionalmente flexible", lo que significa que inicialmente se otorga cierta libertad a la implementación de los requisitos necesarios definidos en el acuerdo de nivel de evaluación (Evaluation Agreement Level ‘EAL’). Por tal motivo le corresponde al vendedor determinar una adecuada implantación, según el nivel de garantía de evaluación que se haya previsto. Una aplicación específica se conoce como Objetivo de evaluación. Los términos tienen un rango considerablemente amplio sobre lo que pueden hacer referencia. En este caso, nuestro objetivo de evaluación es una instalación de Microsoft SQL Server. Profundizar en este tema va más allá del alcance de este documento, para profundizar visite la documentación correspondiente de Microsoft SQL Server.

No obstante, lo anterior, antes de habilitar la opción de configuración de common criteria compliance enabled, debe indicarse que solo se evalúan y certifican para las ediciones Enterprise y Datacenter. Asimismo, es importante indicar no todos los paquetes de servicio están soportados  para cumplir con los requisitos, por lo que es necesario validar la versión, edición y nivel de Microsoft SQL Server con que se cuenta, para llevar a cabo la habilitación de esta opción.
En este ejemplo se habilitara la opción de configuración common criteria compliance enabled

EXEC sys.sp_configure N'common criteria compliance enabled', N'1'
RECONFIGURE WITH OVERRIDE
GO


Importante
Además de habilitar la opción, también debe descargarse y ejecutarse un script que finaliza la configuración de SQL Server para cumplir con Common Criteria Evaluation Assurance Level. Para ello, viste la documentación de Microsoft SQL Server.

La opción de configuración common criteria compliance enabled es una opción avanzada. Si se utiliza el procedimiento almacenado del sistema sp_configure para establecer la configuración, recuerde habilitar que se muestren las opciones avanzadas. Después de ejecutar el comando RECONFIGURE el valor solicitado se aplica inmediatamente sin necesidad de reiniciar los servicios de Microsoft SQL Server.

Opción cross db ownership chaining


En Microsoft SQL Server todos los objetos, como tablas y vistas, tienen un propietario, el que puede proceder indirectamente del propietario del esquema al que pertenece el objeto. Para efectos de esta opción de configuración indicar que el encadenamiento de propiedad cruzada de la base de datos es una extensión del encadenamiento de propiedad, excepto que cruza el límite de la base de datos. Un ejemplo en el que se puede producir un encadenamiento de propiedad cruzada de bases de datos es si tiene una vista en una base de datos que hace referencia a una tabla en otra base de datos. La vista en la primera base de datos se refiere a una tabla en la segunda base de datos. Si estuviéramos hablando de objetos dentro de la misma base de datos, si tanto la tabla como la vista eran propiedad del mismo usuario, se formaría una cadena de propiedad donde el usuario final solo necesitaría acceder a la vista. Con el encadenamiento de propiedad cruzada de la base de datos, eso mismo es posible, excepto en las bases de datos.
El encadenamiento de propiedad cruzada de la base de datos se puede activar a nivel servidor o a nivel de base de datos. Si el encadenamiento de propiedad cruzada de la base de datos está activado a nivel servidor, está activado para todas las bases de datos en ese servidor, independientemente de las configuraciones individuales de cada una de las bases de datos. No es recomendable establecer la opción de configuración cross db ownership chaining en 1, a menos que todas las bases de datos que se encuentren en la instancia de Microsoft SQL Server participen en el encadenamiento de propiedad entre bases de datos y se conocen las implicaciones de seguridad de esta configuración.

Si para alguna aplicación se ha utilizado el encadenamiento de propiedad, antes de desactivar el encadenamiento de propiedad entre bases de datos en un servidor de producción, deberá probar todas las aplicaciones que se tienen, para garantizar que los cambios no afecten a la funcionalidad de la aplicación en cuestión.

En este ejemplo se habilitará la opción de configuración cross db ownership chaining

EXEC sys.sp_configure N'cross db ownership chaining', N'1'
RECONFIGURE WITH OVERRIDE
GO

La opción de configuración cross db ownership chaining es una opción avanzada. Si se utiliza el procedimiento almacenado del sistema sp_configure para establecer la configuración, recuerde habilitar que se muestren las opciones avanzadas. Después de ejecutar el comando RECONFIGURE el valor solicitado se aplica inmediatamente sin necesidad de reiniciar los servicios de Microsoft SQL Server.

Comentarios


Como se ha observado, conocer las opciones de configuración de seguridad es una de las principales responsabilidades de un Microsoft SQL Server Database Administrator, es importante conocer las características relativas en cuanto a las implicaciones de modificar los valores, particularmente las relativas al cumplimiento de los niveles de auditoria requeridos, los efectos de habilitar un proxy para ejecución de scripts en el Shell de Windows y los modos de autenticación requeridos.
En este punto podemos decir que se han visto cada una de las opciones de configuración relativas a seguridad de nivel instancia de servidor, estas mismas opciones aparecen en la pestaña de seguridad de la ventana de propiedades del servidor, como se puede observar en la siguiente imagen:


Como se ha mencionado anteriormente, es posible realizar el cambio de alguna de las opciones de configuración en esta ventana, ya que los valores se muestran y están habilitados, es preferible llevar a cabo la modificación de estos valores con el procedimiento almacenado de sistema denominado sp_configure, para el caso de las opciones de habilitación, o ejecutar los comandos correspondientes, para las otras opciones, de esta forma se puede mantener un control apropiado sobre los valores indicados en la opción de configuración.