SQLite Veritabanı ve Güvenliğine Genel Bir Bakış

INFeRNaL

Özel Üye
22 Nis 2009
6,516
1
Mersin
Tabletlerin, akıllı telefonların ve PDA’lerin yaygınlaşmasıyla birlikte çok daha sık duyduğumuz bir terim, SQLite. Bilgigüvenliği kapısında daha önce yayınlanan bazı makalelerde de (Tarayıcılardaki Gizli Pencere Gizliliği Sağlar mı? II [1],Takip (mi) Ediliyoruz !(?) [2] ) geçen bu terim, yeni nesil ve taşınabilir sistemlerin veritabanı motorları için kullandıkları olmazsa olmaz bir teknoloji haline gelmiş durumda.

Peki, nedir SQLite? Yeni neler getirmektedir? Kullanım alanları, artıları-eksileri nelerdir? 2 bölümlük bu yazı dizisinde işte bu soruların cevaplarını arayacak ve SQLite veritabanını inceliyor olacağız.

İlk bölümde SQLite’ın temel özellikleri, güçlü yanları, yaygın kullanım alanları ve yetersiz kaldığı alanlardan bahsederken; daha sonra yayınlanacak ikinci bölümde, örnek SQLite veritabanı oluşturulması, kullanımı, yönetimi, ara yüzleri ve örnek bir mobil cihazın SQLite veritabanı kopyasının incelenmesiyle ilgileneceğiz.

SQLite - Küçük, Hızlı, Güvenilir
SQLite; sunucusuz çalışan, yapılandırma ihtiyacı olmayan, müstakil bir veritabanı motorudur. Açık kaynak kodlu ve ücretsiz olarak dağıtılan SQlite veritabanı, günümüzde mobil cihazların yaygınlaşmasıyla çok fazla alanda karşımıza çıkmaktadır ve her geçen gün daha fazla kullanıcıya hizmet etmektedir.


Şekil 1. SQLite’ın mottosu. Küçük, Hızlı ve Güvenilir.

SQLite gömülü çalışan bir veritabanı motorudur. Diğer birçok SQL veri tabanının aksine, SQLite’ın sunucuda işlem yapan ayrıca bir süreci bulunmamaktadır. SQLite, sıradan disk dosyalarına doğrudan erişim sağlayıp okuma ve yazma işlemlerini yapabilmektedir. Tablolar, sorgular ve indeksler gibi bir veri tabanında bulunabilecek bütün öğeleri tek bir dosyada saklayıp işlem yapabilmesi, SQLite en güçlü yanlarından biridir. Platformlar arası çalışabiliyor olması, 32-bit ya da 64-bit makineler arası kopyalanıp çalıştırılmasına da olanak sağlamaktadır. Bu yetenekleriyle etkili bir Uygulama Dosya Formatına dönüşen SQLite, Oracle’ın muadili olamasa da fopen()’ın yerini alan bir teknolojidir.

Niçin SQLite?
SQLite’ı diğer veritabanı motorlarından ayıran başlıca özellikle basit olmasıdır.

Basit Yönetim

Basit İşletim

Daha büyük programların içine Basit entegrasyon

Basit sürdürülebilirlik

SQLite birçok kullanıcı için küçük ve hızlı olması nedeniyle tercih edilmektedir. Aslında bir diğer etkin özelliği SQLite’ın güvenilir olmasıdır. Bunun altında yatan neden ise aslında, SQLite’ın basit olmasıdır. Daha az karışıklık, daha az işin hatalı gitmesine sebep olmaktadır.

Burada tartışılabilecek bir nokta, dosya sisteminde tek bir dosya halinde bulunan bir veri tabanı motorunun aslında zayıf ya da güçlü olup olmadığıdır. Bu sorunun cevabını aslında kullanıcının ihtiyacı belirler. SQLite, basitliği sağlama adına bazı kullanıcılar için oldukça elzem görülen paralel işlem yürütme, ayrıntılı erişim kontrolü, zengin dâhili fonksiyonlar, kayıtlı prosedürler, XML ve/veya Java desteği vs. özelliklerden feragat etmek zorunda kalmıştır. Eğer kullanıcının sistemi için bu özellikler olmazsa olmaz kategorisindeyse, SQLite doğru bir tercih olmayacaktır.

O zaman şöyle bir tanımlama ile SQLite’ın doğru kullanım alanı belirlenebilir; eğer ihtiyacımız yönetim kolaylığı, entegrasyon ve bakım işlemlerinin basitliği ise ve bu özellikler için diğer veri tabanı motorlarının sunduğu sayısız kompleks yetkinlikten vazgeçebiliyorsak SQLite doğru bir tercih olacaktır.

SQLite Veritabanının Güçlü Olduğu Alanlar
Uygulama Dosya Formatı

SQLite disk dosya formatını kullanan masaüstü uygulamalarında büyük başarı yakalamıştır. Finansal analiz ürünleri, CAD paketleri, kayıp saklama programları vs. bunlara örnek verilebilir. Geleneksel Dosya/Aç operasyonu yerine sqlite3_open() ve BEGIN TRANSACTION komutları veritabanı içeriğine erişim sağlamaya yeterlidir. Dosya/Kaydet işlemi ise COMMIT ile sağlanmaktadır. Bu yapıda çalışan dosya bazlı SQLite veri tabanları; atomik, dayanaklı, izole edilmiş ve tutarlı şekilde operasyonunu devam ettirmektedir.


Şekil 2. Örnek bir SQLite Veritabanı ve Hex Editor ile Başlık İncelemesi

Gömülü Cihazlar ve Uygulamalar

SQLite veritabanı çok az ve hatta 0 yönetim ihtiyacı duyduğundan, insan desteği olmadan çalışması gereken sistemler için güzel bir çözümdür. Bu nedenle cep telefonları, tablet bilgisayarlar, PDAler ve hazır kurulu gelen sistemler vb. için tercih sebebidir.


Şekil 3. Akıllı Telefonlar ve SQLite

Web Siteleri

SQLite, düşük-orta trafik yoğunluklu web siteleri için –ki bu bütün web sitelerinin %99,9’udur – sorunsuz çalışacak yetkinliktedir. Sitenin ne kadar trafik çektiği ve bu trafiğin ne yoğunlukta veritabanı işlemi gerektirdiği ile değişmekle birlikte, günlük 100.000’den az hit alan sayfalar için SQLite’ın problemsiz çalışacağı söylenebilir. Bu rakamı net şekilde ifade etmek doğru olmayacaktır, çünkü bunun 10 katı trafik oluşturan web siteleri için bile SQLite’ın sorunsuz çalıştığı görülmüştür.

Ad Hoc disk dosyalarının yerine kullanımı

Günümüzde birçok program, çalışması esnasında fopen(), fread(), fwrite() işlemleri ile dosya oluşturur, okur, yazar, siler ve özet olarak yönetir. SQLite işte bu tür disk dosya işlemlerinin de yerini alabilecek pozisyondadır.

Geçici veya Dahili Veritabanları

İşleyecek, sıralayacak veya ayıklayacak çok fazla veri üreten programlar için de SQLite güzel bir seçenektir. Normalde bu operasyonları program seviyesinde kodlayarak gerçekleştirmek yerine, SQLite’ın sorguları ve filtreleriyle hızlıca yapmak birçok programcı için işlerini hızlandıracak bir alternatiftir. Bunun yanı sıra, yeni sütun ve indekslerin her bir satırı tekrar kodlamaya gerek duymadan ekleyebilmesi, SQLite kullanan programlara üstün bir esneklik getirmektedir.

Komut satırı veri setleri analiz aracı

SQL dilinde deneyimi olan kullanıcılar, sqlite komut satırı programını[3] kullanarak çeşitli veri setlerini analiz edebilirler. Ham veriyi sqlite veri tabanından CSV dosyası olarak çıkartan kullanıcı, veriyi gruplara ayırarak ve parçalayarak arzu edilen istatistiklere ve analizlere ulaşabilir.

Bu özelliği istemci/sunucu mimarisinde çalışan veri tabanlarında da pek tabi bulmak mümkündür. Ancak bu noktada SQLite’ın bir avantajı vardır ki, o da bütün veriyi tek bir dosyada saklıyor olması ve raporların alınabilmesi için ekstra yazılım veya özellik bilgisi ihtiyacının minimum olmasıdır. Çok temel seviyede bilgisayar kullanım bilgisine sahip kullanıcılar bile SQLite veri tabanındaki bu bilgileri okuyup raporlayabilir.


Şekil 4. SQLite Komut Satırı Arayüzü

Kurumsal veritabanı demo ve testleri esnasında kullanım

Sunucu/istemci mimarisinde çalışacak bir kurumsal veritabanı uygulamasının hazırlanışı esnasında SQLite kullanılabilir. Ürün hazırlandığından sunucuya bağlanıp veri çekecek uygulama, henüz bu yapı hazır olmadığı için istemci üzerindeki SQLite veritabanı uygulamasından yardım alabilir. Bu sayede test ve örnek kullanım sunumları sadece istemci üzerinde yapılabilir.

Veritabanı Eğitimi

Kurulumu ve kullanımı çok basit olan Sqlite ( kurulum için sqlite/sqlite.exe dosyalarını kopyalamak ve çalıştırmak yeterli – bu konuda detaylı bilgi sonraki yazıda verilecektir) SQL dili eğitimi için de güzel bir fırsattır. Eğitmenin istediği sorguları yazan öğrenciler, bu SQL kodlarıyla diledikleri veri tabanlarını oluşturabilir ve dosya boyutunun da küçük olması sayesinde e-posta ile bu veri tabanlarını eğitmenlerine gönderebilir. Veritabanı eğitimi almış okuyucuların hatırlayacağı üzere, birkaç satırlık basit SQL komutlarının yazılabilmesi için bile laboratuvar ortamında bazen saatler süren ortam kurulumunun bu sayede önüne geçilebilir.

Deneysel SQL dili çalışmaları

SQLite’ın basit, modüler dizaynı sayesinde yeni veritabanı dilleri veya SQL dili üzerinde geliştirmeler SQLite platformunda yapılabilir.

Teknik becerinin zirvesi karmaşıklık, üretkenliğin zirvesi ise sadeliktir. (Erik Christopher Zeeman)

SQLite’ın zayıf, diğer İlişkisel Veritabanı Yönetim Sistemlerinin güçlü olduğu alanlar
SQLite’ın bu kadar güçlü yanlarını saydıktan sonra zayıf alanlarından da bahsetmekte fayda var. Sonuç itibariyle tek bir dosya üzerinde koşan veritabanı sistemi birçok kapsamlı ihtiyacı da karşılayamayacaktır. Şimdi de bu özelliklere değinelim.

Sunucu/İstemci Uygulamaları

Tek bir merkezi veri tabanına erişen ve işlem yapan birden çok istemci uygulamanız varsa, SQLite’ın bu noktada yetersiz kalacağı aşikâr. Aslında SQLite ağ üzerinde de erişilip işlem yapılabilmesi olanak tanımakta. Ancak ağ dosya sistemlerinde sıkça karşılaşılan gecikme sıkıntısı, SQLite’ın da performansı ciddi ölçüde etkileyecek bir durumdur. Bunun yanı sıra, erişim sağlanan dosyanın kilitlenmesi, veritabanı sunucusuna sadece tek bir istemcisinin bağlanabilmesi anlamına geldiği için, çoklu kullanıcılı sistemlerde bu noktanın gözden kaçırılmaması gerekmektedir. SQLite veritabanı dosyasına aynı anda yazma hakkıyla erişim sağlanabilmesi durumunda bile, hem Unix hem de Windows sistemlerdeki bazı kod hataları nedeniyle dosyanın bozulabilmesi mümkündür.

Bu nedenle kural olarak, birden çok kullanıcının merkezi tek bir veri tabanına erişmesi gereken yapılarda SQLite’dan kaçınmak gerekir.

Yüksek Yoğunluklu Web siteleri

Bir önceki bölümde de belirtildiği gibi, düşük yoğunluklu web siteleri için SQLite çözüm olabilir. Ancak web sitenizin arkasında çalışan veri tabanını ayrıca bir makineye kurmayı düşüneceğiz kadar yoğun kullanımlı sistemler için SQLite çare olmayacaktır.

Çok Büyük Veri Kümeleri

Dosya sistemindeki ön tanımlı sayfa boyutu değerlerini düşündüğümüzde, ki bu değer 1024 bayttır, SQLite Veritabanının maksimum hacminin 2 terabayt olacağını görebiliriz. (241 bayt) Bazı dosya sistemlerinde bir dosyanın alabileceği değer, doğal olarak daha düşük seviyelerdedir. Örnek olarak FAT32 için bu değer 4 gigabayttır[4].

Bu nedenlerle ihtiyacımız olan ve kaydedeceğimiz veri hacim bu değerlerden büyükse, SQLite’ı tercih listesinden çıkarmak mantıklı olacaktır.

Yüksek Paralel Kullanım İhtiyacı

SQLite, işlem yaptığı esnasında bütün veritabanı dosyasına erişir. Yazma veya okuma hakkıyla yaptığı bu işlem, işletim sistemi seviyesinde başka bir işlemin veri tabanına erişimini engeller. Paralel işlem yürütme ihtiyacı duyulan sistemler için bu durum büyük bir handikaptır. Eğer ihtiyaç duyulan sistemde çeşitli paralel işlemlerin yürütüleceği düşünülüyorsa, SQLite kullanımı doğru bir tercih olmayacaktır.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.