DO NOT GIVE THIS TO CUSTOMERS, THIS IS STRICTLY FOR INTERNAL USE!!
A script to decode Manitou passwords if they are ever lost. There is a single line that needs to be edited and is identified by a comment just before it for this query to work. By default the script runs against the BOLD user.
USE [MANITOU]; GO -- Check for decode function and remove if it exists IF OBJECT_ID(N'[dbo].[DecodeManitouPassword]', N'FN') IS NOT NULL BEGIN DROP FUNCTION [dbo].[DecodeManitouPassword]; END; GO -- Add decode function CREATE FUNCTION [dbo].[DecodeManitouPassword] (@EncodedPassword VARCHAR(150)) RETURNS VARCHAR(75) AS BEGIN DECLARE @PasswordIndex BIGINT; DECLARE @PasswordLength BIGINT; DECLARE @EncodedPasswordCharacter1 CHAR(1); DECLARE @EncodedPasswordCharacter2 CHAR(1); DECLARE @EncodedPasswordCharacter1_ASCII SMALLINT; DECLARE @EncodedPasswordCharacter2_ASCII SMALLINT; DECLARE @DecodedPasswordCharacter CHAR(1); DECLARE @DecodedPasswordCharacter_ASCII SMALLINT; DECLARE @DecodedPassword VARCHAR(75); SET @PasswordIndex = 1; SET @PasswordLength = LEN(@EncodedPassword); SET @DecodedPassword = ''; WHILE @PasswordIndex <= @PasswordLength BEGIN SET @EncodedPasswordCharacter1 = SUBSTRING(@EncodedPassword, @PasswordIndex, 1); SET @EncodedPasswordCharacter1_ASCII = ASCII(@EncodedPasswordCharacter1); SET @EncodedPasswordCharacter2 = SUBSTRING(@EncodedPassword, @PasswordIndex + 1, 1); SET @EncodedPasswordCharacter2_ASCII = ASCII(@EncodedPasswordCharacter2); IF ASCII(@EncodedPasswordCharacter1) = 195 BEGIN -- ASCII character between 0 and 63 SET @DecodedPasswordCharacter_ASCII = CASE @EncodedPasswordCharacter2_ASCII % 8 WHEN 5 THEN 133 WHEN 4 THEN 131 WHEN 7 THEN 133 WHEN 6 THEN 131 WHEN 1 THEN 125 WHEN 0 THEN 123 WHEN 3 THEN 125 WHEN 2 THEN 123 ELSE NULL END; END ELSE IF ASCII(@EncodedPasswordCharacter1) = 194 BEGIN -- ASCII character between 64 and 128 SET @DecodedPasswordCharacter_ASCII = CASE (@EncodedPasswordCharacter2_ASCII - 64) % 8 WHEN 5 THEN 69 WHEN 4 THEN 67 WHEN 7 THEN 69 WHEN 6 THEN 67 WHEN 1 THEN 61 WHEN 0 THEN 59 WHEN 3 THEN 61 WHEN 2 THEN 59 ELSE NULL END; END; SET @DecodedPasswordCharacter_ASCII = @EncodedPasswordCharacter2_ASCII - @DecodedPasswordCharacter_ASCII; SET @DecodedPasswordCharacter = CHAR(@DecodedPasswordCharacter_ASCII); SET @DecodedPassword = @DecodedPassword + @DecodedPasswordCharacter; SET @PasswordIndex = @PasswordIndex + 2; END; RETURN @DecodedPassword; END; GO -------------------------------------------------------------------------------------------------------------------- -- Edit the user BOLD in the following DECLARE statement to decode the user's password as desired. -------------------------------------------------------------------------------------------------------------------- DECLARE @UserId NVARCHAR(12) = N'BOLD'; SELECT AP1.[PasswordType] , AP1.[UserId] , AP1.[Password] , AP1.[PasswordDateTime] FROM [PASSWD] AS AP CROSS APPLY ( SELECT AP.[USRID] AS [UserId] , CASE AP.[TYPE] WHEN 0 THEN '0 - Manitou' WHEN 1 THEN '1 - Accounts System' ELSE NULL END AS [PasswordType] , [dbo].[DecodeManitouPassword](AP.[PASSWD]) AS [Password] , AP.[PWDATE] AS [PasswordDateTime] ) AS AP1 WHERE AP.[ACTIVE] = 1 AND AP.[USRID] = @UserId ORDER BY AP1.[PasswordType] ASC , AP1.[UserId] ASC; -- Remove function to prevent abuse DROP FUNCTION [dbo].[DecodeManitouPassword]; GO