# Veritabanı güvenliği
Veritabanı güvenliği, çok çeşitli bilgi güvenliği kontrollerinin kullanımı ile ilgilidir ve veritabanılarınının(imkân dahilinde verileri, veritabanı uygulamalarını veya kayıt edilmiş işlevleri(stored function), veritabanı sistemlerini, veritabanı sunucularını ve ilişkili ağ bağlantılarını içerir.) gizliliğini, bütünlüğünü ve erişilebilirliğini saldırılara karşı korur. Teknik, idari, yargı ve fiziksel gibi çeşitli türde ve kategoride kontroller veritabanı güvenliği kapsamı içerisine girer.  bilgisayar güvenliği, bilgi güvenliği ve risk yönetimi alanları içerisinde, veritabanı güvenliği uzmanlık gerektiren bir konudur.
Veritabanı sistemlerine yönelik güvenlik riskleri şunları içerir.
  - Yetkili veritabanı kullanıcıları, Veritabanı yöneticileri, ağ/sistem yöneticileri, yetkisiz kullanıcılar ya da bilgisayar korsanları tarafından yanlış kullanılması veya bu kişiler tarafından yapılan istenmeyen davranışlar (örneğin veritabanılarındaki kritik verilere, meta verilere veya işlevlere uygun olmayan erişim ya da veritabanı programlarında, yapılarında veya güvenlik konfigürasyonlarında uygun olmayan değişiklikler) 
  - Zararlı yazılım etkileri, yetkisiz erişim, kişisel ve şahsi verilerinin sızdırılması veya ifşa edilmesi, verilerin ve programların silinmesi veya hasar alması, veritabanına yetkili erişimin kesilmesi veya reddedilmesi, diğer sistemlere yapılan saldırılar ve veritabanı hizmetlerinin beklenmeyen başarısızlıklara neden olan olaylara yol açan zararlı yazılım enfeksiyonları 
  - Fazla yüklenmeler, performans kısıtlamaları ve kapasite sorunlarından dolayı, yetkili kullanıcıların veritabanlarını amaçlandığı gibi kullanamamaları 
  - Bilgisayar odasında oluşabilecek yangınlar, seller, aşırı ısınmalar, aydınlatmalar, kaza sonucu sıvı dökülmeleri, statik elektrik boşalmaları, elektronik arızalar/ ekipman arızaları ve eskimeler gibi veritabanı sunucusuna fiziksel hasar veren durumlar 
  - Veritabanları içerisindeki program açıkları ve tasarım hataları, ilişkili programların ve sistemlerin oluşturduğu çeşitli güvenlik açıkları(örneğin yetkisiz hak artırma), veri kayıpları/ bozulmaları, performans düşüşleri vb. 
  - Geçersiz veri veya komutların girilmesinden kaynaklanan veri bozulması ve/veya kaybı, veritabanı veya sistem yönetim süreçlerinde yapılan hatalar, sabotaj/kriminal hasar vb.
 sıklıkla, doğaları gereği büyük veri tabanlarının, güvenlik ihlallerinden dolayı istismardan asla kurtulamayacağını söylerdi. Eğer erişim kolaylığı için büyük bir sistem tasarlanırsa, bu güvensiz olur. Eğer su geçirmez hale getirilirse, kullanmak imkânsız hale gelir. Bu bazen Anderson Kuralı olarak bilinir.
Bilgi güvenliği kontrolünün veritabanlarına uygun birçok türü ve katmanları vardır.
  - Erişim kontrolü
  - Denetim
  - Kimlik doğrulama
  - Şifreleme
  - Bütünlük kontrolleri
  - Yedekleri
  - Uygulama güvenliği
  - İstatistik Metodla Veritabanı Güvenliği
Veritabanları, güvenlik duvarları gibi ağ güvenliği önlemleri ve ağ tabanlı saldırı tespit sistemleri aracılığıyla bilgisayar korsanlarına karşı büyük oranda güvence altına alınmıştır. Bu bağlamda ağ güvenlik kontrolleri önemli olmasına karşın, veritabanı sistemlerinin kendilerini, programlarını/fonksiyonlarını ve onların içerisindeki verilerini koruması tartışmalı bir şekilde daha kritik hale geliyor. Çünkü özellikle de internet erişimden dolayı ağlar gittikçe daha geniş erişime açılıyor.Ayrıca sistem, program, fonksiyon ve veri erişim kontrolleri, ilişkili olarak kullanıcı tanımlama, kimlik doğrulama ve hak yönetimi işlevleri, yetkili kullanıcıların ve yöneticilerin faaliyetlerini sınırlamak ve log kayıtlarını tutmak için her zaman önem taşımaktadır. Diğer bir deyişle bunlar olduğu yerde hem içten dışa hem de dıştan içe çalışan, veritabanı güvenliğine tamamlayıcı yaklaşımlardır.
Birçok organizasyon kendi “baseline(temel)(diğer güvenlik standartlara alt yapı sağlayacak temel)” güvenlik standartlarını geliştirir ve kendi veritabanı sistemleri için temel güvenlik kontrol önlemlerini detaylandırarak tasarlar. 
Bunlar, kurumsal bilgi güvenlik politikaları ve genel olarak kabul görmüş, iyi veritabanı güvenlik uygulamaları(altında yatan sistemlerin uygun bir şekilde güçlendirilmesi gibi) ve muhtemelen ilgili veritabanı sisteminden ve yazılım satıcılarından gelen güvenlik önlemleri ile birlikte yürürlükte bulunan kanunlar ve yönetmelikler (ör. gizlilik, finansal yönetim ve raporlama sistemlerine ilişkin) tarafından maruz bırakılmış genel bilgi güvenliği gereksinimlerini veya yükümlülüklerini yansıtabilir. Belirli veritabanı sistemlerine ilişkin güvenlik tasarımları, genellikle, veritabanı programları ve işlevleri (örn. veri girişi doğrulama ve denetim geçmişleri) içerisindeki çeşitli işe ilişkin bilgi güvenlik kontrolleri ile birlikte, daha fazla güvenlik yönetimi ve yönetme işlevlerini(Kullanıcı erişim haklarının yönetimi ve raporlanması, log yönetimi ve analizi, veritabanı kopyalama/ senkronizasyon ve yedeklemeler gibi) belirtmektedir. Ayrıca, çeşitli güvenlikle ilgili faaliyetler (manuel kontroller) normalde, veritabanı tasarımı, geliştirilmesi, konfigürasyonu, kullanımı, yönetimi ve devam ettirilmesi ile ilgili prosedürlere, yönergelere vb. dahil edilir.


## Ayrıcalıklar.
Veritabanı ortamında veritabanı güvenliğine ilişkin iki ayrıcalık türü önemlidir. Bunlar Sistem ve Nesne ayrıcalıklarıdır.


### Sistem Ayrıcalıkları.
Sistem ayrıcalıkları, bir kullanıcının bir veritabanında yönetime ilişkin işlemleri yapmasına izin verir. Bunlar, veritabanı oluşturma, prosedür oluşturma, yedek veritabanı oluşturma, tablo oluşturma, tetikleyici oluşturma ve çalıştırma ayrıcalıklarını(SQL server da olduğu gibi) içerir.


### Nesne Ayrıcalıkları.
Nesne ayrıcalıkları, veritabanı nesneleri üzerindeki belirli işlemleri başka bir kullanıcı tarafından yetkilendirilmiş olarak kullanmaya izin verir. Kullanım, seçim, ekleme, güncelleme ve referanslar örnek olarak verilebilir.
En az Ayrıcalık İlkesi ve Görevlerin Ayrımı:
Veritabanları iç yönetim kapsamına girmektedir. Yani, kamusal raporlama, yıllık raporlar vb. için kullanılan veriler görev ayrımına bağlıdır. Bu anlamda geliştirme ile üretim arasında görev ayrımı yapılmalıdır. Her görev, gerçek kodu yazmayan üçüncü bir kişi tarafından (kod incelemesi ile) onaylanmalıdır.Veritabanı geliştiricisi, gerçekleştirilmekte olan işin belgelerine ve kodlarına ilişkin bağımsız bir inceleme yapmadan üretimde herhangi bir şey yürütememelidir. Tipik olarak geliştiricinin rolü, bir DBA (Oracle veritabanı yöneticisi) 'ya kod aktarmaktır ancak ekonomik çöküşten kaynaklanan kesintiler göz önüne alındığında bir DBA hazır olmayabilir. Bir DBA'ya kod aktarımı yapılamazsa, en azından bir eşdüzey DBA nin kod incelemesi yapması önemlidir. Bu, geliştiricinin rolünün açıkça ayrı olmasını sağlar.
İç yönetimin bir diğer noktası, özellikle üretimde en az ayrıcalık sağlama ilkesine bağlılıktır. Geliştiricilerin çalışmalarını tamamlamaları için daha fazla erişime ihtiyaç duymaları halinde kimliğe bürünme yöntemi (impersonation)(örneğin, geçici olarak bir şey yapmak için EXECUTE AS veya sudo) kullanılır. Bu tarz yükseltilmiş haklar gerektiren isteklerde kimliğe bürünme kullanımı daha güvenlidir.Çoğu zaman geliştiriciler, kod yazılarak zafere gidilen yolda bunun ek yük(“overhead”) olmasını göz ardı ederler. Bununla birlikte, DBA'lar sorumlu olduğu düşünülen her şeyi yapmak zorundadırlar çünkü bunlar, organizasyonun “de facto” veri sorumlusudur; düzenlemeye ve yasalara uymak zorundadırlar.


## Risk ve Uyumluluk Yönetiminde Güvenlik Açığı Değerlendirmeleri.
Veritabanı güvenliğini değerlendirmek için güvenlik açığı değerlendirmeleri veya veritabanına karşı sızma testleri içeren bir teknik kullanılır. Test yapan kişiler sistemi tehlikeye atabilen, veritabanına zorla girebilen, güvenlik kontrollerini atlatabilen veya geçmeyi başarabilen güvenlik açıklarını bulmaya çalışırlar. Veritabanı yöneticileri veya bilgi güvenliği yöneticileri, mesela veritabanı yazılımındaki bilinen açıklıklar ile birlikte yukarıda bahsedilen katmanlardaki kontrollerin yanlış yapılandırılmasını (genellikle “sapma”(drift) olarak adlandırılır.) araştırmak için otomatik güvenlik açığı taramaları kullanabilir. Bu tür taramaların sonuçları, veritabanını güçlendirmek (güvenliği artırmak) ve tanımlanmış belirli güvenlik açıklarını kapatmak için kullanılır, ancak diğer güvenlik açıkları genellikle bilinmeyen ve tanımlanmamış olarak kalır.
Güvenliğin kritik olduğu veritabanı ortamlarında, standartlara uyumu sağlamak için yapılan sürekli izleme güvenliği artırmaktadır. Güvenlik uyumluluğu, diğer prosedürlerin yanı sıra yama yönetimini ve veritabanı içindeki nesnelere verilen izinlerin(özellikle halka açık) gözden geçirilmesini ve yönetilmesini gerektirir.Veritabanı nesneleri, tablo bağlantısında listelenen tablo veya diğer nesneleri içerebilir.Nesneler üzerinde SQL dil komutları için verilen izinler bu süreçte değerlendirilir. Uyumluluğu görüntüleme, güvenlik açığı değerlendirmesine benzer, ancak güvenlik açığı değerlendirmelerinin sonuçları genellikle sürekli izleme programına neden olan güvenlik standartlarını yönlendirir.Aslında güvenlik açığı değerlendirmesi, devam eden risk değerlendirme sürecindeki uyum programının olduğu yerlerdeki riski belirlemek için ön prosedür.
Uyumluluk programı uygulama yazılımı düzeyindeki tüm bağımlılıkları dikkate almalıdır çünkü veritabanı düzeyindeki değişikliklerin uygulama yazılımı veya uygulama sunucusu üzerinde etkileri olabilir.


## Soyutlama.
Uygulama seviyesindeki kimlik doğrulama ve yetkilendirme mekanizmaları, veritabanı katmanından soyutlama sağlamanın etkili araçları olabilir. Soyutlamanın başlıca yararı, birden çok veritabanı ve platformda tek bir kullanıcı kimliği ile oturum açma(single sign on) imkânıdır. Tek bir veritabanı oturum açma sistemi kullanıcının kimlik bilgilerini depolar ve kullanıcı adına veritabanına kimlik doğrulaması yapar.


## Veritabani Aktivite İzleme.
Daha sofistike nitelikte başka bir güvenlik katmanı da ağ üzerinden protokol trafiğini (SQL) analiz ederek veya her yerel veritabanı sunucusu üzerinde yazılım etmenleri(birimleri)(agent) kullanıp aktiviteyi gözlemleyerek ya da bu yöntemlerin ikisini birden kullanarak gerçek zamanlı veritabanı aktivite izlemeyi içerir. Etmenlerin ya da yerel logların kullanımı sunucuda gerçekleştirilen faaliyetlerini yakalamak için gereklidir. Bu genellikle veritabanı yöneticisinin faaliyetlerini içermektedir. Etmenler bu bilgileri, yerel denetim kayıtlarını devre dışı bırakma veya değiştirme yetkisine sahip olan veritabanı yöneticisi tarafından devre dışı bırakılamayacak şekilde kayıt edilmesine izin verir.
Analiz, bilinen istismarları veya politika ihlallerini belirlemek için yapılabilir veya izinsiz girişi işaret edebilecek anormal aktivitelerin saptanması için kullanılan normal bir model oluşturmak için temel(baselime) zaman içinde yakalanabilir. Bu sistemler, saldırı tespit mekanizmalarına ek olarak kapsamlı bir veritabanı denetim geçmişi sağlayabilir ve bazı sistemler kullanıcı oturumlarını sonlandırarak ve/veya şüpheli davranış gösteren kullanıcıları karantinaya alarak ayrıca koruma sağlayabilir. Bazı sistemler, denetleyicilerin tipik gereksinimleri olan görevlerin ayrımını desteklemek üzere tasarlanmıştır (SOD). SOD, DAM'ın bir parçası olarak genellikle izlenen veritabanı yöneticilerinin DAM işlevini devre dışı bırakamamalarını veya değiştirememelerini gerektirir. DAM denetim geçmişinin, veritabanı yönetim grubu tarafından yönetilmeyen ayrı bir sistemde güvenli bir şekilde depolanmasını gerektirir.


## Yerel denetim.
İzleme veya denetim için harici araçlar kullanmanın yanı sıra, birçok veritabanı platformu için yerel veritabanı denetim özellikleri de mevcuttur. Yerli denetleme geçmişi düzenli olarak çıkarılır ve veritabanı yöneticilerinin erişiminin bulunmadığı ya da bulunmamasının gerektiği şekilde tasarlanmış bir güvenlik sistemine aktarılır. Bu, görevlerin yerel denetleme geçmişinin kimliği doğrulanmış yöneticiler tarafından değiştirilmediğine dair kanıt sağlayabilecek düzeyde ayrılmasını sağlar ve üretim, okuma hakları olan üst düzey güvenlik sorumlusu bir DBA grubu tarafından yürütülmelidir. Yerli etkinleştirme sunucunun performansını etkiler. Genellikle veritabanlarının yerel denetleme geçmişi görev ayrımı uygulamak için yeterli kontrol sağlamaz. Bu nedenle ağ ve/veya çekirdek(kernel) modül seviyesine sahip ana sistemin izleme yetenekleri, adli tıp ve kanıtların korunması için daha yüksek bir güven derecesi sağlar.


## Süreç ve prosedürler.
İyi bir veritabanı güvenlik programı, otomatik işlemlerle kullanılan kullanıcı hesaplarını ve hesaplara verilen ayrıcalıkların düzenli olarak incelenmesini içerir. Bireysel hesaplar için iki faktörlü kimlik doğrulama sistemi güvenliği geliştirilebilir ancak bu güvenliği daha karmaşık ve maliyetli hale getirir. Otomatik işlemler tarafından kullanılan hesaplar, yeterli şifreleme ve erişim kontrollerinin uzlaşma riskini azaltmak için şifre saklama depolama etrafında uygun kontrolleri gerektirir.
Sağlam bir veritabanı güvenlik programı ile birlikte, uygun bir felaket kurtarma programı, bir güvenlik olayı sırasında veya birincil veritabanı ortamının kesilmesine neden olan herhangi bir olayda hizmetin kesintiye uğramamasını sağlar. Birincil veritabanları için farklı coğrafi bölgelerde bulunan sitelere çoğaltma bunlara bir örnektir.
Bir olay meydana geldikten sonra, veritabanı adli tıp ihlalin kapsamıyla sistemlere ve süreçlere uygun değişiklikleri belirlemek için kullanılabilir.