Salı, Ağustos 19, 2008

Aktif veritabanı üzerindeki tüm trigger ları devre dışı bırakın

Aktif veritabanı üzerindeki tüm trigger ları devre dışı bırakmak için aşağıdaki yordamı kullanabilirsiniz.

CREATE PROCEDURE [dbo].[DisableAllTriggers]
AS
DECLARE @string VARCHAR(8000)
DECLARE @tableName NVARCHAR(500)
DECLARE cur CURSOR
FOR SELECT name AS tbname FROM sysobjects WHERE id IN(SELECT parent_obj FROM sysobjects WHERE xtype='tr')
OPEN cur
FETCH next FROM cur INTO @tableName
WHILE @@fetch_status = 0
BEGIN
SET @string ='Alter table '+ @tableName + ' Disable trigger all'
EXEC (@string)
FETCH next FROM cur INTO @tableName
END
CLOSE cur
DEALLOCATE cur
GO
—-Yordamı çalıştırmak için

EXEC [DisableAllTriggers]


Kaynak : http://blog.sqlauthority.com

Perşembe, Ağustos 07, 2008

Sql Server 2008 Çıktı

Bugün itibari ile sql server 2008 microsoft'un sitesinden indirililebilir.

İndirmek için

Pazartesi, Ağustos 04, 2008

SQL Server 2005 : Intersect ve Inner join arasındaki fark

Intersect komutu intersect ile bağlanmış tablolarda eşleşen kayıtları bulmak için kullanılır. Intersect komutu çoğu kez inner join ile aynı sonuçları döndürür.

Intersect komutunu kullanırken veritabanından çektiğiniz sahaların sayıları, sıraları aynı olmalı ve veri tiplerinin de uyumlu olması gerekir.
Şimdi intersect komutunu daha iyi anlamak için birkaç örnek yapalım.


Örnek 1
SELECT *
FROM HumanResources.EmployeeDepartmentHistory
WHERE EmployeeID IN (1,2,3)
INTERSECT
SELECT *
FROM HumanResources.EmployeeDepartmentHistory
WHERE EmployeeID IN (3,2,5)

Sonuç


Yukarıdaki sonuca baktığınızda her iki tablodan da birbiri ile eşleşen EmployeeID değer 2 ve 3 olan kayıtların getirilmiş olduğunu görürsünüz.


Örnek 2
SELECT VendorID,ModifiedDate
FROM Purchasing.VendorContact
INTERSECT
SELECT VendorID,ModifiedDate
FROM Purchasing.VendorAddress

Sonuç


Sorgu sonucu grid üzerinde her iki tabloda eşleşen 104 kayıt gözükmektedir.

Örnek 3
SELECT va.VendorID,va.ModifiedDate
FROM Purchasing.VendorContact vc
INNER JOIN Purchasing.VendorAddress va ON vc.VendorID = va.VendorID
AND vc.ModifiedDate = va.ModifiedDate

Sonuç


Sorgu sonucu grid üzeride her iki tabloda eşleşen tüm kayıtlar gösterilir. Yukarıda örnekten farklı olarak bu örnekte inner join sağdaki ve soldaki tablolardan tüm kayıtları getirir. Dikkat ederseniz bunların bir çoğu biribiri ile eşleşen kayıtlardır.

Örnek 4
SELECT DISTINCT va.VendorID,va.ModifiedDate
FROM Purchasing.VendorContact vc
INNER JOIN Purchasing.VendorAddress va ON vc.VendorID = va.VendorID
AND vc.ModifiedDate = va.ModifiedDate

Sonuç


Bu örnekte ise yukarıdaki örnek farklı olarak "distinct" komutunu kullandık böylece tekrarlayan veriler sorgu sonucunda çıkarıldı ve yine sorgu sonucu olarak 104 tekil kayıt grid üzerine döküldü.


Kaynak : http://blog.sqlauthority.com/2008/08/03/sql-server-2005-difference-between-intersect-and-inner-join-intersect-vs-inner-join/

Cuma, Ağustos 01, 2008

C# İle Şifreleme : Hash Şifreleme Algoritmaları

.Net ile beraber bir çok şifreleme kütüphanesi hazır olarak geliyor. Bu şifreleme sınıfları System.Security.Cryptography kütüphanesi içerisinde yeralmaktadır.

Öncelikli olarak şifreleme yöntemlerini sınıflandırmakta fayda var, şu an dünya üzerinde 3 farklı şifreleme yöntemi bulunmaktadır. Bunlar ;

  1. Hash Şifreleme Yöntemleri
    1. MD5
    2. SHA1
    3. SHA256
    4. SHA384
    5. SHA512
  2. Simetrik Şifreleme Yöntemleri
    1. DES
    2. Triple DES
    3. RC2
    4. Rijndael
  3. Asimetrik Şifreleme Yöntemleri
    1. DSA
    2. RSA
Hash Şifreleme Yöntemleri

Şifrelenen veriye tekrar ulaşmanız mümkün değildir. Şöyleki varsayalım 1000 karakterlik bir veriyi md5, sha 1, sha256 veya sha512 ile şifrelediniz bu durumda elde edeceğiniz şifrelenmiş veri algoritma türüne göre standart boyutta bir karakter katarı olacaktır. Pek tabi şöyle bir soru ortaya çıkacaktır, "eğer şifrelediğim veriye ulaşamayacaksam niye şifreleyim". Bu sorunun cevabı çok basit, bazı yaptığımız uygulamalarda şifrelenmemiş veriyi görmemiz gerekmez, örneğin bir forum açtınız, kullanıcılarınız sisteme üye olarak foruma girebilecek. İşte burada dürüst bir programcı gibi davranarak, kullanıcının girdiği şifre bilgisini Hash algoritma ile şifreleyip veritabanımızda saklamak daha doğru olacaktır. Böylece login işlemi sırasında kullanıcının girdiği veriyi tekrar şifreleyip veritabınındaki şifrelenmiş veri ile karşılaştırabiliriz. Böylece hem kullanıcının şifresini görmeyip kullanıcının özel bilgilerine saygı göstermiş oluruz hemde veri güvenliği sağlamış oluruz.

Şifreleme örneklerimize başlamadan hemen hemen tüm örneklerde karşımıza çıkacak örnek fonksiyonları buraya yazalım.



public static byte[] ByteDonustur(string deger)
{

UnicodeEncoding ByteConverter = new UnicodeEncoding();
return ByteConverter.GetBytes(deger);

}

public static byte[] Byte8(string deger)
{
char[] arrayChar = deger.ToCharArray();
byte[] arrayByte = new byte[arrayChar.Length];
for (int i = 0; i < arrayByte.Length; i++)
{
arrayByte[i] = Convert.ToByte(arrayChar[i]);
}
return arrayByte;
}


MD5 Şifreleme
public string MD5(string strGiris)
{
if (strGiris == "" || strGiris==null)
{
throw new ArgumentNullException("Şifrelenecek veri yok");
}
else
{
MD5CryptoServiceProvider sifre = new MD5CryptoServiceProvider();
byte[] arySifre = ByteDonustur(strGiris);
byte[] aryHash = sifre.ComputeHash(arySifre);
return BitConverter.ToString(aryHash);
}
}


SHA1 Şifreleme
public string SHA1(string strGiris)
{
if (strGiris == "" || strGiris == null)
{
throw new ArgumentNullException("Şifrelenecek veri yok.");
}else
{
SHA1CryptoServiceProvider sifre = new SHA1CryptoServiceProvider();
byte[] arySifre = ByteDonustur(strGiris);
byte[] aryHash = sifre.ComputeHash(arySifre);
return BitConverter.ToString(aryHash);
}
}

SHA256 Şifreleme
public string SHA256(string strGiris)
{
if (strGiris == "" || strGiris == null)
{
throw new ArgumentNullException("Şifrelenecek Veri Yok");
}else
{
SHA256Managed sifre = new SHA256Managed();
byte[] arySifre = ByteDonustur(strGiris);
byte[] aryHash = sifre.ComputeHash(arySifre);
return BitConverter.ToString(aryHash);
}
}


SHA384 Şifreleme
public string SHA384(string strGiris)
{
if (strGiris == "" || strGiris == null)
{
throw new ArgumentNullException("Şifrelenecek veri bulunamadı.");
}else
{
SHA384Managed sifre = new SHA384Managed();
byte[] arySifre = ByteDonustur(strGiris);
byte[] aryHash = sifre.ComputeHash(arySifre);
return BitConverter.ToString(aryHash);
}
}

SHA512 Şifreleme
public string SHA512(string strGiris)
{
if (strGiris == "" || strGiris == null)
{
throw new ArgumentNullException("Şifrelenecek veri yok.");
}
else
{
SHA512Managed sifre = new SHA512Managed();
byte[] arySifre = ByteDonustur(strGiris);
byte[] aryHash = sifre.ComputeHash(arySifre);
return BitConverter.ToString(aryHash);
}
}

C# İle Şifreleme : Simetrik Şifreleme Algoritmaları


Simetrik şifreleme yöntemlerinde şifrelenen veriye ulaşmak için şifreyi çözen tarafın veriyi şifreleyen tarafla aynı anahtara ihtiyacı vardır. C# Simetrik şifreleme yöntemlerinden 3 tanesini hazır olarak bize sunar. Şimdi bunlar için birer örnek yapalım.


public static byte[] ByteDonustur(string deger)
{
UnicodeEncoding ByteConverter = new UnicodeEncoding();
return ByteConverter.GetBytes(deger);
}

public static byte[] Byte8(string deger)
{
char[] arrayChar = deger.ToCharArray();
byte[] arrayByte = new byte[arrayChar.Length];
for (int i = 0; i < arrayByte.Length; i++)
{
arrayByte[i] = Convert.ToByte(arrayChar[i]);
}
return arrayByte;
}


C# ile DES Şifreleme Yöntemi

public string DESSifrele(string strGiris)
{
string sonuc = "";
if (strGiris == "" || strGiris == null)
{
throw new ArgumentNullException("Şifrelenecek veri yok");
}
else
{
byte[] aryKey = Byte8("12345678"); // BURAYA 8 bit string DEĞER GİRİN
byte[] aryIV = Byte8("12345678"); // BURAYA 8 bit string DEĞER GİRİN
DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, cryptoProvider.CreateEncryptor(aryKey, aryIV), CryptoStreamMode.Write);
StreamWriter writer = new StreamWriter(cs);
writer.Write(strGiris);
writer.Flush();
cs.FlushFinalBlock();
writer.Flush();
sonuc = Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
writer.Dispose();
cs.Dispose();
ms.Dispose();
}
return sonuc;
}

public string DESCoz(string strGiris)
{
string strSonuc = "";
if (strGiris == "" || strGiris == null)
{
throw new ArgumentNullException("Şifrelenecek veri yok.");
}
else
{
byte[] aryKey = Byte8("12345678");
byte[] aryIV = Byte8("12345678");
DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
MemoryStream ms = new MemoryStream(Convert.FromBase64String(strGiris));
CryptoStream cs = new CryptoStream(ms, cryptoProvider.CreateDecryptor(aryKey, aryIV), CryptoStreamMode.Read);
StreamReader reader = new StreamReader(cs);
strSonuc = reader.ReadToEnd();
reader.Dispose();
cs.Dispose();
ms.Dispose();
}
return strSonuc;
}

C# ile TripleDES Şifreleme Yöntemi
TripleDES algoritması 24 bit anahtar ve 8 bit iv değeri kullanır.

public string Sifrele(string strGiris)
{
string sonuc = "";
if (strGiris == "" || strGiris == null)
{
throw new ArgumentNullException("Şifrelenecek veri yok.");
}
else
{
byte[] aryKey = Byte8("123456781234567812345678");
byte[] aryIV = Byte8("12345678");
TripleDESCryptoServiceProvider dec = new TripleDESCryptoServiceProvider();
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, dec.CreateEncryptor(aryKey, aryIV), CryptoStreamMode.Write);
StreamWriter writer = new StreamWriter(cs);
writer.Write(strGiris);
writer.Flush();
cs.FlushFinalBlock();
writer.Flush();
sonuc = Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
writer.Dispose();
cs.Dispose();
ms.Dispose();
}
return sonuc;
}

public string Coz(string strGiris)
{
string strSonuc = "";
if (strGiris == "" || strGiris == null)
{
throw new ArgumentNullException("Şifrelenecek veri yok.");
}
else
{
byte[] aryKey = Byte8("123456781234567812345678");
byte[] aryIV = Byte8("12345678");
TripleDESCryptoServiceProvider cryptoProvider = new TripleDESCryptoServiceProvider();
MemoryStream ms = new MemoryStream(Convert.FromBase64String(strGiris));
CryptoStream cs = new CryptoStream(ms, cryptoProvider.CreateDecryptor(aryKey, aryIV), CryptoStreamMode.Read);
StreamReader reader = new StreamReader(cs);
strSonuc = reader.ReadToEnd();
reader.Dispose();
cs.Dispose();
ms.Dispose();
}
return strSonuc;
}


C# ile RC2 Şifreleme Yöntemi
RC2 algoritması 8 bit anahtar ve 8 bit iv değeri kullanır.

public string Sifrele(string strGiris)
{
string sonuc = "";
if (strGiris == "" || strGiris == null)
{
throw new ArgumentNullException("Şifrelenecek veri yok.");
}
else
{
byte[] aryKey = Byte8("12345678");
byte[] aryIV = Byte8("12345678");
RC2CryptoServiceProvider dec = new RC2CryptoServiceProvider();
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, dec.CreateEncryptor(aryKey, aryIV), CryptoStreamMode.Write);
StreamWriter writer = new StreamWriter(cs);
writer.Write(strGiris);
writer.Flush();
cs.FlushFinalBlock();
writer.Flush();
sonuc = Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
writer.Dispose();
cs.Dispose();
ms.Dispose();
}
return sonuc;
}

public string Coz(string strGiris)
{
string strSonuc = "";
if (strGiris == "" || strGiris == null)
{
throw new ArgumentNullException("Şifresi çözülecek veri yok.");
}
else
{
byte[] aryKey = Byte8("12345678");
byte[] aryIV = Byte8("12345678");
RC2CryptoServiceProvider cp = new RC2CryptoServiceProvider();
MemoryStream ms = new MemoryStream(Convert.FromBase64String(strGiris));
CryptoStream cs = new CryptoStream(ms, cp.CreateDecryptor(aryKey, aryIV), CryptoStreamMode.Read);
StreamReader reader = new StreamReader(cs);
strSonuc = reader.ReadToEnd();
reader.Dispose();
cs.Dispose();
ms.Dispose();
}
return strSonuc;
}

C# ile Rijndael Şifreleme Yöntemi
Rijndael algoritması 8 anahtar ve 16 bit iv değeri kullanır.

public string Sifrele(string strGiris)
{
string sonuc = "";
if (strGiris == "" || strGiris == null)
{
throw new ArgumentNullException("Şifrelenecek veri yok.");
}
else
{
byte[] aryKey = Byte8("12345678");
byte[] aryIV = Byte8("1234567812345678");
RijndaelManaged dec = new RijndaelManaged();
dec.Mode = CipherMode.CBC;
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, dec.CreateEncryptor(aryKey, aryIV), CryptoStreamMode.Write);
StreamWriter writer = new StreamWriter(cs);
writer.Write(strGiris);
writer.Flush();
cs.FlushFinalBlock();
writer.Flush();
sonuc = Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
writer.Dispose();
cs.Dispose();
ms.Dispose();
}
return sonuc;
}
public string Coz(string strGiris)
{
string strSonuc = "";
if (strGiris == "" || strGiris == null)
{
throw new ArgumentNullException("Şifrezi çözülecek veri yok.");
}
else
{
byte[] aryKey = Byte8("12345678");
byte[] aryIV = Byte8("1234567812345678");
RijndaelManaged cp = new RijndaelManaged();
MemoryStream ms = new MemoryStream(Convert.FromBase64String(strGiris));
CryptoStream cs = new CryptoStream(ms, cp.CreateDecryptor(aryKey, aryIV), CryptoStreamMode.Read);
StreamReader reader = new StreamReader(cs);
strSonuc = reader.ReadToEnd();
reader.Dispose();
cs.Dispose();
ms.Dispose();
}
return strSonuc;
}


C# İle Şifreleme : Asimetrik Şifreleme Algoritmaları


Asimetrik şifreleme yöntemleri ileri düzey şifreleme yöntemleridir. Bu algoritma türünde veriyi şifreleyen taraf ile veriyi çözecek olan taraf birbirinden farklı a anahtarlar kullanırlar.


public static byte[] ByteDonustur(string deger)
{
UnicodeEncoding ByteConverter = new UnicodeEncoding();
return ByteConverter.GetBytes(deger);
}

public static byte[] Byte8(string deger)
{
char[] arrayChar = deger.ToCharArray();
byte[] arrayByte = new byte[arrayChar.Length];
for (int i = 0; i < arrayByte.Length; i++)
{
arrayByte[i] = Convert.ToByte(arrayChar[i]);
}
return arrayByte;
}


C# ile RSA Şifreleme Yöntemi

public string Sifrele(string strGiris, out RSAParameters prm)
{
string strSonuc = "";
if (strGiris == "")
{
throw new ArgumentNullException("Şifrelenecek veri yok.");
}
else
{
byte[] aryDizi = ByteDonustur(strGiris);
RSACryptoServiceProvider dec = new RSACryptoServiceProvider();
prm = dec.ExportParameters(true);
byte[] aryDonus = dec.Encrypt(aryDizi, false);
strSonuc = Convert.ToBase64String(aryDonus);
}
return strSonuc;
}

public string Coz(string strGiris, RSAParameters prm)
{
string strSonuc = "";
if (strGiris == "" || strGiris == null)
{
throw new ArgumentNullException("Çözülecek kayıt yok");
}
else
{
RSACryptoServiceProvider dec = new RSACryptoServiceProvider();
byte[] aryDizi = Convert.FromBase64String(strGiris);
UnicodeEncoding UE = new UnicodeEncoding();
dec.ImportParameters(prm);
byte[] aryDonus = dec.Decrypt(aryDizi, false);
strSonuc = UE.GetString(aryDonus);
}
return strSonuc;