USEFUL SITES :
Write for Us
IF OBJECT_ID('dbo.spAuditPasswords') IS NOT NULLDROP PROCEDURE dbo.spAuditPasswordsGO
CREATE PROCEDURE dbo.spAuditPasswordsAS/******************************************************************* Creation Date: 03/22/02 Created By: Randy DyessWeb Site: www.TransactSQL.ComEmail: RandyDyess@TransactSQL.ComPurpose: Perform a simple audit of user's passwordsLocation: master databaseOutput Parameters: NoneReturn Status: NoneCalled By: None Calls: NoneData Modifications: NoneUpdates: None Date Author Purpose ---------- -------------------------- ---------------------------- *******************************************************************/SET NOCOUNT ON
--VariablesDECLARE @lngCounter INTEGERDECLARE @lngCounter1 INTEGERDECLARE @lngLogCount INTEGERDECLARE @strName VARCHAR(256)
--Create table to hold SQL loginsCREATE TABLE #tLogins(numID INTEGER IDENTITY(1,1),strLogin SYSNAME NULL,lngPass INTEGER NULL)
--Insert non ntuser into temp tableINSERT INTO #tLogins (strLogin)SELECT name FROM master.dbo.syslogins WHERE isntname = 0SET @lngLogCount = @@ROWCOUNT
--Determine if password is null and user is SQL LoginPRINT 'The following logins have blank passwords'SELECT name AS 'Login Name' FROM master.dbo.sysloginsWHERE password IS NULLAND isntname = 0
--Determine if password and name are the sameSET @lngCounter = @lngLogCount
WHILE @lngCounter <> 0BEGINSET @strName = (SELECT strLogin FROM #tLogins WHERE numID = @lngCounter)
UPDATE #tLoginsSET lngPass = (SELECT PWDCOMPARE (@strName,(SELECT password FROM master.dbo.sysxlogins WHERE name = @strName))) WHERE numID = @lngCounter
SET @lngCounter = @lngCounter - 1END
PRINT 'The following logins have passwords the same as their login name'SELECT strLogin AS 'Login Name' FROM #tLogins WHERE lngPass = 1
--Reset column for next password testUPDATE #tLoginsSET lngPass = 0
--Determine if password is only one character longSET @lngCounter = @lngLogCount
WHILE @lngCounter <> 0BEGINSET @lngCounter1 = 1SET @strName = (SELECT strLogin FROM #tLogins WHERE numID = @lngCounter)WHILE @lngCounter1 < 256BEGINUPDATE #tLoginsSET lngPass = (SELECT PWDCOMPARE (CHAR(@lngCounter1),(SELECT password FROM master.dbo.sysxlogins WHERE name = @strName))) WHERE numID = @lngCounterAND lngPass <> 1
SET @lngCounter1 = @lngCounter1 + 1END
PRINT 'The following logins have one character passwords'SELECT strLogin AS 'Login Name' FROM #tLogins WHERE lngPass = 1GO
--TestEXEC dbo.spAuditPasswordsGO