T-SQL Passwort Generator Nr. 1
WebShops, Forum und wo man sich sonst noch anmelden kann, der User aber nicht selbst ein Passwort vorgeben kann (gibt es sowas noch?), das muss ein Passwort vorgegeben werden. Das kann über die Business Logic des Backends erfolgen oder: Über den MS SQL Server per Stored Procedure in T-SQL.
Aber eigentlich nur eine Fingerübung für mich; hier also das SQL Script für einen Passwort Generator.
-- Alte vorhandene Version löschen IF NOT OBJECT_ID('dbo.spGeneratePassword1') IS NULL
DROP PROCEDURE dbo.spGeneratePassword1; GO -- Autor: Olaf Helper -- Stand: 16.03.2009 -- Typ: Stored Procedure -- Name: spGeneratePassword1 -- CREATE PROCEDURE dbo.spGeneratePassword1
@Password AS varchar(128) OUTPUT, @MinLen AS tinyint = 8, @MaxLen AS tinyint = 128, @WithLowLetters AS bit = 1, @WithUpLetters AS bit = 1, @WithDigits AS bit = 1, @WithSigns AS bit = 1 AS BEGIN DECLARE @signs varchar(128); DECLARE @useLen smallint; DECLARE @len smallint; DECLARE @loop smallint; DECLARE @pos smallint; -- Parameter-Validierung IF @MinLen < 2 OR @MinLen > @MaxLen OR @MaxLen > 128 RAISERROR (N'Invalid pwd length range', 10, 1); IF @WithLowLetters = 0 AND @WithUpLetters = 0 AND @WithDigits = 0 AND @WithSigns = 0 RAISERROR (N'No signs for pwd defined', 10, 1); -- Set der verwendbaren Zeichen setzen
SET @signs = ''; IF @WithLowLetters = 1
SET @signs = @signs + 'abcdefghijklmnopqrstuvwxyz'; IF @WithUpLetters = 1 SET @signs = @signs + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; IF @WithDigits = 1 SET @signs = @signs + '0123456789'; IF @WithSigns = 1 -- Nur nicht-reservierte Zeichen
SET @signs = @signs + '!§$&/=?@*+~#-:<>^°';
SET @len = LEN(@signs);
-- Wieviele Zeichen nun wirklich IF @MinLen = @MaxLen
SET @useLen = @MinLen; ELSE SET @useLen = @MinLen + (RAND() * (@MaxLen - @MinLen)); -- Passwort zusammenbauen
SET @loop = 0; SET @Password = ''; WHILE @loop < @useLen
BEGIN SET @pos = 1 + (RAND() * (@len - 1)); SET @Password = @Password + SUBSTRING(@signs, @pos, 1); SET @loop = @loop + 1; END;
END;
GO
Funktioniert es auch? Machen wir den Test:
-- Unit-Test; Passwörter generieren lassen DECLARE @loop int, @Password varchar(128);
SET @loop = 0;
WHILE @loop < 20
BEGIN -- Mit DEFAULTS abrufen EXEC dbo.spGeneratePassword1 @Password OUTPUT; SELECT @Password; SET @loop = @loop + 1; END;
GO
Werbung
Diesen Post teilen
Um über die neuesten Artikel informiert zu werden, abonnieren:
Kommentiere diesen Post