Cómo crear una cuenta de inicio de sesión en SQL Server para una cuenta de máquina

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

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

CREATE LOGIN (Transact-SQL)

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

SQL Server 2005 Security Best Practices - Operational and Administrative
Tasks

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

Directory Object Picker

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

 

- Jesús Nacimiento Casanova, Microsoft Premier Field Engineer