Sorgu sonucu dönen verinin kısıtlanması

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
loaded
Üye
Mesajlar: 122
Kayıt: 12 Eki 2010 09:45
Konum: Konya
İletişim:

Sorgu sonucu dönen verinin kısıtlanması

Mesaj gönderen loaded »

Merhaba Arkadaşlar
Client ne tür sorgu yaparsa yapsın, dönecek maksimum veriyi sunucu tarafında yapılandırabilirmiyiz ?
Şu şekilde anlatacak olursak ;
Örneğin 100.000 kayıt içeren bir tablo da, kullanıcının "select * from tablo " ifadesini top veya limit kullanmadan 1000 kayıt olacak şekilde, sunucu tarafında kısıtlandırabilirmiyiz ?
Kalk ve işe yarar bir şey yap! Çünkü Allah (c.c.) yeniden başlayanların yardımcısıdır.
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: Sorgu sonucu dönen verinin kısıtlanması

Mesaj gönderen Lost Soul »

SELECT FIRST X SKIP Y şeklinde bir ibare ile

R = SAYFA BAŞINA GÖSTERİM
P = SAYFA NO İSE

X = R
Y= (P-1)*R

olacak şekilde çağırabilirsiniz.
Kullanıcı avatarı
loaded
Üye
Mesajlar: 122
Kayıt: 12 Eki 2010 09:45
Konum: Konya
İletişim:

Re: Sorgu sonucu dönen verinin kısıtlanması

Mesaj gönderen loaded »

Cevap için çok teşekkürler Lost, yalnız sql ifadesi ne olursa olsun limitlendirme işlemini sunucunun yapmasını istiyoruz.
Yani kullanıcı bizim belirlediğimiz limitlere kadar görsün, sql ile tablonun tamamını yüklemesin.
Kalk ve işe yarar bir şey yap! Çünkü Allah (c.c.) yeniden başlayanların yardımcısıdır.
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: Sorgu sonucu dönen verinin kısıtlanması

Mesaj gönderen Lost Soul »

Delphi kullanmayalı yaklaşık 4-5 sene oldu ama hatırladığım kadarıyla söyleyeyim.

Server tarafında yapmak istiyorsanız şunlara dikkat ederseniz olabilir.
Kullanacağınız Dataset TTable tarzı bir bileşen yerine TQuery şeklinde bir bileşen olup, veriyi tek seferde fetch etmemeli.
TDataSet.Last metodunu kullanmamalısınız While Not TDataSet.EoF ve TDataSet.Next ile ilerlemelisiniz
Haliyle TDataSet.RecordCount metodu kayıt ilerledikçe değişecek ve gerçek değeri vermeyecek bunun yerine 'select count ...' ile önce sayıyı çekmeniz lazım. FIBPLus da ClientCount tarzı birşey hatırlıyorum ama uzun zaman oldu.
Dataseti grid ya da liste türü objeler bağlamamalısınız.

Fakat ne yaparsanız yapın firebird tarafında kısıtlama ile aynı performansı elde edemezsiniz.
Kullanıcı avatarı
loaded
Üye
Mesajlar: 122
Kayıt: 12 Eki 2010 09:45
Konum: Konya
İletişim:

Re: Sorgu sonucu dönen verinin kısıtlanması

Mesaj gönderen loaded »

Arkadaşlar ilgi ve alakanız için teşekkür ederiz.
Artık sorunu başka türlü çözebilirsek, çözmeye çalışacağız.
Kalk ve işe yarar bir şey yap! Çünkü Allah (c.c.) yeniden başlayanların yardımcısıdır.
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: Sorgu sonucu dönen verinin kısıtlanması

Mesaj gönderen esistem »

Selam,
Firebird de sunucu tarafında rahatlıkla böyle bir sınırlama yapabilirsiniz aslında, Stored procedure kullanarak dışardan değer alıp ona göre limit verebilirsiniz.
Kullanıcı avatarı
loaded
Üye
Mesajlar: 122
Kayıt: 12 Eki 2010 09:45
Konum: Konya
İletişim:

Re: Sorgu sonucu dönen verinin kısıtlanması

Mesaj gönderen loaded »

Öncelikle cevabınız için teşekkürler.
Stored procedur ile de yapılabilir fakat biz yazdığımız client uygulamanın ağ trafiğinin sniff edilerek elde edilecek bilgiler ışığında sunucudaki tüm verilerin tek seferde elde edilmesine önlem olarak sadece sunucu üzerinde çalışabilecek bi yöntem araştırıyoruz.
Kalk ve işe yarar bir şey yap! Çünkü Allah (c.c.) yeniden başlayanların yardımcısıdır.
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: Sorgu sonucu dönen verinin kısıtlanması

Mesaj gönderen esistem »

loaded yazdı:Öncelikle cevabınız için teşekkürler.
Stored procedur ile de yapılabilir fakat biz yazdığımız client uygulamanın ağ trafiğinin sniff edilerek elde edilecek bilgiler ışığında sunucudaki tüm verilerin tek seferde elde edilmesine önlem olarak sadece sunucu üzerinde çalışabilecek bi yöntem araştırıyoruz.
Ağ trafiğini sniff ederek clientin, serverdan çektiği verilerin tamamını görebilirsiniz. Bende diyorum ki firebird sunucu tarafında Stored Procedure ile istediğiniz gibi kısıtlama yapabilirsiniz. "Select * from tablo" gibi bir işlemin çalışmaması içinde firebird kullanıcı yetkilendirmesini (Roleleri) kullanabilirsiniz. Client ten bağlanan Role ile bağlanır, sadece sizin istediğiniz Stored Procedurleri çalıştırabilir. "Select * from Cari_Hesaplar" dese bile stored procedur de istediğiniz kadar kayıt gitmesini sağlayabilirsiniz.
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: Sorgu sonucu dönen verinin kısıtlanması

Mesaj gönderen Lost Soul »

S.A. Sizin soruyu hızlı okuyunca işi clientte çözmek istediğinizi anlamıştım. Anlaşılan o ki yanlış anlamışım.
Sizin sunucu tarafında sorguları kısıtlamak istiyorsunuz.

Bunun için aklıma gelen 3 yol var
1. Serverda sorguları dinlemeye almak:
Firebirdde böyle bir durum var mı bilmiyorum. Gelen bütün sorguları çalışmadan önce yakalayıp sonuna gerekli limitlemeleri eklemek
2. Serverda trigger ile sorguları alıp bypass etmek: Epeyidir uğşalmadığım için hatırlamıyorum ama BeforeExecute tarzı birşeyler illa ki vardır.

3. Bence en mantıklı çözüm kendi servisini/multitier uygulamasını/DataSnap ını/Data Layerini yazmak.
Bu uygulama ile clientleriniizi konuşturarak hem güvenlik işini aradan çıkarmış olursunuz. Hem programınızın geliştirlilmesi inanılmaz kolay olur.
Kullanıcı avatarı
loaded
Üye
Mesajlar: 122
Kayıt: 12 Eki 2010 09:45
Konum: Konya
İletişim:

Re: Sorgu sonucu dönen verinin kısıtlanması

Mesaj gönderen loaded »

Cümleten Aleykümselam
Esistem ve Lost ciddi alakanız ve esaslı cevaplarınız için müteşekkirim.
Lost, evet serverde sorguları dinlemeye almaya uğraşıyoruz.
Esistemin açıklamalarında ki mevzuat hakkında malumatım olmadığı için bilmiyordum fakat bize ışık tuttu zannedersem, role ve stored procedure ikilisi istediğimiz işi fazlasıyla görecek, şahsınıza bin teşekkür lost ve esistem.
Kalk ve işe yarar bir şey yap! Çünkü Allah (c.c.) yeniden başlayanların yardımcısıdır.
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: Sorgu sonucu dönen verinin kısıtlanması

Mesaj gönderen esistem »

Lost Soul yazdı:S.A. Sizin soruyu hızlı okuyunca işi clientte çözmek istediğinizi anlamıştım. Anlaşılan o ki yanlış anlamışım.
Sizin sunucu tarafında sorguları kısıtlamak istiyorsunuz.

Bunun için aklıma gelen 3 yol var
1. Serverda sorguları dinlemeye almak:
Firebirdde böyle bir durum var mı bilmiyorum. Gelen bütün sorguları çalışmadan önce yakalayıp sonuna gerekli limitlemeleri eklemek
2. Serverda trigger ile sorguları alıp bypass etmek: Epeyidir uğşalmadığım için hatırlamıyorum ama BeforeExecute tarzı birşeyler illa ki vardır.

3. Bence en mantıklı çözüm kendi servisini/multitier uygulamasını/DataSnap ını/Data Layerini yazmak.
Bu uygulama ile clientleriniizi konuşturarak hem güvenlik işini aradan çıkarmış olursunuz. Hem programınızın geliştirlilmesi inanılmaz kolay olur.
Eğer clientleriniz exe dosya ise ve uzak ağdan bağlanıyorsa @Lost_Soul arkadaşımızın verdiği 3. öneriyi şiddetle tavsiye ederim, zira böyle bir şey yapmadıysanız server da mecburen Firebird protunu uzaktan erişime açtınız demektir. Exe dosyaya ufak bir müdehale ile veritabanı şifreleriniz ele geçirilebilir o zaman derdiniz sniff ten daha kötü bir hale gelir. Bu tip uzaktan erişimi olan projelerde güvenlik ön planda olmalıdır. Ben 5-6 yıldır uğraştığım bir projede php kullandım mesela, tek derdim SQL İnjection şu anda, onuda engellemek oldukça basit. Birde bendeki projede kaç client in bağlanacağı belli değil, kodu php ile yazdığım için kim bağlanmak isterse herhangi bir tarayıcıdan ip ve portu yazıp, kendisine verilen şifreleri girip verilen yetkiye göre istediğini yapabiliyor. Bana en büyük artısı da şu oldu, client te bir değişiklik yapmak istediğimde tek bir yerde değişiklik yapıyorum iş bitiyor exe dosyada olduğu gibi clientleri tek tek güncellemem, yükleme yapmam gerekmiyor. Özellikle bu durumu dikkate almanızı öneririm zira proje bittiğinde en büyük külfetiniz bu olacaktır.
Kullanıcı avatarı
loaded
Üye
Mesajlar: 122
Kayıt: 12 Eki 2010 09:45
Konum: Konya
İletişim:

Re: Sorgu sonucu dönen verinin kısıtlanması

Mesaj gönderen loaded »

Cevabınız için teşekkürler.
Kalk ve işe yarar bir şey yap! Çünkü Allah (c.c.) yeniden başlayanların yardımcısıdır.
Cevapla