SQL Server / SQL Server 2005’te güvenliğe giriş
Bu yazımızda SQL Server 2005teki güvenlik yeniliklerinden ve temel kavramlardan bahsedeceğiz. Çok yakında Yazılım Güvenliği bölümünde SQL Server 2005te güvenlik üzerine, tek tek özel konular ve yeniliklere odaklanmış makaleler bulacaksınız.
SQL Server 2005’te güvenliğe giriş
SQL Server 2005’te güvenlik yenilikleri
SQL Server 2005’te yapısal değişiklikleri de içeren önemli güvenlik yenilikleri vardır. Veritabanınızın güvenliğini planlarken, öncelikle yenilikleri ve getirilen hiyerarşik yapıda yer alan kavramları biliyor olmanız gerekir.
SQL Server girişleri (logins) için
Önceki versiyonla benzer bir şekilde SQL Server girişleri ya da Microsoft Windows girişleri kullanabilirsiniz. Bu sürümde farklı olarak, SQL Server girişlerine de parola (password) politikaları uygulayabilirsiniz. Windows girişlerine Windows’un uyguladığı politikalara benzer şekilde çalışır.
Hiyerarşik güvenlik kapsamları (scopes)
SQL Server 2005 hiyerarşik bir system kullanarak çeşitli kapsamlarda istikrarlı bir güvenlik modeli kurar. Bu modelde temel kavramlar olarak tanıtlanmış kimlikler (principal), emniyete alınabilir varlıklar (securables) ve izinler (permissions) yer alır. Yeni yaklaşım, güvenliği önceki versiyonlara göre daha yönetilebilir kılar.
Kullanıcı ve şemanın ayrılması
Eski versiyonlarda nesnelerin isim alanları sahipleriyle birebir bağlantılıydı. SQL Server 2005’te isim alanları şemalar tarafından belirlenir, isim alanı nesnenin sahibinden bağımsızdır. Böylece daha rahat yönetilen bir nesneler yapısı kurabilirsiniz.
Metadata görünürlüğünde kısıtlama
SQL Server 2005’te katalog görünümlerinin (catalog views) kullanımı metadata görünürlüğünü kısıtlamaktadır. Normalde, kullanıcılar sadece kendilerine izin verilen nesneler için metadatayı görebilirler.
Bildirimli çalışma ortamı
Yüklü yordamlar (stored procedure) ve fonksiyonlar gibi programlanabilir modüllerin çalışma ortamları artık CREATE ifadesinde açık olarak belirtilebiliyor. Böylelikle nesneyi oluşturan kişi, diğer nesnelere erişim konusunda sahiplik zincirlerinin mekanizmasıyla uğraşmadan, nesnenin hangi kullanıcı hesabıyla çalışacağını belirtebiliyor.
SQL Server 2005 güvenliğinde temel kavramlar
Dokümantasyonda principal terimi, bir SQL Server sistemindeki tanıtlanmış kimlikler ya da bir başka deyişle kimliği kanıtlanmış erişenler için kullanılır. Bir SQL Server sisteminde bulunabilecek farklı principal tiplerini tanımak, güvenlik sisteminizi kurabilmenizde faydalı olacaktır.
İzinleri principal’lara verebilirsiniz. SQL Server dokümantasyonunda iki tip principal ele alınır: Bölünemeyenler ve koleksiyonlar. Tekil kimlikler ilkine, roller ikincisine girer.
Principal’lar 3 seviyede bulunmaktadır: Windows, SQL Server ve veritabanı. Her üç seviyede olabilecek principal tiplerini şöyle verebiliriz:
Windows: Windows yerel kullanıcı hesabı, Windows domain (etki alanı) kullanıcı hesabı, Windows gurubu.
SQL Server: SQL Server girişi (login), SQL Server rolü
Veritabanı: Veritabanı kullanıcısı, Veritabanı rolü, Veritabanı gurubu, Uygulama rolü
Not: Veritabanı grupları temel olarak geriye dönük uyumluluk için desteklenmektedir. Onların yerine veritabanı rollerini kullanmanız gerekir.
Emniyete alınabilir varlıklar nelerdir?
SQL Server 2005’in yetkilendirme sisteminin erişimlerini düzenlediği nesnelere emniyete alınabilir varlıklar (securables) denir. SQL Server’da güvenlik yapınızı tasarlayabilmek için ‘principal’lar gibi ‘securable’lar konusunda da bilgi sahibi olmanız gerekir.
Securable nesneler kapsam (scope) adı verilen iç içe yuvalanmış hiyerarşilerden oluşur. Bu kapsamların kendileri de güvenlik altına alınabilir varlıklardır. 3 güvenlik kapsamı vardır: Sunucu, veritabanı ve şema.
Sunucu kapsamındaki emniyete alınabilir varlıklar şunlardır:
- Girişler (logins)
- HTTP bitim noktaları
- Olay bildirimleri
Veritabanı kapsamındaki emniyete alınabilir varlıklar şunlardır:
- Uygulama rolleri
- Mesaj tipleri
- Servis anlaşmaları
- Full-text kataloglar
- DDL olayları
Şema kapsamındaki emniyete alınabilir varlıklar şunlardır:
- Görünümler (Views)
- Yordamlar (Procedures)
- Tipler (types)
- Varsayılan değerler (defaults)
- Birleştirmeler (Aggregates)
SQL Server 2005 emniyete alınabilir varlıklara tanıtlanabilir kimlikler tarafından erişimi kontrol etmek için izinleri kullanır.
İzinler verilebilir, alınabilir ya da yasaklanabilir. SQL Server’da yer alan ‘securable’ların her biri gerekli ‘principal’lara atanabilecek iliştirilmiş izinlere sahiptir.
Bu alanda gelen bir yenilik, eskiden sunucu seviyesindeki izinler sabit sunucu rolleri ile yönetilirken, artık izinlerin sunucu kapsamında da atanabiliyor olmasıdır.
Verilebilecek pek çok izin vardır. Burada örnek olarak bunlardan bazılarını sıralayalım: (Tam liste için SQL Server 2005 Books Online’a bakınız.)
Securable İzin Tanım
Sunucu CONNECT_SQL Sunucuya bağlanmak
CREATE LOGIN Bir giriş (login) oluşturmak
ALTER ANY LOGIN Sunucu kapsamında herhangi bir girişi değiştirmek
CONTROL SERVER Tüm sistem yönetimi kontrolü
Login ALTER Login’de değişiklik yapmak
IMPERSONATE Login’in kılığına bürünmek
Veritabanı CREATE TABLE Veritabanında tablo oluşturmak
ALTER ANY USER Veritabanında herhangi bir kullanıcıda değişiklik yapmak
CONTROL Veritabanın tüm kontrolü
Kullanıcı ALTER Belirtilen kullanıcıda değişiklik yapmak
Şema SELECT Şemada yer alan herhangi bir nesneden okuma yapmak
ALTER Şemada yer alan herhangi bir nesnede değişiklik yapmak
TAKE OWNERSHIP Şemanın sahipliğini devralmak
Tablo SELECT Tablodan satırlar seçmek
ALTER Tabloyu değiştirmek
CONTROL Tablonun tüm kontrolü
Miras alınan izinler
SQL Server 2005 verilen bir kapsamdaki emniyete alınabilir nesnelere ilişkin miras alınan izinleri destekler. Mesela, bir veritabanı nesnesinde CONTROL hakkı olan bir tanıtlanmış kimlik, o veritabanındaki tüm securable’ların ve o veritabanında yer alan tüm şemelardaki tüm securable’ların CONTROL iznini almış olur.