Sorgu sonucu dönen verinin kısıtlanması
Sorgu sonucu dönen verinin kısıtlanması
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 ?
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.
Re: Sorgu sonucu dönen verinin kısıtlanması
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.
R = SAYFA BAŞINA GÖSTERİM
P = SAYFA NO İSE
X = R
Y= (P-1)*R
olacak şekilde çağırabilirsiniz.
Re: Sorgu sonucu dönen verinin kısıtlanması
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.
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.
Re: Sorgu sonucu dönen verinin kısıtlanması
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.
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.
Re: Sorgu sonucu dönen verinin kısıtlanması
Arkadaşlar ilgi ve alakanız için teşekkür ederiz.
Artık sorunu başka türlü çözebilirsek, çözmeye çalışacağız.
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.
Re: Sorgu sonucu dönen verinin kısıtlanması
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.
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.
Re: Sorgu sonucu dönen verinin kısıtlanması
Ö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.
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.
Re: Sorgu sonucu dönen verinin kısıtlanması
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.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.
Re: Sorgu sonucu dönen verinin kısıtlanması
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.
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.
Re: Sorgu sonucu dönen verinin kısıtlanması
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.
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.
Re: Sorgu sonucu dönen verinin kısıtlanması
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.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.
Re: Sorgu sonucu dönen verinin kısıtlanması
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.