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 :P
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. Kolay Gelsin
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 :P
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. Kolay Gelsin