Este blog es una traducción de un
artículo publicado en mssqltips por Brent Shaub, que permite crear
un procedimiento almacenado que genera contraseñas aleatorias.
Problema
SQL Server se utiliza para apoyar
muchas aplicaciones y una de esas características es el
almacenamiento de contraseñas. A veces es necesario restablecer una
contraseña con una contraseña temporal o generar una contraseña
aleatoria para un usuario nuevo. En este tip se desarrolla un
procedimiento almacenado para generar contraseñas aleatorias que se
pueden incorporar en sus aplicaciones.
Solución
El siguiente procedimiento almacenado
crea cadenas de caracteres al azar basado en cuatro parámetros que
configuran el resultado.
- LEN - especifica la longitud del resultado (obligatorio)
- MIN - indica el Código ASCII inicial (opcional: por omisión "48": que es el número cero)
- RANGE - determina el rango de cuántos caracteres ASCII se incluirán (opcional: por omisión "74" (48 + 74 = 122) donde 122 es "z" minúscula)
- EXCLUDE - un string de caracteres por excluir de la salida final (opcional: por omisión incluye cero, "O" mayúscula, estos signos de puntuación :;<=>?@[]`^\/)
Código
create proc [dbo].uspRandChars
@len int,
@min tinyint = 48,
@range tinyint = 74,
@exclude varchar(50) =
'0:;<=>?@O[]`^\/',
@output varchar(50) output
as
declare @char char
set @output = ''
while @len > 0 begin
select @char = char(round(rand()
* @range + @min, 0))
if charindex(@char, @exclude) =
0 begin
set @output += @char
set @len = @len - 1
end
end;
go
Ejemplos
declare @newpwd varchar(20)
-- all values between ASCII code 48 -
122 excluding defaults
exec [dbo].uspRandChars @len=8,
@output=@newpwd out
select @newpwd
-- all lower case letters excluding o
and l
exec [dbo].uspRandChars @len=10,
@min=97, @range=25, @exclude='ol', @output=@newpwd out
select @newpwd
-- all upper case letters excluding O
exec [dbo].uspRandChars @len=12,
@min=65, @range=25, @exclude='O', @output=@newpwd out
select @newpwd
-- all numbers between 0 and 9
exec [dbo].uspRandChars @len=14,
@min=48, @range=9, @exclude='', @output=@newpwd out
select @newpwd
Resultados
2uR37gRq
--------------
qvffsvxzvd
--------------
IRTIFJHFFCKB
--------------
58739441336731
Funciona a la perfección, recomiendo excluir la o minúscula también
ResponderEliminarBien
ResponderEliminarpues yo suelo usar este link https://thedevelopmentstages.com/generador-de-contrasena/
ResponderEliminar