Preguntas y respuestas sobre SQLDesencadenadores de entrada, desfragmentaciones del archivo de datos, etc.

Editado por Nancy Michell

Configuración de la cuenta de servicio

Sugerencia: Contraseñas más seguras

El motor SQL Server 2000 conserva dos copias de cada contraseña de entrada a SQL Server. Una versión es la contraseña real que suministra el usuario, mientras que la segunda es la contraseña en letras mayúsculas.

Esta práctica sirve para validar contraseñas con diferenciación entre mayúsculas y minúsculas, porque los usuarios pueden iniciar sesión mezclando mayúsculas y minúsculas o usando solo mayúsculas, y obtener acceso al servidor. Sin embargo, esta comodidad tiene un inconveniente: guardar las contraseñas en mayúsculas facilita los ataques para adivinar las contraseñas con ataques de fuerza bruta porque se reduce el número de contraseñas posibles.

SQL Server 2005 sólo almacena la copia original de la contraseña. Las contraseñas que especifica el usuario deben coincidir con la contraseña almacenada en el servidor. Si la contraseña no coincide, se produce un error de entrada y se deniega el acceso al usuario. Si se olvida la diferenciación entre mayúsculas y minúsculas, se debe restablecer la contraseña.

Suponiendo que el nombre de la entrada de usuario es SQLCOMMUNITY, puede restablecer la contraseña de SQL Server mediante el comando siguiente:

Use Master;
ALTER LOGIN SQLCOMMUNITY WITH PASSWORD = 'k3t9h4s8wJF7t';

Este comando restablecería la contraseña de entrada de SQLCOMMUNITY en SQL Server a "k3t9h4s8wJF7t".

P: En SQL Server™ 2000, establecía la cuenta de servicio del motor y agente de SQL Server mediante el applet Servicios de Herramientas administrativas. Ahora, en SQL Server 2005, tengo entendido que se debe usar la herramienta Administrador de configuración. ¿Por qué no puedo seguir usando las herramientas de Windows?

R: SQL Server 2005 se ha creado para ser más seguro que las versiones anteriores. En muchas tiendas, los usuarios sencillamente establecerían cuentas internas, como LocalSystem, para ejecutar SQL Server. Sin embargo, estas cuentas suelen tener o más o menos derechos y permisos de Windows® de los que necesitan. Debe crear una cuenta de Windows con privilegios no elevados para ejecutar los servicios Motor y Agente SQL Server 2005. Si selecciona estas cuentas mediante el Administrador de configuración, se les otorgarán los derechos y permisos apropiados de forma automática tanto en SQL Server como en el sistema operativo. Si usa las herramientas de Windows para administrar los servicios de SQL Server, es posible que no otorgue los derechos apropiados, o bien, que otorgue demasiados.

Para obtener más información, consulte la sugerencia Cambio de la cuenta de servicio.

¿Quién está iniciando sesión en Mi servidor?

P: Quiero saber quién inicia sesión en mi servidor y cuándo, además de restringir el acceso de algunos usuarios específicos a ciertos períodos de tiempo y saber cómo iniciar un seguimiento para localizar la actividad de los usuarios. ¿Es posible?

R: Sí, puede hacer todas estas cosas mediante SQL Server 2005 si tiene Service Pack 2 instalado.

SQL Server 2005 permite crear desencadenadores de entrada que pueden activar un T-SQL o un procedimiento almacenado en respuesta a un evento LOGON. Puede usar un desencadenador de entrada para auditar y controlar los usuarios mediante un seguimiento de la actividad de entrada, restringiendo las entradas a SQL Server o limitando el número de sesiones para entradas específicas. Tenga en cuenta que el evento se lanza cuando se ha autenticado una entrada correctamente, pero poco antes de que la sesión del usuario se haya establecido realmente. Por lo tanto, todos los mensajes que se originan desde dentro del desencadenador (como por ejemplo, mensajes o errores) de la instrucción PRINT se envían al registro de errores de SQL Server. Si se produce un error de autenticación de una entrada, no se activarán los desencadenadores Logon.

El ejemplo siguiente muestra como puede crear un desencadenador de inicio de sesión y enviar un mensaje al registro de errores de SQL Server cuando inicie sesión algún usuario:

ALTER TRIGGER Ops_Login
ON ALL SERVER
AFTER LOGIN
AS
PRINT SUSER_SNAME() + ' has just logged in to ' + LTRIM(@@ServerName) + ' SQL Server at '+LTRIM(getdate())
GO

Para ver todos los desencadenadores establecidos a escala del servidor, use la consulta siguiente:

SELECT * FROM sys.server_triggers;

Desfragmentación de prácticas recomendadas

P: ¿Cuál es la mejor manera de corregir la fragmentación de los archivos de datos en SQL Server? Las herramientas de desfragmentación de Windows tratan el archivo de datos de SQL en conjunto por lo que no lo desfragmentarán.

R: Podría realizar una copia de seguridad de la base de datos y, a continuación, restaurarla. Si existe espacio para un archivo contiguo, la base de datos se deberá escribir al lado. Dicho esto, no suele merecer la pena el tiempo de inactividad para tratar de desfragmentar los archivos físicos. De todos modos, prácticamente no existe fragmentación externa. Es más útil volver a indizar los datos con regularidad para reducir la fragmentación interna tanto como sea posible. Esto maximizará la eficacia de las lecturas previas y la cantidad de datos que se pueden almacenar en búfer.

Los factores más importantes para la eficacia de la E/S del disco garantizan que la alineación del disco y la configuración de RAID son correctas, escalan las matrices del disco para tratar la carga de E/S de forma adecuada y mantienen el diseño apropiado del registro, los datos, y la base de datos temporal, así como de los archivos de copia de seguridad. Si evita el crecimiento automático y la autorreducción como método principal para cambiar el tamaño de los archivos de datos, reducirá el número del volumen de los fragmentos de archivos creados. Por ejemplo, al realizar 10 crecimientos automáticos de 500 MB cada uno, seguramente agregaría 10 nuevos fragmentos físicos del archivo. En cambio, un único crecimiento manual de 5 GB agregará tan solo un fragmento.

Sugerencia: Cambio de la cuenta de servicio

¿Sabía que cuando la cuenta de inicio de sesión de servicio de SQL Server está configurada con una cuenta de Windows NT®, SQL Server establece los derechos y permisos del usuario de Windows en varios archivos, carpetas y claves del Registro? Además, puede establecer la cuenta de servicio de SQL Server de la consola Servicios dentro de Herramientas administrativas. Sin embargo, al hacerlo a través de Servicios, no se establecen los derechos y permisos y es posible que se encuentre con problemas graves debido a la falta de una configuración de seguridad apropiada en los elementos de SQL Server y Windows mencionados anteriormente.

Por lo tanto, es muy recomendable que use el Administrador de configuración de SQL Server, en lugar de la consola Servicios al cambiar la cuenta de servicio del Agente SQL Server. Sin embargo, si ya ha realizado los cambios en la cuenta con la consola Servicios, todavía podrá corregir este problema.

Paso 1: Aplique todos los permisos en las siguientes claves del Registro y sus subclaves:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\90
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<MSSQL.x>

Paso 2: Establezca el control total de la cuenta de inicio para el servicio MSSQLServer y SQLServerAgent (una cuenta de Windows NT local o una cuenta de Windows NT del dominio) en esta carpeta NTFS:

Drive:\Program Files\Microsoft SQL Server\<MSSQL.1>\MSSQL

Sin embargo, en lugar de hacerlo manualmente, se recomienda usar el Administrador de configuración de SQL Server para realizar cambios en las cuentas de servicio del Agente SQL Server.

Desea expresar mi agradecimiento a los siguientes profesionales de TI de Microsoft por la aportación de sus conocimientos técnicos: Cary Gottesman, Saleem Hakani, Trayce Jordan, Peter Kalbach, Al Noel, Uttam Parui, Amber Sitko y Buck Woody.

© 2008 Microsoft Corporation and CMP Media, LLC. Reservados todos los derechos; queda prohibida la reproducción parcial o total sin previa autorización.