.NET OpenSource - MS SQL

Bir önceki yazımızdan MS Sql Server üzerinde bir alana Asymmetric Key ile kullanarak Sifre alanını RSA_2048 ile Encrypt ettik.Bu yazımızda aynı alanı kullanıcıya Decrypt edip Gridview ile göstereceğiz.Öncelikle bu işlem için yazdığımız stored procedure ü yazalım.Aşağıdaki SQL ifadesini IDE mizden New Query diyerek açalım ve yazalım.

[code:tsql]
CREATE PROCEDURE spKullaniciGoster
AS
SELECT
ID,
KullaniciAdi,
CONVERT(NVARCHAR(MAX),
               DecryptByAsymKey(AsymKey_ID('AsimetrikKeyim'),
             Sifre, N'sifrem')) as Sifre
FROM Kullanicilar

Şimdi saklı yordamımızın çalışıp çalışmadığını kontrol edelim.Query alanına aşağıdaki ifadeyi yazıp çalıştırın.

exec spKullaniciGoster

Görüntü aşağıdaki gibi olucaktır.

 

Şimdi sıra geldi bu bilgileri gridview üzerinden kullanıcıya göstermeye.Projemize bir adet sayfa ekleyelim.Sayafayada 1 adet GridView ile 1 adet SqlDataSource ekleyelim.

<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:baglantim %>"
SelectCommand="spKullaniciGoster"
SelectCommandType="StoredProcedure">
</asp:SqlDataSource>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ID"
    DataSourceID="SqlDataSource1">
    <Columns>
        <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" ReadOnly="True"
            SortExpression="ID" />
        <asp:BoundField DataField="KullaniciAdi" HeaderText="Kullanıcı Adi" SortExpression="KullaniciAdi" />
        <asp:BoundField DataField="Sifre" HeaderText="Şifre" ReadOnly="True" SortExpression="Sifre" />
    </Columns>
</asp:GridView>

Uygulamamızı çalıştıralım.Görüntü aşağıdaki gibi olcaktır.

Yazı serisinin 3. bölümünde Encrypt uygulanmış alanı güncelleyeceğiz.
Hepinize kolay gelsin.

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Gönderen : Admin
Gönderilme Zamanı: 24.04.2008 at 06:27
Categories: Asp.NET | MS SQL
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Yorumlar (0) | Post RSSRSS comment feed
 
 

Bugünkü yazımızda MS SQL Server 2005 Express Edition ile Asymmetric Key kullanarak bazı alanlarımızı dışardan yetkisiz erişime karşı koruycaz.Bunun için
örnek uygulamamızda basit bir seneryo düşündüm ve ufak bir kayıt sistemi oluşturdum.Uygulamada kullanıcıdan kayıt oluşturma esnasında iki adet bilgi alıyoruz.Bir tanesi kullanıcı adı ve biz bu bilgiyi Stored Procedure ile parametre olarak gönderip hiçbir işlem yapmadan normal girilen değerlerle kaydını yapıyoruz.Diğeri ise şifre bilgisi ve biz bunuda kullanıcıdan alıp Stored Procedure üzerinden parametresiyle gönderip sql server da Encrypt edip kaydediyoruz.

Örnek tablomuzda birde otomatik artan alan var bunun için kullanıcıdan herhangi bir bilgi almamıza gerek yok.Bu alanın bir özelliğide Primary Key olması.İleride güncelleme işlemi yaptığımızda böyle bir alana ihtiyaç duyucaz o yüzden benzersiz bir alan olması gerekiyor.
İlk önce örnek tablomuzu oluşturalım.Aşağıdaki sorguyu kopyalayıp Query den çalıştıralım.

[code:tsql]
CREATE TABLE Kullanicilar(
 [ID] [int] IDENTITY(1,1) NOT NULL,
 [KullaniciAdi] [nvarchar](50) NULL,
 [Sifre] [varbinary](max) NULL
)
[/code]

Şimdi sıra geldi örneğimizde encrypt yapabilmemiz için gerekli olan asymmetric key oluşturmaya.
Aşağıdaki bloğu gene query den çalıştıralım.Toplamda 3 parametresi var.Bunları kısaca açıklarsak
 
1. AsimetrikKeyim - buna istediğiniz ismi verebilirsiniz.
2. RSA_2048 - kullanılan algoritma tipi
3. sifrem - ileride lazım olacak olan şifre.

CREATE ASYMMETRIC KEY AsimetrikKeyim
    WITH ALGORITHM = RSA_2048
    ENCRYPTION BY PASSWORD = 'sifrem';
GO

Sorgumuzu çalıştırdıktan sonra Object Explorer dan kullandığınız veritabanınıza tıklayın.Oradan Security e son olarak Asymmetric Keys e. Asimetric Key'in AsimetrikKeyim  ismiyle var olduğunu göreceksiniz.

Yapacağımız ilk işlem kayıt ekleme olacağından ilk önce onun Stored Procedure ünü yazacağız.Gene aşağıdaki sorguyu query den execute edelim.Aşağıdaki saklı yordamda dikkat edilirse EncryptByAsymKey(AsymKey_ID('?'), @Sifre) soru işareti ile belirtiğim noktada ASYMMETRIC KEY in ismi var.Encrypt yapılcak alanında EncryptByAsymKey(AsymKey_ID('AsimetrikKeyim'), ?) soru işareti ile belirttiğim sifre alanının olduğunu görüceksiniz.Sorgumuzu yazıp çalıştıralım.

CREATE PROCEDURE spUyeEkle
@ID int OUTPUT,
@Sifre NVARCHAR(MAX),
@KullaniciAdi NVARCHAR(50)
AS
INSERT INTO Kullanicilar (KullaniciAdi, Sifre)
VALUES (
 @KullaniciAdi,
 EncryptByAsymKey(AsymKey_ID('AsimetrikKeyim'), @Sifre)
);
SET @ID = @@IDENTITY

Web projemize bir adet konfigurasyon dosyası (web.config) ekleyelim ve oluşturulan dosyaya aşağıdaki satırları koyalım.Bağlamtim ismi ile asp.net sayfası üzerinden kendisine erişeceğiz.

using System.Data.SqlClient;
using System.Data;

Şimdi hemen hemen herşey bitti sadece kayıt yapmamız için gereken kodları yazmamız gerekicek.Aşağıdaki kodu butonun Click olayına yazalım.

SqlConnection SqlBaglantim = new SqlConnection(ConfigurationManager.ConnectionStrings["baglantim"].ConnectionString);
SqlCommand sqlcmd = new SqlCommand("spUyeEkle", SqlBaglantim);
sqlcmd.CommandType = CommandType.StoredProcedure;
sqlcmd.Parameters.Add(new SqlParameter("@KullaniciAdi", SqlDbType.NVarChar, 50));
sqlcmd.Parameters["@KullaniciAdi"].Value = TextBox1.Text;
sqlcmd.Parameters.Add(new SqlParameter("@Sifre", SqlDbType.NVarChar, 50));
sqlcmd.Parameters["@Sifre"].Value = TextBox2.Text;//Encrypt dilcek parametre değerini alıyoruz
//Bu parametreye değeri SQL Server vericeğinden biz vermiyoruz aşağıdaki şekilde gösteriyoruz.
sqlcmd.Parameters.Add(new SqlParameter("@ID", SqlDbType.Int, 4));
sqlcmd.Parameters["@ID"].Direction = ParameterDirection.Output;
SqlBaglantim.Open();
sqlcmd.ExecuteNonQuery();
SqlBaglantim.Close();

Son olarak uygulamamızı çalıştıralım ve test edelim.Sayfamız ilk çalıştığında görüntü aşağıdaki gibi olucak.

Form üzerinden aşağıda görüldüğü gibi bir kayıt girelim.

SQL IDE sinde aşağıdaki sorguyu çalıştıralım.

SELECT * FROM Kullanicilar

Encrypt uyguladığımız Sifre alanına 123456 olarak girdiğimiz değerin yukarıda yazdığımız  sorgu ile verdiği sonuca bir bakalım.

0xE10173C43BF06CD4F984E46E964D88E730DB384C7D0BE3EE2A3FC3C8854C076E5BC38262
D5397D79DE4CD3C988975F282BE0415EFA992828D29AA4A3DC331D75D2A9DB4501D5FC6EA
E87DAD6C7CB85D8377B5CCD9FB20A5B921983FBD90AC96F6C349D9D983AC23280DEB4715
CDC0D840F340FB91BED1C47D919C6D2992F10AC8FADD794AFDAEF68EE210BE97BDFA37322
731B761579454A4D7D4272FFB6431650065E98D258F612A06150948008540BE862C98B2D8A6A
184823843AB39471E4BCD36A6C83818B15BC9AF3BECC3BD6D3FFEB2D608EED8D336BF0B304
67507514445E7AC7FEFF8FEC8D139CCDCF315E1AB4F5BE809BD9335CF5BE4113980B76B8

İlerki yazımızda Encrypt uyguladığımız alanlarda select,update işlemleri yapıcaz.
Hepinize kolay gelsin

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Gönderen : Admin
Gönderilme Zamanı: 23.04.2008 at 14:12
Tags: , , ,
Categories: Asp.NET | MS SQL
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Yorumlar (0) | Post RSSRSS comment feed
 
 

Sistem gereksinimleri :
* SQL Server 2005 Express Edition
* Microsoft SQL Server Management Studio Express
* Visual Studio 2005 yada Express Sürümü

Bu örnekte Sanatcilar tablosunu kullanacağım.Veri tabanı ismi  Veritabanimiz olacak.Öncelikle örnek tablomuzu oluşturalım.

[code:tsql]CREATE TABLE Sanatcilar
(
[Ad] [varchar](50) NULL,
[Soyad] [varchar](50) NULL,
[Yas] [int] NULL,
[SanatciID] [int] IDENTITY(1,1) NOT NULL,
[DogumTarihi] [datetime] NULL,
CONSTRAINT [PK_Sanatcilar] PRIMARY KEY CLUSTERED
(
[SanatciID] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] [/code]

Yazı serisinin ilk kısmında ilk Stored Procedure Sanatcilar tablosundaki verileri GridView kontrolünde göstermek olucak.Bunun için yazılan procedure ün sql script ti aşağıdadır.

[code:tsql]CREATE PROCEDURE spSanatcilariGoster
AS
BEGIN
SELECT Ad,Soyad,Yas,SanatciID,
convert(varchar,DogumTarihi,104) as DogumTarihi FROM Sanatcilar
END[/code]

Şimdi yazıcağımız Procedure ü test edelim.Query alanına aşağıdaki ifadeyi yazıp çalıştırın.

[code:tsql]EXEC spSanatcilariGoster [/code]

Kayıtlar Query nin altında grid de görünecektir.Şimdi VS da yeni bir Web Projesi açalım ve Default.aspx sayfamıza bir adet SqlDataSource ve bir adetde Gridview koyalım.Web.Config (Konfigurasyon Dosyası) açalım eğer oluşturmadıysak oluşturalım ve sonrasında aşağıdaki kodları girelim.Aşağıda add name alanına istideğimiz ismi verebilirsiniz IDE default olarak bu ismi verdiğinden ben herhangi bir değişiklik yapmadım siz isterseniz değiştirebilirsiniz.

[code:html]<connectionStrings>
<add name="VeritabanimizConnectionString" connectionString="Data Source=PC-ARGENETWORK\SQLEXPRESS;Initial Catalog=Veritabanimiz;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings> [/code]


Daha evvel Default.aspx e eklediğimiz SqlDataSource kontrolümüzün kodları aşağıdaki gibi olmalıdır.

[code:html]<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:VeritabanimizConnectionString %>"
SelectCommand="spSanatcilariGoster" SelectCommandType="StoredProcedure">
</asp:SqlDataSource> [/code]

Gene aynı şekilde GridView kontrolümüzün kod kısmı aşağıdaki şekilde düzenleyelim.

[code:html]<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" AutoGenerateColumns="False" DataKeyNames="SanatciID">
<Columns>
<asp:BoundField DataField="Ad" HeaderText="Ad" SortExpression="Ad" />
<asp:BoundField DataField="Soyad" HeaderText="Soyad" SortExpression="Soyad" />
<asp:BoundField DataField="Yas" HeaderText="Yas" SortExpression="Yas" />
<asp:BoundField DataField="SanatciID" HeaderText="SanatciID" InsertVisible="False" ReadOnly="True" SortExpression="SanatciID" />
<asp:BoundField DataField="DogumTarihi" HeaderText="DogumTarihi" ReadOnly="True" SortExpression="DogumTarihi" />
</Columns>
</asp:GridView> [/code]

[code:html]<asp:BoundField DataField="SanatciID" HeaderText="SanatciID" InsertVisible="False" ReadOnly="True" SortExpression="SanatciID" />[/code]
SanatciID  alan bilgisinin GridView da görünmesini istemediğimizden  bu kısmı sildik.Projeyi çalıştırdığımızda görüntü aşağıdaki şekilde olacaktır.

Şimdi ise Yukarda yaptığımız CodeBehind tarafında yapıcaz.Öncelikle sayfamızın üzerine çift tıklayarak projenin kodlarına girelim.İlk önce Sql Server da işlem yapacağımız için iki adet namespace eklememiz gerekecez.Tabi birde veritabanı işlemleri olacağı için Data sınıfıda  referans edilmelidir.

[code:c#]
using System.Data;
using System.Data.SqlClient;
[/code]

Page_Load eventınada aşağıdaki kodları yazıyoruz

[code:c#] //Bağlantı nesnesi oluşturuyoruz
SqlConnection baglantimiz = new SqlConnection();
//Connection string i uygulamammızın kök dizinindeki Web.Config sayfasından alıyoruz.
baglantimiz.ConnectionString = ConfigurationManager.ConnectionStrings["VeritabanimizConnectionString"].ConnectionString;
//Bağlantımızı açıyoruz
baglantimiz.Open();
//Sql command nesnesi oluşturuyoruz
SqlCommand com = new SqlCommand("spSanatcilariGoster", baglantimiz);
//Command ın tipini StoredProcedure olduğunu belirtiyoruz..
com.CommandType = CommandType.StoredProcedure;
//Reader nesnesi oluşturuyoruz
SqlDataReader Reader = com.ExecuteReader();
//Gridview kontrolümüzün veri kaynağını belirliyoruz
GridView1.DataSource = Reader;
//Kontrolün databind() metodunu çağırıyoruz
GridView1.DataBind();

//Reader ı kapatıyoruz
Reader.Close();
//Bağlantımızı kapatıyoruz
baglantimiz.Close();[/code]



Aynı Şekilde Default.aspx sayfamızın html kod kısmıda aşağıdaki şekilde değiştirilmelidir

[code:html]<form id="form1" runat="server">
        <asp:GridView ID="GridView1" runat="server">
        </asp:GridView>
    </form>[/code]

Bu yazımızda Stored Procedure kullanarak ASP.NET üzerinde kayıtları ziyaretçiye gösterdik.Yazının ikinci serisinde Stored Procedure ile kayıt ekleyeceğiz.

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Gönderen : Admin
Gönderilme Zamanı: 13.04.2008 at 07:12
Tags: ,
Categories: Asp.NET | MS SQL
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Yorumlar (0) | Post RSSRSS comment feed