UmutSoftware
 Eğitim ve Bilgi Paylaşım Bloğu
Forum Anasayfası Forum Anasayfası >Veri Tabanları ve SQL >İnterbase ve Firebird Veri Tabanı
  Yeni Mesajlar Yeni Mesajlar
  SSS SSS  Forumu Ara   Kayıt Ol Kayıt Ol  Giriş Giriş

InterBASE/FireBird Veritabanı Kullanıcı Yönetimi

 Yanıt Yaz Yanıt Yaz
Yazar
Mesaj
  Konu Arama Konu Arama  Konu Seçenekleri Konu Seçenekleri
administrator Açılır Kutu Gör
Yönetici
Yönetici
Simge

Kayıt Tarihi: 01.Ocak.2007
Aktif Durum: Aktif Değil
Gönderilenler: 779
  Alıntı administrator Alıntı  Yanıt YazCevapla Mesajın Direkt Linki Konu: InterBASE/FireBird Veritabanı Kullanıcı Yönetimi
    Gönderim Zamanı: 08.Aralık.2009 Saat 14:00

InterBASE / FireBird Veritabanında Kullanıcı Yönetimi

 


Bu makalede sizlere ib/fb veritabanı sunucularında yapısal anlamda nasıl kullanıcı hakları nasıl verildiğine değineceğim. Makalede kapalı ifadeler olabilir. Bilgisi olmayan arkadaşlar uzmanlık gerektiren bir konu olduğundan IB klavuzundan bilgi edinmelerini öneririm.

Çok kullanıcılı uygulamaların özelliği, kullanıcı tanımlanması ve kullanıcılara haklar verilmesidir. Nasıl ki işletim sistemlerinde admin,guest,power user gibi haklarla işletim sisteminde kullanıcıları kısıtlayabiliyorsanız sql sunucuları içeren programlarda da bunu yapabilirsiniz.

IB/FB veritabanlarında yetkilendirme için grant ISql komutunu kullanabilirsiniz. Ayrıca Revoke komutu ile bu hakları silebilirsiniz. Bu işlemleri yapmak için manuel sunucunun sql konsolu üzerinden yapmak durumundasınız. Çünkü SQL sunucuları kendi Sql versiyonlarını kullanırlar. Örneğin InterBase ISQL sürümünü kullanırken, Access ve MS-SQL Server kendi MSSql sürümlerini, Oracle ise kendi sql sürümünü kullanır. Bunlar sintaks olarak farklıdırlar. Delphi ise sql ile işlem yaparken temel sql komt kümesini kullanır. Bundan dolayı delphi içerisinden isql,mssql,oraclesql komutlarını çalıştıramazsınız. TDataset sınıfı bu sql sunucu komutlarını görmeyecektir.

Peki nasıl haklar tanımlayacağız? Komutları çalıştıramıyorsak nasıl erişimi kısıtlayacağız?

Birçok firma bunun için veri tablosu içerisinde program arayüzünde tanımladığı kullanıcıları ve haklarını bu tür bir tablo içerisinde tutar. Birçok profesyonel program üreten firma bunu bu şekilde kullanmaktadır. Fakat bu son derece sağlıksız bir çözümdür. Veritabanı dosyası başka bir bilgisayar üzerinde okunabilir, sadece paket program içerisinde yazılan komutlarla haklar kısıtlanır.

Bunu engellemenin yolu SQL sunucusunun kendi kullanıcı tanımlama bloğunu kullanmaktır. Bu en sağlıklı çözümdür. Bu şekilde yapılırsa veritabanı kullanıcıları ve haklarını kendi sistem tablolarında tutar. Yetkisi olmayan bir kullanıcı veritabanına erişmek isterse sql sunucusu doğrudan sistem tablosundaki kullanıcı haklarına bakar yetkisi yoksa ilgili tablolara erişimi kısıtlar.

Örnek olarak IB konsolundan "misafir" kullanıcısına müşteri bilgilerinin bulunduğu tabloya sadece okuma izni verelim.

GRANT SELECT ON "MUSTERI_BILGILERI" TO MISAFIR;

Böylece yapısal olarak sunucuya erişim hakkı gönderdik. Kullanıcı sistemede misafir kullanıcısı ile girdiğinde sadece müşteri bilgilerini görebilecek diğer tablolara erişemeyecektir. Eğer bu hakkı kaldırmak isterseniz revoke komutunu kullanabilirsiniz.

Biz bunu konsoldan yapabiliyoruz. Fakat sql bilgisi olmayan son kullanıcı programı kullanırken bunları kullanıcının yazmasını bekleyemezsiniz. En mantıklı çözüm bir program hazırlamak ve kullanıcıları ve haklarını buradan yönetebilmesini sağlamaktır.

Delphi kütüphanelerinin ISql komut setini tanımadığını söylemiştik.IBQuery bileşenine yukarıdaki grant komutunu verdiğinizde bunu algılamayacaktır. Bunu aşmak için kullanıcı haklarının bulunduğu tabloya select,update,delete,insert gibi temel sql komutlarıyla erişmek, ve hakları belirlemektir. Örneğin misafir kullanıcısına "taksitler" tablosuna okuma yazma hakkı vermek istediğimizde sistem tablosuna bu hakları insert komutuyla eklememiz gerekir. Grant komutu da bu işlemi yapar. Interbase 7 sürümünden önceki sürümler sistem tablolarını gösterir. 7 ve sonraki sürümler için ise IbConsole içerisinde "View" menüsünden "System Data" seçerseniz sistem tablolarını göreceksiniz.
Sistem tabloları "RDB$" ile başlar. örneğin karakter kümelerinin tanımlandığı sistem tablosu "RDB$CHARACTER_SETS" dir. Bizim ise işlem yapacağımız tablo "RDB$USER_PRIVILEGES" tablosudur. Bu tabloda sql sunucusunun kullanıcı hakları bulunmaktadır. Ayrıca burada tabloların haricinde görüntü (view), depolanmış yordam (stored procedure) erişim haklarıda bulunur. Böylece kullanıcıların görüntü ve depolanmış yordamları çalıştırmasını da kısıtlayabilirsiniz.

RDB$USER_PRIVILEGES tablosu aşağıdaki alanları içerir.

"RDB$USER"    ->>kullanıcı adı
"RDB$GRANTOR"
"RDB$PRIVILEGE" ->> kullanıcı hakları: "S","I","D","U","X"(Execute)
"RDB$GRANT_OPTION"
"RDB$RELATION_NAME" ->> Tablo,görüntü,yordam adı
"RDB$FIELD_NAME"
"RDB$USER_TYPE"
"RDB$OBJECT_TYPE"

Delphi içerisinde kullanıcıları tablodan alabilir veya IbSecurityService bileşeniyle listeleyebilirsiniz.

Örneğin daha önce grant komutuyla konsoldan yaptığımız işlemi delphi içerisinde IBQuery bileşeni ile yapmak için şunu yazabilirsiniz.

Insert Into RDB$USER_PRIVILEGES values("misafir",,"S    ","musteriler",,"8","0")

Böylece grant komutunun yaptığı işlemi yaptık. Bunu bir arayüz şeklinde hazırlayarak kullanıcının yönetebilmesini sağlayabilirsiniz. Bunu ayrı bir modül halinde hazırlayarak ana program girişinde; kullanıcı giriş şifre ekranı, şeklinde bir yol izleyebilirsiniz. Bu tamamen sizin tercihinize kalmış.

Konsoldan veritabanı üzerine sağ tuş yaparak "View Metadata" derseniz ekrana gelen pencerenin en altında grant hakkının eklenmiş olduğunu göreceksiniz.

Böylece zahmetli kullanıcı kontrol yöntemlerinden kurtularak tam güvenli bir yönetim sisteminiz olacaktır.

 

Yukarı Dön
 Yanıt Yaz Yanıt Yaz

Forum Atla Forum İzinleri Açılır Kutu Gör