Tüm Platformlar için Hızlı Uygulama Geliştirme Kitabı... Delphi

Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Firebird veritabanı güvenliği Hk!
#1
Merhaba,
Bilenler bilir Firebird de SYSDBA kullanıcı adı ve masterkey şifre ile DB erişimi sağlanmaktadır buradaki şifre değiştirilse yada SYSDBA kullanıcısı devredışı da bırakılsa Firebird kurulu olduğu klasörde security dosyası default dosya ile değiştirildiğinde erişim sağlanabilmektedir.

IBExpert ile Services/Database Monitoring menüsünden "Attachments" seçeneğinden bağlantı yapan kullanıcılar görüntülenmektedir.
Bağlantı USER NAME
Bağlantı REMOTE_IP
Bağlantı Remote Process
Bağlantı State
gibi önemli bilgiler görüntülenmektedir.

SQL kodu
SELECT a.mon$attachment_id as Attachment_ID, 
      a.mon$server_pid as Server_PID, 
      a.mon$state as State, 
      a.mon$attachment_name as Attachment_Name, 
      a.mon$user as User_Name, 
      a.mon$role as Role_Name, 
      a.mon$remote_protocol as Remote_Protocol, 
      a.mon$remote_address as  Remote_Address, 
      a.mon$remote_pid as Remote_PID, 
      cs.rdb$character_set_name as Character_Set, 
      a.mon$timestamp as Established_At, 
      a.mon$garbage_collection as Garbage_Collection, 
      a.mon$remote_process as Remote_Process, 
      a.mon$stat_id as Statistics_ID
FROM mon$attachments a, rdb$character_sets cs
WHERE (a.mon$character_set_id = cs.rdb$character_set_id) AND a.mon$state=1

Biraz araştırdığımda  Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol ip yada diğer tanımlamalara bağlı engelleme yapılabileceğini gördüm fakat bunu DB üzerinde nasıl yapabilirim çözemedim.
Kod değil yol göstermeniz dahi benim için yeterli olacaktır.
Teşekkürler.
İyi Çalışmalar.

---------------------------------------
Biraz daha araştırdığımda Linkleri Görebilmeniz İçin Giriş yap veya Üye Olulaştım fakat hala sonuca ulaşmadım.

dmiles1345.gif

Bana kızdığı nokta ise

ffffff.jpg
Cevapla
#2
updete Smile
Cevapla
#3
Firebird 3.0 sürümüne kadar güvenlik diye bir şeyden bahsetmek mümkün değil. 3.0 sürümünü de kendim kurup denemedim açıkçası. İstediğiniz kadar kullanıcı açın istediğiniz kadar güvenlik ayarı yapın, Firebird sistemden kaldırılıp yeniden kurulduğunda tüm ayarlar sanki hiç olmamış gibi eski haline dönüyor. SYSDBA-masterkey ikilisi yeniden kullanılabilir hale geliyor.

SQL Server'da ister sunucuya istersek de sadece veritabanına şifre koyabiliyoruz. Her iki durumda da, veritabanı korunmuş oluyor. Başka bir yere database'i alıp götürmek eğer şifreyi bilmiyorsanız pek mümkün olmuyor.

Firebird 3.0 ile bu konuda gelişmeler olduğu söyleniyor, ama dediğim gibi kendim deneme şansım olmadı.

E.O.F.  (End Of Fun )
Rolleyes
Cevapla
#4
Merhabalar,
Yukarıda da bahsettiğim gibi;

Alıntı:Firebird de SYSDBA kullanıcı adı ve masterkey şifre ile DB erişimi sağlanmaktadır buradaki şifre değiştirilse yada SYSDBA kullanıcısı devredışı da bırakılsa Firebird kurulu olduğu klasörde security dosyası default dosya ile değiştirildiğinde erişim sağlanabilmektedir.

Trigger tanımlaması ile ip,uygulama yada kullanıcı tanımlayarak bağlantı esnasında kontrol edip, bağlantıyı kesebiliriz.  aşağıda verdiğim örnek ip adresi üzerinden yapılan bir örnektir.
m.MON$REMOTE_ADDRESS 
yerine 
m.mon$remote_process ile bağlantı kurulan uygulama adına göre (tercih sebebi olmamalı)
m.mon$user ile kullanıcı adına göre.
m.mon$attachment_name ile veritabanı yoluna göre(tercih sebebi olmamalı). vs. vs.

Bir kaç farklı makinede yaptığım testler olumlu sonuç verdi. (Firebird ver.2.5).

Boş bir veritabanı üzerinde işlemi anlatmaya çalışayım.
DİKKAT 
*************************
İŞLEMLERİNİZİ GERÇEKLEŞTİRMEDEN ÖNCE YEDEK ALMAYI UNUTMAYALIM.

ip adresinizi eklemezseniz bağlantıyı kesip tekrar açmaya çalıştığınızda sizde erişim sağlayamayacaksınız bu konuda dikkatli olalım.
Aynı şekilde konunun devamında bahsettiğimiz SYSDBA kullanıcısını engellemek mevcut veri tabanınızda sorun yaşamanıza sebep olacaktır. SYSDBA kullanıcısını Trigger ile engellemeden önce, admin yetkili farklı bir kullanıcı tanımlaması yapılmalı ve bu kullanıcı ile veritabanı oluşturulmalı.
aşağıdaki görselde gSEC ile tanımlama örneği mevcut.

image.png

gsec -user SYSDBA -password masterkey

GSEC> add ADMUSER -pw DCAN1234 -fname ADMUSER -lname SYSDBA

GSEC> mo ADMUSER -admin yes
GSEC> di
*************************

1-Öncelikle bir Exception tanımlaması yapıyoruz.

FB_Exception.png


2- Daha sonra Ctrl+F9 yada yıldırım butonu ile Exception mesajımızı oluşturuyoruz.

FB_Exception_2.png

3-Trigger Tanımlama. 
    (1)Object penceresi üzerinde Trigges menüsü üzerinde sağ tıklama ile açılan menüden New Trigger seçeneğini seçiyoruz. Daha sonra aşağıdaki resimde olduğu gibi sırası ile 2 numaralı alandan Trigger'ı Database için oluşturulacağını belirtiyoruz. 3. adım isim veriyoruz, 4. adımda "CONNECT" bağlantı anında devreye gireceğini belirtiyoruz ve 5. adımda aktif hale getiriyoruz.
Kod kısmına da aşağıda bulunan kodu yazıyoruz. Parantez  içinde belirtmiş olduğumuz ip adresleri dışında bağlantı sağlanmaya çalışıldığında Yukarıda tanımladığımız Mesaj devreye girecek ve erişimi kesecektir. yada engellemek istediğimiz ip adreslerini belirtebiliriz. Seçim bize ait.
AS
begin
    if (exists
       (select 1
        from MON$ATTACHMENTS m
        where
           m.MON$ATTACHMENT_ID = CURRENT_CONNECTION and
           m.MON$REMOTE_ADDRESS not in ('192.168.1.11','192.168.1.15')))
    then
    EXCEPTION DB_CONNECT;
end
  
Trigger.png


4-Trigger Oluşturma. 
   Yine Ctrl+F9 yada yıldırım butonu ile Triggeri Create ediyoruz.

Trigger_commit.png

5 - Şimdi oluşturduğumuz veritabanı dosyasını sanal makineye taşıyıp test edelim.
db_register.png


Sonuç..


connect_trigger.png




İyi çalışmalar.
Cevapla
#5
SYSDBA kullanıcı adı ile bağlanmayı önleyebilirsin, belki bazı kişelerin vaz gecirebilir. Roles bölünden ayarlabilirsiniz
Cevapla
#6
(07-08-2017, Saat: 15:21)nguzeller Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlSYSDBA kullanıcı adı ile bağlanmayı önleyebilirsin, belki bazı kişelerin vaz gecirebilir. Roles bölünden ayarlabilirsiniz

Çok haklısınız hocam, 
SYSDBA ve masterkey Firbirdün kimlik numarası gibi parçası olup, bilinen en temel özelliklerinden bir tanesi. Gereksiz kişiler, buradaki giriş kapısında takıldığı ilk an, neler oluyor demeye başlayacaktır.
Cevapla
#7
@Cyber kardeşimizin önerdiği çözüm gerçekten işe yarar bir çözüm. Ben, veritabanı erişimine güvenliği sağlamak için bu şekilde Trigger'lar ile uğraşmıyorum. Modem veya IP adresleri değiştiğinde (ki olmayacak şey değil ) veritabanına erişim ile ilgili sorunlar yaşanabilir. Yada veritabanını başka bir yere taşıdığınızda yine kullanabilmek için uğraşmak gerekebilir. Ben kullanmış olduğum güvenlik duvarı yazılımından 3050 portuna erişebilecek IP adreslerini tanımlıyorum. Böylece IP adresleri ve yapılandırması değişse bile, Trigger ile uğraşmak yerine güvenlik duvarı ayarlarından IP adreslerini güncelliyorum olup bitiyor. 

Windows'un güvenlik duvarı ayarlarında da böyle bir özellik var, ister lokal IP adreslerine, isterseniz de UZAK IP adreslerine sınırlama getirebiliyorsunuz (Ofis dışından da veritabanına erişim sağlanan durumlarda)  Lokal IP'leri tek tek eklemek yerine IP adresi aralığı da verebiliyorsunuz, yani 192.168.2.10 ile 192.168.2.50 arasındaki bilgisayarlar bağlanabilsin ama onun dışındakiler bağlanamasın diyebiliyorsunuz. Defalarca test ettim, gerçekten işe yarıyor. Sadece Firebird için değil, SQL Server için de aynı şekilde kullanıyorum. Veritabanı üzerinden değişiklik yapmak istemeyen kullanıcılar için birebir.

Aşağıda örnek bir ekran görüntüsü verdim :

70EcR54dzV.jpg

E.O.F.  (End Of Fun )
Rolleyes
Cevapla
#8
(08-08-2017, Saat: 11:27)ramazan_t Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol@Cyber kardeşimizin önerdiği çözüm gerçekten işe yarar bir çözüm. Ben, veritabanı erişimine güvenliği sağlamak için bu şekilde Trigger'lar ile uğraşmıyorum. Modem veya IP adresleri değiştiğinde (ki olmayacak şey değil ) veritabanına erişim ile ilgili sorunlar yaşanabilir. Yada veritabanını başka bir yere taşıdığınızda yine kullanabilmek için uğraşmak gerekebilir. Ben kullanmış olduğum güvenlik duvarı yazılımından 3050 portuna erişebilecek IP adreslerini tanımlıyorum. Böylece IP adresleri ve yapılandırması değişse bile, Trigger ile uğraşmak yerine güvenlik duvarı ayarlarından IP adreslerini güncelliyorum olup bitiyor. 

Windows'un güvenlik duvarı ayarlarında da böyle bir özellik var, ister lokal IP adreslerine, isterseniz de UZAK IP adreslerine sınırlama getirebiliyorsunuz (Ofis dışından da veritabanına erişim sağlanan durumlarda)  Lokal IP'leri tek tek eklemek yerine IP adresi aralığı da verebiliyorsunuz, yani 192.168.2.10 ile 192.168.2.50 arasındaki bilgisayarlar bağlanabilsin ama onun dışındakiler bağlanamasın diyebiliyorsunuz. Defalarca test ettim, gerçekten işe yarıyor. Sadece Firebird için değil, SQL Server için de aynı şekilde kullanıyorum. Veritabanı üzerinden değişiklik yapmak istemeyen kullanıcılar için birebir.

Aşağıda örnek bir ekran görüntüsü verdim :

70EcR54dzV.jpg

Hocam aslında benim arayışım, veritabanının kopyalanması halinde bir başka yerde kullanılmasını önlemek adınaydı. Ticari kuruluşlar için uygulama geliştiriyoruz ve firmaların bilgilerinin de güvenliğini sağlamamız gerekiyor. Sizin de  bahsettiğiniz olasılıklar tabi ki de muhtemel olasılıklar. (Modem veya IP adreslerinin değişmesi)


(07-08-2017, Saat: 15:21)nguzeller Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlSYSDBA kullanıcı adı ile bağlanmayı önleyebilirsin, belki bazı kişelerin vaz gecirebilir. Roles bölünden ayarlabilirsiniz

Burada da hocamızın söylediği gibi aslında SYSDBA kullanıcısını engellememiz bizim için yeterli olacaktır. Diğer kullanıcılar için de şifre parametrelerini güçlü tutmamız halinde üzerimize düşen görevi yerine getirmeye çalışmış oluruz.
Cevapla
#9
(08-08-2017, Saat: 12:43)Cyber Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlBurada da hocamızın söylediği gibi aslında SYSDBA kullanıcısını engellememiz bizim için yeterli olacaktır. Diğer kullanıcılar için de şifre parametrelerini güçlü tutmamız halinde üzerimize düşen görevi yerine getirmeye çalışmış oluruz.

Haklısınız, fakat Firebird'ün en sevmediğim özelliği, maalesef Firebird sistemden kaldırılıp yeniden kurulursa, SYSDBA kullanıcısı eski yerine geri gelecektir. SQL Server gibi veritabanı düzeyinde kullanıcı hesapları doğrulaması olmadığı için, Firebird güvenliği için dışarıdan çözümlere mecburuz. Daha dün başıma geldi, bir müşterimizin bilgisayarcısı, gereksiz programları temizleyeyim derken Firebird'ü logosundan dolayı oyun sandığı için sistemden kaldırmış. Müşteri programa giremiyoruz deyince fark ettik ve mecburen yeniden yükledik. Bu gibi durumlar sıkça yaşanıyor maalesef. Yine de bilgilendirme için teşekkürler.

E.O.F.  (End Of Fun )
Rolleyes
Cevapla
#10
(08-08-2017, Saat: 13:16)ramazan_t Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
(08-08-2017, Saat: 12:43)Cyber Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlBurada da hocamızın söylediği gibi aslında SYSDBA kullanıcısını engellememiz bizim için yeterli olacaktır. Diğer kullanıcılar için de şifre parametrelerini güçlü tutmamız halinde üzerimize düşen görevi yerine getirmeye çalışmış oluruz.

Haklısınız, fakat Firebird'ün en sevmediğim özelliği, maalesef Firebird sistemden kaldırılıp yeniden kurulursa, SYSDBA kullanıcısı eski yerine geri gelecektir. SQL Server gibi veritabanı düzeyinde kullanıcı hesapları doğrulaması olmadığı için, Firebird güvenliği için dışarıdan çözümlere mecburuz. Daha dün başıma geldi, bir müşterimizin bilgisayarcısı, gereksiz programları temizleyeyim derken Firebird'ü logosundan dolayı oyun sandığı için sistemden kaldırmış. Müşteri programa giremiyoruz deyince fark ettik ve mecburen yeniden yükledik. Bu gibi durumlar sıkça yaşanıyor maalesef. Yine de bilgilendirme için teşekkürler.

Alıntı:Firebird'ü logosundan dolayı oyun sandığı için sistemden kaldırmış. 
    Smile Smile Smile Smile Smile

Hocam Firebird konusunda yeterince tecrübeye sahip değilim. 
SYSDBA kullanıcısını engellemekten bahsederken, bunu yine Trigger ile engellemekten bahsetmiştim. Şimdi test ettim ve sonuç olumlu. IP tanımlaması yerine Trigger da bu defa kullanıcı tanımlaması yaptım.
AS
begin
   if (exists
      (select 1
       from MON$ATTACHMENTS m
       where
          m.MON$ATTACHMENT_ID = CURRENT_CONNECTION and
          m.mon$user NOT in ('CYBER','DELPHICAN')))
   then
   EXCEPTION LOGIN_MSG;
end

Yukarıdaki şekilde sadece tanımlı kullanıcılar bağlantı kurabilirken aşağıdaki şekilde SYSDBA kullanıcısını engellemiş oluyoruz.

AS
begin
    if (exists
       (select 1
        from MON$ATTACHMENTS m
        where
           m.MON$ATTACHMENT_ID = CURRENT_CONNECTION and
           m.mon$user in ('SYSDBA')))
    then
    EXCEPTION LOGIN_MSG;
end

Yanlış telaffuz ettiğim bir durum yoktur umarım.  :ss
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Firebird Yedekleme-Geri Yükleme Aracı ihalilcoban 4 266 18-10-2018, Saat: 22:00
Son Yorum: ihalilcoban
  Firebird External Table Storage anemos 4 239 05-10-2018, Saat: 22:04
Son Yorum: anemos
  Yeni Başlayanlar İçin Firebird Kurulumu ve Delphi FireDAC Ayarları DelphiCanR 18 2.508 12-09-2018, Saat: 11:54
Son Yorum: rmzgenius
  Firebird Pivot Sorgu klavye 6 1.173 14-08-2018, Saat: 22:39
Son Yorum: anemos
  FireBird Merge Into Kullanımı mcuyan 2 220 13-08-2018, Saat: 12:40
Son Yorum: mcuyan



Konuyu Okuyanlar: 1 Ziyaretçi