Selamlar,
Umarım En Yararlı Paylaşım Olur,
Bu
Sistemin Size Faydaları DB niz Çalınsa Bile Kullanıcılarınızın Şifresi
Asla Gözükmez, Bu Yüzden Herhangi Bir Korkunuz Olmaz Onu Bırakın
Serverınıza Girmiş Olsalar Bile Şifreler Karşılarına,
0x01008A7CE696AF938542D5BF1BF130CAF820E8BA072F3AA0 AB49
Şeklinde Çıkacaktır, Bu Şifreyi Alıp Yazsa Bile Geçersizdir, Kesinlikle
Decrypti Herhangi Bir Yerde Yoktur. (MSSQL 2005'te Test Edilmiştir ve
Şuanda Kendi Sunucumda Çalışmaktadır.)
Kısacası Kendilerini
Yırtsalarda Bu Şifrelerin Orjinal Hallerini Göremezler, İsterse DB deki
Herşeyi Silsinler Veriler Bu Şekilde Kalır ve DECYPT(Çözümlenemez)
Edilemez.
%100 Güvenlidir.
Başlıyoruz Kuruluma
kn_online DB nizin Query Analizerine Giriyoruz.
Hashı Oluşturan Fonksiyonumuz.
Kod:
CREATE FUNCTION CreateHash(@Data text) /* Author : AKUMA */ RETURNS varbinary(255) BEGIN DECLARE @Hash varbinary (255) SET @Hash = pwdencrypt(@Data) RETURN @Hash END
Hash Kontrolü Yapan Fonksiyonumuz...
Kod:
CREATE FUNCTION CheckHash(@Data text,@Hash varbinary(255)) /* Author : AKUMA */ RETURNS int BEGIN DECLARE @CheckStatus int SET @CheckStatus = pwdcompare(@Data,@Hash) RETURN @CheckStatus END
Önce TB_USER Tablomuza Şifrelenmiş Şifreleri Binary Olarak Yazacağımız Bir Alan Ekliyoruz...
Kod:
ALTER TABLE TB_USER ADD strPasswdBackup varbinary(255) NOT NULL DEFAULT 0;
Sonrasında Çalıştıracağımız Kod (İşlem Biraz Uzun Sürebilir User Sayısı Hızı Belirler.)
Kod:
DECLARE @strAccountID varchar(50),@strPasswd varchar(50),@strPasswdBackup varbinary(255) DECLARE TB_USER CURSOR FOR SELECT strAccountID,strPasswd,strPasswdBackup FROM TB_USER OPEN TB_USER FETCH NEXT FROM TB_USER INTO @strAccountID,@strPasswd,@strPasswdBackup WHILE (@@FETCH_STATUS = 0) BEGIN UPDATE TB_USER SET strPasswdBackup = dbo.CreateHash(@strPasswd) WHERE strAccountID = @strAccountID FETCH NEXT FROM TB_USER INTO @strAccountID,@strPasswd,@strPasswdBackup END CLOSE TB_USER DEALLOCATE TB_USER
Yukarıdaki Kodu Uyguladığımızda Tüm Şifreler Binary Formatında
strPasswdBackup a Yazılmış Olduğunu Göreceksiniz, Şimdi Geldik Bunu
Normal strPasswd ye Çevirmeye TB_USER Tablomuzdaki strPasswd Alanını
Siliyoruz.
Kod:
ALTER TABLE TB_USER DROP COLUMN strPasswd;
Evet strPasswd yide Sildik, Şimdi strPasswdBackup ın Adını strPasswd ye Çevirelim.
Kod:
EXEC sp_rename 'TB_USER.strPasswdBackup', 'strPasswd', 'COLUMN'
İşlemlerimiz Bitti Şimdi Geldik ACCOUNT_LOGIN de Bunu Nasıl Kontrol Edeceğimize ;
ACCOUNT_LOGINI Açtığımız da Şöyle Bir Bölüm Göreceksiniz (Şifreyi
Kontrol Eden Kısım) - (Unutmayınızki ACCOUNT_LOGIN den Hariç Bir LOGIN
Prosedürünüz Var ise Onada Aynısını Uygulamanız Gerekir.)
Varolan ACCOUNT_LOGIN
Kod:
DECLARE @pwd varchar(13) SET @pwd = null SELECT @pwd = strPasswd FROM TB_USER WHERE strAccountID = @AccountID IF @pwd IS null BEGIN SET @nRet = 0 RETURN END ELSE IF @pwd <> @Password BEGIN SET @nRet = 0 RETURN END
Yeni Şifre Kontrol Kısmı (Değiştirilen Kısımlar Kırmızı Olarak Belirtilmiştir.)
Kod:
DECLARE @pwd varbinary(255) SET @pwd = null SELECT @pwd = strPasswd FROM TB_USER WHERE strAccountID = @AccountID IF @pwd IS null BEGIN SET @nRet = 0 RETURN END ELSE IF dbo.CheckHash(@Password,@pwd) <> 1 BEGIN SET @nRet = 0 RETURN END
Otomatik Üyelik te Kullanacığınız Örnek Kod(Unutmayınızki ACCOUNT_LOGIN
den Hariç Bir LOGIN Prosedürünüz Var ise Onada Aynısını Uygulamanız
Gerekir.) - (Değiştirilen Kısımlar Kırmızı Olarak Belirtilmiştir.)
Kod:
-- # Auto Account Start # SELECT @nRet = Count(strAccountId) FROM TB_USER WHERE strAccountId = @AccountID IF @nRet = 0 BEGIN INSERT INTO TB_USER (straccountid, strpasswd, strSocNo, idays) values (@AccountID, dbo.CreateHash(@password), 1, '6') END -- # Auto Account End #
Hash Şifre Değişimi İçin Procedure(Normal Şifre Gibi Değiştiremezsiniz.)
Kod:
CREATE PROCEDURE ACCOUNT_PASSWORD_CHANGE ( @AccountID varchar(50), @Password varchar(50) ) AS /* Author : AKUMA */ BEGIN TRAN DECLARE @AccountStatus tinyint SELECT @AccountStatus = COUNT(strAccountID) FROM TB_USER WHERE strAccountID = @AccountID IF @AccountStatus = 0 BEGIN PRINT RTRIM(LTRIM(@AccountID)) + ' Adında Bir Hesap Bulunamadı.' END ELSE BEGIN UPDATE TB_USER SET strPasswd = dbo.CreateHash(@Password) WHERE strAccountID = @AccountID PRINT RTRIM(LTRIM(@AccountID)) + ' Hesabının Şifresi Değişmiştir.' END COMMIT TRAN
Şifre Değişim Proceduresinin Kullanımı
Kod:
Kullanım : EXEC ACCOUNT_PASSWORD_CHANGE 'HESAPID','ŞİFRE' Örnek : EXEC ACCOUNT_PASSWORD_CHANGE 'HESAPID','ŞİFRE'
Uzman Kullanıcılar İçin Bilgilendirme ;
Şifreleme ;
Kod:
Kullanım : SELECT dbo.CreateHash('ŞİFRE') Örnek : SELECT dbo.CreateHash('123456')
Şifrenin Doğruluğunu Kontrol Etme ;
Kod:
Kullanım : SELECT dbo.CheckHash('Kontrol Edilecek Açık Şifre','Userın Hash Şifresi') Örnek : SELECT dbo.CheckHash('123456',0x01008A7CE696AF938542D5BF1BF130CAF820E8BA072F3AA0AB49) Bu Değer Sonunda 0 Dönerse Şifre Yanlış, 1 Dönerse Şifre Doğru Demektir.
alıntıdır..
Umarım En Yararlı Paylaşım Olur,
Bu
Sistemin Size Faydaları DB niz Çalınsa Bile Kullanıcılarınızın Şifresi
Asla Gözükmez, Bu Yüzden Herhangi Bir Korkunuz Olmaz Onu Bırakın
Serverınıza Girmiş Olsalar Bile Şifreler Karşılarına,
0x01008A7CE696AF938542D5BF1BF130CAF820E8BA072F3AA0 AB49
Şeklinde Çıkacaktır, Bu Şifreyi Alıp Yazsa Bile Geçersizdir, Kesinlikle
Decrypti Herhangi Bir Yerde Yoktur. (MSSQL 2005'te Test Edilmiştir ve
Şuanda Kendi Sunucumda Çalışmaktadır.)
Kısacası Kendilerini
Yırtsalarda Bu Şifrelerin Orjinal Hallerini Göremezler, İsterse DB deki
Herşeyi Silsinler Veriler Bu Şekilde Kalır ve DECYPT(Çözümlenemez)
Edilemez.
%100 Güvenlidir.
Başlıyoruz Kuruluma
kn_online DB nizin Query Analizerine Giriyoruz.
Hashı Oluşturan Fonksiyonumuz.
Kod:
CREATE FUNCTION CreateHash(@Data text) /* Author : AKUMA */ RETURNS varbinary(255) BEGIN DECLARE @Hash varbinary (255) SET @Hash = pwdencrypt(@Data) RETURN @Hash END
Hash Kontrolü Yapan Fonksiyonumuz...
Kod:
CREATE FUNCTION CheckHash(@Data text,@Hash varbinary(255)) /* Author : AKUMA */ RETURNS int BEGIN DECLARE @CheckStatus int SET @CheckStatus = pwdcompare(@Data,@Hash) RETURN @CheckStatus END
Önce TB_USER Tablomuza Şifrelenmiş Şifreleri Binary Olarak Yazacağımız Bir Alan Ekliyoruz...
Kod:
ALTER TABLE TB_USER ADD strPasswdBackup varbinary(255) NOT NULL DEFAULT 0;
Sonrasında Çalıştıracağımız Kod (İşlem Biraz Uzun Sürebilir User Sayısı Hızı Belirler.)
Kod:
DECLARE @strAccountID varchar(50),@strPasswd varchar(50),@strPasswdBackup varbinary(255) DECLARE TB_USER CURSOR FOR SELECT strAccountID,strPasswd,strPasswdBackup FROM TB_USER OPEN TB_USER FETCH NEXT FROM TB_USER INTO @strAccountID,@strPasswd,@strPasswdBackup WHILE (@@FETCH_STATUS = 0) BEGIN UPDATE TB_USER SET strPasswdBackup = dbo.CreateHash(@strPasswd) WHERE strAccountID = @strAccountID FETCH NEXT FROM TB_USER INTO @strAccountID,@strPasswd,@strPasswdBackup END CLOSE TB_USER DEALLOCATE TB_USER
Yukarıdaki Kodu Uyguladığımızda Tüm Şifreler Binary Formatında
strPasswdBackup a Yazılmış Olduğunu Göreceksiniz, Şimdi Geldik Bunu
Normal strPasswd ye Çevirmeye TB_USER Tablomuzdaki strPasswd Alanını
Siliyoruz.
Kod:
ALTER TABLE TB_USER DROP COLUMN strPasswd;
Evet strPasswd yide Sildik, Şimdi strPasswdBackup ın Adını strPasswd ye Çevirelim.
Kod:
EXEC sp_rename 'TB_USER.strPasswdBackup', 'strPasswd', 'COLUMN'
İşlemlerimiz Bitti Şimdi Geldik ACCOUNT_LOGIN de Bunu Nasıl Kontrol Edeceğimize ;
ACCOUNT_LOGINI Açtığımız da Şöyle Bir Bölüm Göreceksiniz (Şifreyi
Kontrol Eden Kısım) - (Unutmayınızki ACCOUNT_LOGIN den Hariç Bir LOGIN
Prosedürünüz Var ise Onada Aynısını Uygulamanız Gerekir.)
Varolan ACCOUNT_LOGIN
Kod:
DECLARE @pwd varchar(13) SET @pwd = null SELECT @pwd = strPasswd FROM TB_USER WHERE strAccountID = @AccountID IF @pwd IS null BEGIN SET @nRet = 0 RETURN END ELSE IF @pwd <> @Password BEGIN SET @nRet = 0 RETURN END
Yeni Şifre Kontrol Kısmı (Değiştirilen Kısımlar Kırmızı Olarak Belirtilmiştir.)
Kod:
DECLARE @pwd varbinary(255) SET @pwd = null SELECT @pwd = strPasswd FROM TB_USER WHERE strAccountID = @AccountID IF @pwd IS null BEGIN SET @nRet = 0 RETURN END ELSE IF dbo.CheckHash(@Password,@pwd) <> 1 BEGIN SET @nRet = 0 RETURN END
Otomatik Üyelik te Kullanacığınız Örnek Kod(Unutmayınızki ACCOUNT_LOGIN
den Hariç Bir LOGIN Prosedürünüz Var ise Onada Aynısını Uygulamanız
Gerekir.) - (Değiştirilen Kısımlar Kırmızı Olarak Belirtilmiştir.)
Kod:
-- # Auto Account Start # SELECT @nRet = Count(strAccountId) FROM TB_USER WHERE strAccountId = @AccountID IF @nRet = 0 BEGIN INSERT INTO TB_USER (straccountid, strpasswd, strSocNo, idays) values (@AccountID, dbo.CreateHash(@password), 1, '6') END -- # Auto Account End #
Hash Şifre Değişimi İçin Procedure(Normal Şifre Gibi Değiştiremezsiniz.)
Kod:
CREATE PROCEDURE ACCOUNT_PASSWORD_CHANGE ( @AccountID varchar(50), @Password varchar(50) ) AS /* Author : AKUMA */ BEGIN TRAN DECLARE @AccountStatus tinyint SELECT @AccountStatus = COUNT(strAccountID) FROM TB_USER WHERE strAccountID = @AccountID IF @AccountStatus = 0 BEGIN PRINT RTRIM(LTRIM(@AccountID)) + ' Adında Bir Hesap Bulunamadı.' END ELSE BEGIN UPDATE TB_USER SET strPasswd = dbo.CreateHash(@Password) WHERE strAccountID = @AccountID PRINT RTRIM(LTRIM(@AccountID)) + ' Hesabının Şifresi Değişmiştir.' END COMMIT TRAN
Şifre Değişim Proceduresinin Kullanımı
Kod:
Kullanım : EXEC ACCOUNT_PASSWORD_CHANGE 'HESAPID','ŞİFRE' Örnek : EXEC ACCOUNT_PASSWORD_CHANGE 'HESAPID','ŞİFRE'
Uzman Kullanıcılar İçin Bilgilendirme ;
Şifreleme ;
Kod:
Kullanım : SELECT dbo.CreateHash('ŞİFRE') Örnek : SELECT dbo.CreateHash('123456')
Şifrenin Doğruluğunu Kontrol Etme ;
Kod:
Kullanım : SELECT dbo.CheckHash('Kontrol Edilecek Açık Şifre','Userın Hash Şifresi') Örnek : SELECT dbo.CheckHash('123456',0x01008A7CE696AF938542D5BF1BF130CAF820E8BA072F3AA0AB49) Bu Değer Sonunda 0 Dönerse Şifre Yanlış, 1 Dönerse Şifre Doğru Demektir.
alıntıdır..