Hoy queremos traer un escenario relacionado con la administración de cuentas de inicio de sesión que, aunque en apariencia es sencillo, puede generar algo de confusión y hacernos perder más tiempo del deseado.

NOTA: Queda fuera de este artículo las consideraciones generales relativas a las mejores prácticas de seguridad para SQL Server 2005, 2008 y 2008R2. Tan sólo dejar claro que, como norma general y dentro de lo posible, en lo que se refiere a la creación de cuentas de inicio se recomienda el uso de la autentificación integrada con Windows y que, dentro de esta opción, se empleen grupos usuarios de dominio de tipo local (domain local group / local groups) en lugar de cuentas individuales (domain account / local account). Para más detalles sobre estos temas recomendamos consultar los enlaces de referencia incluidos al final del artículo.

Escenario inicial

En determinadas circunstancias puede existir la necesidad de dar permisos de acceso a una cuenta de máquina (computer account) en una o más base de datos dentro de una instancia de SQL Server. Para ello es necesario crear una cuenta de inicio de sesión para la cuenta de máquina y luego crear las cuentas de usuario en cada una de las bases de datos necesarias con los permisos adecuados. También es verdad que lo habitual es dar acceso una cuenta de usuario de dominio o a un grupo de usuarios local de dominio, o incluso crear una cuenta propia de SQL Server.

Un caso donde es necesario crear inicio de sesión para cuentas de máquina puede ser que un producto “cerrado” (como SCOM 2007 por ejemplo) requiera este tipo de configuración, o que un desarrollo a medida (como un desarrollo en ASP.NET por ejemplo) se ejecute bajo el contexto de la cuenta de sistema “NT AUTHORITY\System” de forma local o “NT AUTHORITY\NETWORK SERVICE” si se está accediendo de forma remota.


Imagen 1: Es posible ver cuentas de inicio de sesión de máquina en el explorador de objetos de SQL Server. Estas cuentas se identifican fácilmente porque con un símbolo de dólar “$” al final del nombre.


Normalmente sólo es necesario preocuparse de la creación de inicios de sesión para este tipo de cuentas cuando se está instalando un desarrollo a medida, ya que lo habitual es que la propia instalación de un producto cerrado se encargue de esta tarea. No obstante puede darse el caso en el que sea necesario mover una cuenta de máquina a una nueva instancia o crear una nueva cuenta en la misma, como por ejemplo migraciones o actualizaciones a versiones más recientes de la base de datos. Sea cual sea el motivo, si para el proceso se intenta utilizar la interfaz gráfica de SQL Server Management Studio, se puede comprobar que del todo imposible crear un inicio de sesión para una cuenta de máquina, ya que la propia ventana de selección de cuentas no permite incluirlas o enumerarlas.



Imagen 2: La interfaz gráfica de SSMS no permite elegir el tipo de objeto (object type) máquina ya que no aparece tan siquiera listado.


En cambio, en otros servicios, como la administración de cuentas de usuario del sistema operativo, es posible ver e incluir cuentas de máquina.


Imagen 3: La consola de administración de usuarios sí permite elegir el tipo de objeto (object type) máquina.


Si de todas formas se conoce y se intenta escribir el nombre completo de la cuenta de máquina, al chequearla o se intenta directamente aceptar en el cuadro de diálogo, el sistema mostrará un error indicando que no ha podido localizar el nombre especificado dentro de los objetos de tipo usuario, grupo o cuentas predefinidas.


Imagen 4: Error al intentar introducir manualmente la cuenta de máquina.


Resolución

SQL Server Management Studio no permite la selección de cuentas de máquina desde la interfaz gráfica por características de diseño. La ventana de selección de cuentas del Directorio Activo pertenece a la librería común del sistema operativo, al igual que el cuadro de diálogo para abrir o guardar un fichero o el de seleccionar un directorio de destino. Cuando una aplicación desea utilizar esta ventana de selección de cuentas debe indicarle de antemano el tipo de objetos del Directorio Activo que desea que aparezcan listados y en este caso SSMS le solicita que muestre cuentas de usuario, grupos y cuentas predeterminadas. Esto no significa que en futuras revisiones no se cambie este comportamiento.

En este caso la única forma posible de dar de alta una cuenta de máquina es a través de un comando Transact-SQL. Como recordatorio, la cuenta de máquina corresponde al nombre de la máquina (que puede obtenerse desde la línea de comandos con el comando HOSTNAME) precedido por el nombre del dominio donde se encuentra y seguido del símbolo de dólar ($). Es prácticamente seguro que esta opción no funcione para equipos fuera de dominio:

De todas formas, la solución recomendada es, siempre que lo permita el producto o el desarrollo que utilice la cuenta, crear un grupo de usuarios local o local de dominio en la consola de administración de seguridad del sistema operativo y añadir la cuenta de máquina para luego crear una cuenta de inicio de sesión en SQL Server vinculada al grupo. También se recomienda como norma general evitar el uso de las cuentas predefinidas “NT AUTHORITY\System” o “NT AUTHORITY\NETWORK SERVICE” en los desarrollos que accedan a recursos tales como ficheros o bases de datos y que de forma alternativa se utilicen cuentas de usuario local o de dominio específicas para cada propósito. De esta manera se logra identificar qué servicio o aplicación en concreto está accediendo a cada recurso y se protege al sistema operativo de posibles fallos de seguridad.

Referencias

Cómo crear un inicio de sesión de SQL Server

http://msdn.microsoft.com/es-es/library/aa337562.aspx

CREATE LOGIN (Transact-SQL)

http://msdn.microsoft.com/es-es/library/ms189751.aspx

SQL Server 2005 Security Best Practices - Operational and Administrative Tasks

http://sqlcat.com/whitepapers/archive/2007/12/16/sql-server-2005-security-best-practices-operational-and-administrative-tasks.aspx

Directory Object Picker

http://msdn.microsoft.com/en-us/library/ms675899(v=vs.85).aspx

 

- Jesús Nacimiento Casanova, Microsoft Premier Field Engineer