Este script lo utilizo para identificar el estado actual del usuario y posteriormente desbloquearlo generando la documentación adecuada para entregar al cliente sobre lo realizado
PROCESO IDENTIFICAR ESTADO DEL USUARIO
USE [master]
GO
SET NOCOUNT ON
SELECT @@servername as Server,name, CASE CAST(is_policy_checked AS TINYINT)+CAST(is_expiration_checked AS TINYINT)
WHEN 0 THEN 'Not Enforced'
WHEN 1 THEN 'Contraseña - Sin expiración'
WHEN 2 THEN 'Contraseña con Expiración' END AS PasswordEnforcement,
LOGINPROPERTY(name,'BadPasswordCount') AS BadPasswordCount,
LOGINPROPERTY(name,'BadPasswordTime') AS BadPasswordTime,
LOGINPROPERTY(name,'DaysUntilExpiration') AS DaysUntilExpiration,
default_database_name,
CASE WHEN LOGINPROPERTY(name,'IsExpired') = 0 THEN 'NO' ELSE 'SI' END AS IsExpired,
CASE WHEN LOGINPROPERTY(name,'IsLocked') = 0 THEN 'NO' ELSE 'SI' END AS IsLocked,
CASE WHEN LOGINPROPERTY(name,'IsMustChange') = 0 THEN 'NO' ELSE 'SI' END AS IsMustChange,
LOGINPROPERTY(name,'LockoutTime') AS LockoutTime,
LOGINPROPERTY(name,'PasswordLastSetTime') AS PasswordLastSetTime
FROM sys.sql_logins
where name in('USUARIO DESBLOQUEAR')
ORDER BY name
PROCESO DESBLOQUEO-EXTENDER DURACION DEL USUARIO DEL USUARIO
USE [master]
GO
--SQL Server 2012 y superiores usan SHA2-512 (512 bytes hash)
--SQL Server 2000 hasta 2008 R2 usan SHA1 (160 bytes hash)
declare @passhashedstr nvarchar(1024)
declare @sqltext nvarchar(1024)
declare @sqlstr nvarchar(1024)
declare @loginuser sysname
set @loginuser=N'e0283454'
select @passhashedstr=convert(nvarchar(514),LOGINPROPERTY(@loginuser,'PASSWORDHASH'),1 )
--SELECT LOGINPROPERTY(@loginuser,'PASSWORDHASH')
--select @passhashedstr
set @sqlstr='ALTER LOGIN ['+ @loginuser + '] WITH CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF'
EXECUTE sp_executesql @sqlstr
set @sqlstr='ALTER LOGIN ['+ @loginuser + '] WITH PASSWORD = ' +@passhashedstr +' HASHED;'
--select @sqlstr
--select Convert(NVARCHAR(MAX), @passhashed, 1)
EXECUTE sp_executesql @sqlstr
set @sqlstr='ALTER LOGIN ['+ @loginuser + '] WITH CHECK_EXPIRATION=ON, CHECK_POLICY=ON'
EXECUTE sp_executesql @sqlstr
select @sqltext=
'Política Actual: '+ CASE CAST([is_policy_checked] AS tinyint) + CAST([is_expiration_checked] AS TINYINT)
WHEN 0 THEN 'No Forzado' WHEN 1 THEN 'Password - No Expira' WHEN 2 THEN 'Password con Expiración' END
+ '; Días para Expirar: '+isnull(convert(nvarchar(4),LOGINPROPERTY(@loginuser,'DaysUntilExpiration')), 'N/A')
+' Fecha Expiración -1: ' + case convert(nvarchar(4),LOGINPROPERTY(@loginuser,'DaysUntilExpiration')) when null then 'N/A'
else convert(nvarchar(23),dateadd(d,convert(int,LOGINPROPERTY(@loginuser,'DaysUntilExpiration'))-1,getdate())) end
+' Expirado: '+CASE WHEN convert(nvarchar(1),LOGINPROPERTY(@loginuser,'IsExpired')) = 0 THEN 'No' ELSE 'Si' END
+' Bloqueado: '+CASE WHEN convert(nvarchar(1),LOGINPROPERTY(@loginuser,'IsLocked')) = 0 THEN 'No' ELSE 'Si' END
+' Fecha Bloqueo: '+ convert(nvarchar(23),LOGINPROPERTY(@loginuser,'LockoutTime'))
FROM sys.sql_logins where name=@loginuser
Print 'Desbloqueo usuario por clave o expiración
Se realizaron las siguientes acciones:
1. Bloqueo de usuario en motor SQL Server instancia '+ @@servername +'
2. Autogenera password usuario ' + @loginuser +', realiza desbloqueo por expiración o intentos fallidos
3. Se Valida propiedades de cuenta '+ @loginuser +';'+ @sqltext
No hay comentarios:
Publicar un comentario