Mostrando entradas con la etiqueta MSSQL 2000. Mostrar todas las entradas
Mostrando entradas con la etiqueta MSSQL 2000. Mostrar todas las entradas

lunes, 24 de agosto de 2020

Scripts para desbloqueo de usuario en SQL Server 2000 a 2019, sin cambiar la contraseña

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