Como DBA, seguramente te has encontrado alguna vez que la cuenta de servicio de SQL Server está bloqueada. Dependiendo de la infraestructura y la envergadura de tus sistemas, podrás comprobarlo y solucionarlo por ti mismo o puede que tengas un equipo/compañero que te pueda ayudar a cotejar y desbloquear dicha cuenta.
En muchos casos nos hemos encontrado sin permisos en el Directorio Activo para comprobar y desbloquear la cuenta, por lo que nos hemos tenido que buscar la vida con ejemplos como el siguiente:
Imagina que, tras un reinicio, cuando se intenta levantar el servicio de SQL Server, te dé un mensaje de error y en el log compruebes que la cuenta está bloqueada. Si es sólo una cuenta, puedes entrar a la consola de usuarios de directorio activo (si la tienes instalada), buscar la cuenta y comprobar si está bloqueada o si tiene la contraseña y la propia cuenta caducada.
Pero, ¿y si no tienes está herramienta? Con la ayuda del módulo de Active-Directory de Powershell podemos hacer esto de una forma más sencilla.
Lo primero que debemos hacer es importar el módulo de Active Directory en tu Powershell:
Import-Module ActiveDirectory
Para que funcione, tenemos que tener instalado el recurso en las características de Windows:
Tras ello, abrimos una consola de Powershell (o la modalidad de Powershell ISE) y lanzamos el comando Get-ADUser:
Si ejecutamos el comando acompañado del nombre, nos mostraría algo así:
Estos datos son muy básicos y en nuestra opinión, debemos prestar más atención en los parámetros (que no aparecen por defecto) como LockedOut o PasswordExpired. Lo conseguimos de esta forma:
Tienes toda la documentación sobre el comando Get-ADUser en el siguiente enlace de Microsoft:
https://docs.microsoft.com/en-us/powershell/module/addsadministration/get-aduser?view=win10-ps
Ahora imaginemos que necesitas comprobar el estado de muchas cuentas para prevenir una incidencia en el arranque del motor ¿cómo le pasamos un listado de cuentas a nuestra consulta?
Creamos un fichero .csv con la siguiente estructura:
Llamamos a este fichero CSV desde nuestro PowerShell y lo recorremos con un “ForEach”:
Import-Module ActiveDirectory
Import-Csv C:\tmp\SQL_Service_Account_PRO.csv | ForEach {
Get-ADUser -identity $_.user -Properties name, PasswordExpired, LockedOut | `
Select name,PasswordExpired, LockedOut } | Format-Table -AutoSize
Este sería el resultado, formateado en Tabla y con el parámetro AutoSize para ajustarlo:
Y hasta aquí esta pequeña, pero creemos que muy útil entrada. Si os ha ayudado en algún momento o creéis que se puede mejorar no dudéis en hacernos llegar vuestra opinión a través de los comentarios o nuestro correo.
¡Hasta pronto!
Thanks, it is quite informative