본문 바로가기
Programming/MSSQL

MSSQL 랜덤 패스워드 생성하기(난수형태 비밀번호 만들기)

by 제타 2018. 5. 18.
반응형

MSSQL에서 랜덤하게 패스워드를 생성해야 하거나 쿠폰번호 등을 생성해야 할 때 일정한 범위내에서 랜덤한 문자열을 생성해보자.

RAND BETWEEN 함수를 사용해서 일정 범위 내에서 난수를 발생시키는 원리이다.



예를 들어 5~25 사이 난수를 생성하려면 다음처럼 하면된다.

SELECT CAST(20*RAND() + 5 AS INT)


만약 5~25사이의 난수 중에서 총 5자리에 소수점 1자리까지 표현하려면 다음과 같다

SELECT CAST(20*RAND() + 5 AS DECIMAL(5,1))




-- 먼저 RANDBETWEEN 함수를 만든다

CREATE VIEW VRANDOMNUMBER

AS

    SELECT RAND() AS RANDOMNUMBER

GO


CREATE FUNCTION RANDBETWEEN(@BOTTOM INT, @TOP INT)

RETURNS INT

AS

BEGIN

RETURN (SELECT CAST(ROUND((@TOP-@BOTTOM)* RANDOMNUMBER + @BOTTOM,0) AS INTEGER) FROM VRANDOMNUMBER)

END

GO







--그리고 랜덤 스트링 생성 함수를 생성한다

CREATE FUNCTION dbo.GeneratePassword ()

RETURNS varchar(10)

AS

BEGIN


DECLARE @randInt int;

DECLARE @NewCharacter varchar(1);

DECLARE @NewPassword varchar(10);

SET @NewPassword='';

--6 random characters

WHILE (LEN(@NewPassword) <6)

BEGIN

select @randInt=dbo.randbetween(48,122)

-- 0-9 < = > ? @ A-Z [ \ ] a-z

IF @randInt<=57 OR (@randInt>=60 AND @randInt<=93) OR (@randInt>=97 AND @randInt<=122)

Begin

select @NewCharacter=CHAR(@randInt)

select @NewPassword=CONCAT(@NewPassword, @NewCharacter)

END

END


--Ensure a lowercase

select @NewCharacter=CHAR(dbo.randbetween(97,122))

select @NewPassword=CONCAT(@NewPassword, @NewCharacter)


--Ensure an upper case

select @NewCharacter=CHAR(dbo.randbetween(65,90))

select @NewPassword=CONCAT(@NewPassword, @NewCharacter)


--Ensure a number

select @NewCharacter=CHAR(dbo.randbetween(48,57))

select @NewPassword=CONCAT(@NewPassword, @NewCharacter)


--Ensure a symbol


WHILE (LEN(@NewPassword) <10)

BEGIN


select @randInt=dbo.randbetween(33,64)

    -- ! # $ % & < = > ? @

IF @randInt=33 OR (@randInt>=35 AND @randInt<=38) OR (@randInt>=60 AND @randInt<=64)

Begin

select @NewCharacter=CHAR(@randInt)

select @NewPassword=CONCAT(@NewPassword, @NewCharacter)

END

END


 


RETURN(@NewPassword);

END;

GO



-- 이제 GeneratePassword() 함수를 통해 랜덤하게 캐릭터를 생성해보자

SELECT dbo.GeneratePassword() AS 'NewPassword';

SELECT dbo.GeneratePassword() AS 'NewPassword';

SELECT dbo.GeneratePassword() AS 'NewPassword';



출처 - sqler.com

반응형