Overblog Folge diesem Blog
Edit post Administration Create my blog
Blog von Olaf Helper

T-SQL Passwort Generator Nr. 2

8. April 2009 , Geschrieben von Olaf Helper Veröffentlicht in #T-SQL

Der erste Password Generator in T-SQL für den MS SQL Server erstellt komplett kryptische Passwörter, die man sich eigentlich nicht merken kann, dafür kann man sie nicht „erraten“. Somit sind sie zumindest als Passwörter für System-Accounts (wie der „sa“) oder Anwendungs-Rollen gut geeignet; also wo sich niemand interaktive anmeldet.

Nun will ich einen Generator vorstellen, das auch merkbare Passwort erstellt und zwar sogenannte „Mnemonische Passwörter“. Diese bestehen immer aus einer Kombination aus Konsonant gefolgt von einem Vokal. Dadurch entstehen zufällig Wörter, die zwar keinen richtigen Sinn machen, aber „sprechbar“ und somit besser merkbar sind; z.B. „yegazoru“.

Die Logik der Stored Procedure ist im Großen dem von Nr. 1 gleich; nur das immer Kombinationen von 2 Buchstaben erstellt werden.

 -- Alte vorhandene Version löschen 
 IF NOT OBJECT_ID('dbo.spGeneratePassword2') IS NULL 
  DROP PROCEDURE dbo.spGeneratePassword2; 
 GO 
   
 -- Autor: Olaf Helper 
 -- Stand: 07.04.2009 
 -- Typ: Stored Procedure 
 -- Name: spGeneratePassword2 
 -- Generiert "Mnemonische Passwörter" mit je 
 -- ein Konsonant und ein Vokal in Folge erzeugen 
   
 CREATE PROCEDURE dbo.spGeneratePassword2 
  @Password AS varchar(128) OUTPUT, 
  @MinLen AS tinyint = 8, 
  @MaxLen AS tinyint = 128 
 AS  
 BEGIN 
  DECLARE @vocal char(5); 
  DECLARE @consonat char(21); 
  DECLARE @useLen 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); 
   
  -- Set der verwendbaren Zeichen setzen 
  SET @vocal = 'aeiou'; 
  SET @consonat = 'bcdfghjklmnpqrstvwxyz'; 
   
  -- Wieviele Zeichen nun wirklich 
  IF @MinLen = @MaxLen 
  SET @useLen = @MinLen; 
  ELSE 
  SET @useLen = @MinLen + (RAND() * (@MaxLen - @MinLen)); 
   
  -- Es werden immer 2 Zeichen erzeugt, deshalb nur die Hälfte 
  SET @useLen = @useLen / 2; 
   
  -- Passwort zusammenbauen 
  SET @loop = 0; 
  SET @Password = ''; 
  WHILE @loop < @useLen 
  BEGIN 
  -- Konsonant 
  SET @pos = 1 + (RAND() * (20)); 
  SET @Password = @Password + SUBSTRING(@consonat, @pos, 1); 
  -- Vokal 
  SET @pos = 1 + (RAND() * (4)); 
  SET @Password = @Password + SUBSTRING(@vocal, @pos, 1); 
   
  SET @loop = @loop + 1; 
  END; 
   
 END;  
 GO 
   
 -- Unit-Test; Passwörter generieren lassen 
 DECLARE @loop int, @Password varchar(128); 
   
 SET @loop = 0; 
 WHILE @loop < 20 
 BEGIN 
  -- Passwörter generieren lassen 
  EXEC dbo.spGeneratePassword2 @Password OUTPUT, 8, 11; 
  SELECT @Password AS Pwd; 
  SET @loop = @loop + 1; 
 END; 
 GO 

Diesen Post teilen

Repost 0

Kommentiere diesen Post