31 Ocak 2011 Pazartesi

MSSQLSERVER veri güvenliği - 2

Microsoft  SQL  Veritabanı sunucusu (MSSQLSERVER) veri kriptolama ve veri dosyası kriptolama
Bölüm 2

HASHBYTES ile veri kriptolama

sql2005 ile birlikte gelen bir fonksiyon.
Bu yöntemde kriptolanan verinin orjinal haline artık ulaşamayız, ancak sadece
verdiğimiz değeride aynı yöntemle kriptolayarak karşılaştırma yapabiliriz.

 HASHBYTES(<KRIPTO METODU>,<VERI>)

bu fonksiyonda <KRIPTO METODU> alanına  md5,sha,sha1 gibi değerler gelebilir.
bunlar bilinen kriptolama metodlarıdır.  md5 çok güvenli olmayan bir yöntemdir.
çünkü kaydedilmiş hash''li veri bilinince internetten kolayca bulunabilecek hash tabloları
yardımı ile gerçek veri oluşturulabilir. o yüzden burada daha güçlü olan sha1 gibi
bir metodu kullanılması tavsiye edilir.

  hashlenendeger= hashbytes(sha1,'gizli veri')
  bizimhasdegeri=hashbytes(sha1,'denenen değer')
 
  evet yukarıdaki gibi gerçek veri hashli duruyor sistemde, bu değer ile
  bizim girdiğimiz değerin aynı metod ile hash''lenmesi sonucu oluşan hash''
  değeri aynı ise 2 değer birbirine eşittir. yukarıdaki hash değerleri farklı çıkacaktır tabi.
 

 gelelim demomuza...

--bir kullanıcıları login ile sistemimize aldığımız bir web sitesi düşünelim
-- burada en önemli verimiz tabiki kullanıcının şifresidir. çünkü şifre bilindiğinde
-- diğer bilgilere arayüzden erişmek kolaydır.
-- o yüzden şifre bilgilerini güvenli kriptolu tutmamız gerekir.

-- bir tablo oluşturalım ve şifre tutacağımız alanı varbinary formatında oluşturalım.

CREATE TABLE [dbo].[tblUser](
      [id] [int] IDENTITY(1,1) NOT NULL,
      [username] [varchar](20) NOT NULL,
      [isim] [varchar](50) NOT NULL,
      [sifre] [varbinary](256) NOT NULL,  -- şifreyi hash'li tutacağından byte tipinde
 CONSTRAINT [PK_tblUser] PRIMARY KEY CLUSTERED
(
      [id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO


--- kullanıcıları kayıt etme sırasında hash'leyerek kaydediyoruz.
-- çok basit bir fonksiyon ile  bilgiyi hash'leyebiliyoruz....


declare @username varchar(20)
declare @sifre varchar(20)
declare @isim varchar(50)

--kullanıcı kaydet

set @isim='Fatih ÜNAL'
set @username='fatih'
set @sifre='şifre12345'

insert into tblUser
values(@username ,@isim ,hashbytes('sha1',@sifre))


select * from tblUser


--şifre doğrumu kontrolü


 set @username='fatih'
 set  @sifre='şifrem12345'   -- uygulamadan gelen şifre


if exists(select * from tblUser
where username=@username and   sifre=HASHBYTES('sha1',@sifre))
begin
  select 'doğru'
end
else
begin
  select 'yanlış'
end

Devam edecek....

Hiç yorum yok: