St.AnGeR
Document Visor..
4.1. Win NT'nin Doğruladığı Girişleri SQL Server Nasıl Denetler ?
4.2. Kedisinin Doğruladığı Girişleri SQL Server Nasıl Denetler ?
4.3. Bir Authentication Tamamlamak için Gerekli Adımlar
4.4. Login Account'ları Yaratma
4.5. SQL Server'a Win NT Login'i Ekleme
4.6. Bir SQL Server Login'i Ekleme
4.7. Default Login Account'lar
4.8. Kullanıcılara ve Rollere Login'ler Belirleme
4.9. Rollere Loginler Belirleme
4.10. Fixed Database Rolleri
4.11. Kullanıcı Tanımlı Veritabanı Rolleri
4.12. Kullanıcı Tanımlı Veritabanı Rolüne bir Güvenlik Account'u Belirleme
4.13. Kullanıcılara ve Rollere İzinler Belirlemek
4.14. İzin Tipleri
4.15. Tablo ve View İzinleri
4.16. Erişime Müsaade Ederek İzinleri Onaylama
4.17. Erişimi Engelleyerek İzinleri Engelleme
4.18. Onaylanmış ve Engellenmiş İzinleri İptal Etme
4.19. Güvenliği Planlama
4.20. Application Güvenliğini Yönetme
4.21. View'lar ve Stored Procedure'larla Güvenliği Yönetme
4.22. Application Rollerini Kullanarak Client Application Güvenliğini Yönetme
4.23. Uygulama Rolleri Yaratma
4.24. Uygulama Rollerini Aktif Hale Getirmek
4.25. Tavsiye edilen Uygulamalar
Güvenlik Yönetimi
Belge Denetimi (Authentication Processing)
SQL Server, girişleri doğrulamak için WinNT’ye güvenir ya da kendi kendine girişleri doğrular.
WinNT’nin Doğruladığı Girişleri SQL Server Nasıl Denetler
Aşağıdaki adımlar, WinNT’nin doğruladığı loginleri SQL Server’ın nasıl işlediğini tanımlar.
v Bir kullanıcı SQL Server’a bağlandığı zaman client SQL Server’a güven bağlantısı açar.
Client güven bağlantısı açtığı için SQL Server, WinNT’nin login account’u zaten onayladığını bilir.
v Eğer SQL Server, SQL Server login accounts listesindeki kullanıcının WinNT user account veya group account’unu syslogins sistem tablosunda bulursa bağlantıyı kabul eder.
SQL Server’ın bir şifreyi yeniden onaylamaya ihtiyacı yok; çünkü WinNT zaten onu onaylamıştır.
Not: SQL Server, WinNT’de yaratılan veya WinNT’den kaldırılan grupları tanımaz. Grubu SQL Server’dan kaldırıp tekrar eklemek gerekir; çünkü SQL Server grubu teşhis etmek için WinNT güvenlik kimlik numarasını (Security identification number) kullanır.
v Bu durumda kullanıcının SQL Server login account’u, SQL Server login account olarak tanımlanmış ya WinNT kullanıcı ya da grup account’udur.
v Eğer çoklu SQL Server bilgisayarları güvenli domain gruplarının içine katılırsa tek bir NT domain’e giriş bütün SQL Server’lara erişim sağlamak için yeterlidir.
Kendisinin Doğruladığı Girişleri SQL Server Nasıl Denetler
SQL Server kendi doğruladığı girişleri onaylamak için aşağıdaki adımları ele alır:
v Bir kullanıcı, SQL Server login account’u ve şifresiyle bağlandığı zaman, SQL Server syslogins tablosunda yer alan girişi onaylar ve belirlenmiş şifre önceki kaydedilmiş şifreye uyar.
Eğer SQL Server kullanıcıya yer verecek login account’a sahip değilse, authentication başarısız olur ve bağlantı reddedilir.
Authentication Mode Seçme
Network ortamları ve server’ın güvenlik ihtiyaçları, SQL Server’da kullanılacak authentication modu belirler. Authentication Mode’u ayarlamak için SQL Server Enterprise Manager kullanılabilir.
WinNT Authentication Mode’un Avantajları
Tüm client’ların desteklediği güvenli bağlantılar içindeki network ortamında WinNT Authentication Modu kullan. WinNT authentication, SQL Server authenticationdan farklı avantajlar sunar.
Ø Geçersiz bir şifreden sonra, account lockout, minimum şifre uzunluğu, şifre sonu, denetleme (auditing) ve şifrelerin güvenlik onayı ve encryption’I gibi bir çok özellik sağlar.
Ø Tek bir login account eklemeyle, SQL Server’a kullanıcı grupları eklemeye olanak sağlar.
Ø Başka bir login account ve şifre hatırlamadan SQL Server’a kolayca erişebilmeye olanak tanır.
Mixed Modun Avantajları
Mixed Mode ve SQL Server authentication mekanizması, aşağıdaki avantajları sunar.
Ø Mixed Mode, SQL Server’a bağlanmak için Windows NT client’ları, Internet client’ları, mixed client grupları olmayanlara olanak sağlar.
Ø SQL Server authentication, WinNT üzerine başka güvenlik katmanları eklemeye izin verir.
Bir Authentication Mode’u Tamamlamak için Gerekli Adımlar
Authentication’I tamamlamak, için sistem administration account’undan aşağıdaki işleri yapmak gerekir.
WinNT authentication modu için 1-5 arasındaki adımları, Mixed Mode için ise 1-6 arasındaki adımları icra etmek gerekir.
1. Güvenli bağlantıların (Multi-Protocol, Named Pipes veya TCP/IP socketleri) desteklediği protocollerin doğruluğunu kanıtlamak
2. SQL Server’ın login güvenlik modu’nu ayarlamak için, SQL Server Enterprise Manager’I kullanmak.
3. Güvenlik seçeneğinin aktif olabilmesi için dur ve MSSQLServer servisi yeniden başlat.
4. Güvenli bağlantılar üzerinde SQL Server’a erişimi olan kullanıcılar ve WinNT grupları yaratmak. WinNT gruplarını ve kullanıcılarını yönetme iznine sahip değilsen, WinNT administrator bu görevi senin için yapar.
5. WinNT gruplarına ve kullanıcılarına, SQL Server’a erişim izni vermek için SQL Server Enterprise Manager’I kullanmak.
6. Güvenli bağlantılar üzerinden bağlanamayan bütün kullanıcılar için server’a erişim izni vermek. Bir login ID ve şifre yarat ve herbir kullanıcı için geçerli bir lisan belirle.
Login Account’ları Yaratma
WinNT kullanıcılarından veya gruplarından login account’lar yaratılabilir veya yeni SQL Server login account’lar yaratılabilir. Ayrıca default login account’lardan biri de kullanılabilir.
Login ID, SQL Server tarafından bilinen bir kullanıcı ismidir. Login ID’ler ayrıca loginler olarak söz edilirler.
SQL Server’a log olmak için, bir kullanıcı, geçerli login ID ve şifre sağlamalı.
Login account’lar master..syslogins sistem tablosunda tutulur. Bir login SQL Server’a eklendiği zaman bu geçerli bir veritabanını görevlendirir. Default veritabanını login account’a verme, veritabanında bir kullanıcı account’u yaratmaz. Kullanıcı işlemleri için default bir context ayarlar. Kullanıcı account, login için yaratılmadıkça, (eğer varsa) guest kullanıcı account’u kullanılarak veritabanına erişebilir.
SQL Server’a WinNT Login’I Ekleme
SQL Server Enterprise Manager veya sp_grantlogin sistem stored procedure’I, WinNT kullanıcısının veya grup account’unun SQL Server’a bağlanmasına izin verir. Sadece güvenlik veya sistem administrator’I sp_grantlogin’I çalıştırabilir.
Syntax Sp_grantlogin {‘login’}
Login parametresi, eklenecek olan WinNT kullanıcı veya grup ismidir. WinNT kullanıcı veya grubu, bir WinNt domain ismi ile sınırlı olmalı. Kullanıcı veya grup ismi 128 karakter ile sınırlıdır.
SQL Server’a WinNT loginleri eklemek için, aşağıdaki adımlar göz önüne alınır.
1. SQL Server, bir WinNT grubu için tek bir login’e sahip olmasından dolayı, WinNT grup üyeleri değiştiği zaman SQL Server’a hiç bir değişiklik kabul edilmez. Bu durum orphaned object’leri engeller. (SQL Server’da bulunmayan kullanıcılara ait olan object’ler)
2. Çıkarılan WinNT grup veya kullanıcısı, SQL Server’dan çıkarılamaz. Bu orphaned object’lerin oluşumunu engeller.
WinNT grup veya kullanıcısı çıkarılacağı zaman, network erişimini engelleyecek şekilde ilk olarak WinNT’den çıkarılması gerekir. Daha sonra SQL Server’dan çıkarılmalı.
3. Tüm grup üyeleri SQL Server’a bağlanırsa, bir WinNT grup account’u için bir login account eklenir.
4. Eğer kullanıcı, izni onaylanmış bir grubun üyesi değilse, WinNT kullanıcı account’u için bir login account’u eklenir.
5. Kullanıcılar, WinNT gruplarının üyesi olarak, SQL Server’a log olsa bile, SQl Server hala kullanıcıların kimliklerini (tanımlarını) bilir. USER_NAME fonksiyonu, WinNT grubunun üyesi olan kullanıcıların kullanıcı domainini ve login ismini döndürür.
WinNT login account’ları yönetmek için aşağıdaki tablodaki sistem stored procedure’lar kullanılabilir.
Sistem Stored Procedure
Tanım
Sp_revokelogin
WinNT kullanıcısı ve ya grubu için SQL Server’dan login girişlerini kaldırır
Sp_denylogin
WinNT kullanıcısı ve ya grubunun SQL Server’a bağlanmasını önler.
Bir SQL Server Login’I Ekleme
SQL Server’da, veritabanı kullanıcı ismi, kullanıcının veritabanına erişmesi için, login ID olarak belirlenen bir isimdir. Bir kullanıcının işlevi, kullanıcı isimlerine verilen izinlere bağlıdır.
WinNT ‘de, bir kullanıcı ismi, WinNT bilgisayarı veya domain tarafından bilinen bir isimdir. Bir kullanıcının, domain veya bilgisayara girebilmesi için, kullanıcı ismine ve şifreye sahip olması gerekir. Kullanıcının işlevi, WinNT haklarına ve o kullanıcı için onaylanan izinlere ve üyesi olduğu WinNT grupalarına bağlıdır.
SQL Server login’I yaratmak için sp_addlogin sistem stored procedure’I veya SQL Server Enterprise Manager kullanılır. Bunu, sadece sistem veya güvenlik adminstrator’I çalıştırabilir.
Syntax sp_addlogin {‘login’} [,’password’ [,’database’]]
sp_addlogin, master veritabanının, syslogins tablosuna bir kayıt ekler. sp_addlogin çalıştırıldıktan sonra, kullanıcı, bu account’la SQL Server’a log olabilir. Kullanıcılar şifrelerini sp_password kullanarak değiştirebiliyorlar.
SQL Server login’lerive şifreleri 128 karaktere kadar olabilir ve bu karakterler büyük harfler, semboller, rakamlar içerebilir. Fakat login’ler aşağıdakileri içermez:
· Backslash karakterini
· Varolan bir login account’u - sa gibi
· Boşuk karakterini
Sistem administratorları, kullanıcının şifresini, eski şifre yerine NULL koyarak değiştirebilir.
Default Login Account’lar
SQL Server iki default login account’a sahip. Bunlar sa, BULTIN\Administrators:
Sa
SQL Server üzerindeki ve bütün veritabanlarındaki tüm haklara sahip olan özel bir logindir. (Sistem administrator). Sa, temel uygulamalardan bağımsız olan yönetimsel ve işlemsel fonksiyonlardan sorumludur.
SQL Server’I yönetme, SQL Server’I kurma, server’ları ve client’ları konfigüre etme, kullanılan diske alanını, belleği ve bağlantıları denetleme ve yönetme, aygıtları ve veritabanlarını yaratma, SQL Server kullanıcılarını yetkilendirme ve izinlerini onaylama, veri transferi yapma, veritabanlarını yedekleme ve açma, kopyalamayı tamamlama, SQL Server performansını denetleme, sistem problemlerini teşhis etme işlemlerini yapabilir. Ayrıca sa, SQL Server’da varolan veri hakkında, uygulama tasarımcısına (application designer) tavsiye verir.
Sa, SQL Server sistem yöneticisinin kontrol etmesine izin vermediği koruma sisteminin haricinde işletir. Sa, ayrıca veritabanı sahibi olarak düşünülür. Sa şifresi bilinirse, sisteme onun hakları ile girilebilir.
Builtin/Administrators
Tüm WinNT yöneticileri için, default login account olarak sağlanır. SQL Server üzerindeki ve bütün veritabanlarındaki bütün haklara sahiptir.
Kullanıcılara ve Rollere Login’ler Belirleme
SQl Server’a loginler ekledikten sonra, bunlar, kullanıcıların erişmek istedikleri veritabanlarındaki, kullanıcı account’lara ve rollere map edilir.
Bir veritabanındaki sysusers sistem tablosu, herbir WinNT kullanıcısı, WinNT grubu, SQL Server kullanıcısı veya rolü için bir row içerir. İzinler, sysusers tablosundaki loginlere uygulanır ve sysprotects tablosunda tutulur.
Örneğin; WinNT payroll grubunun üyesinin northwind veritabanına erişimi onaylanır. Maria SQL Server’ bağlandıktan sonra aşağıdakilere sahip olur:
· Geçerli bir bağlantıya sahiptir; çünkü WinNT kullanıcı account’u, WinNT payroll grubunun içindedir.
· Northwind veritabanındaki hiçbir izne sahip değildir. Sadece payroll grubu izinlerine sahiptir.
Kullanıcı Account’lara Loginler Belirleme
Bir veritabanına erişmek için, bir login ya belirlenmiş kullanıcı account’unu ya da default kullanıcı account’unu kullanır.
Kullanıcı Account’u Ekleme
Bir kullanıcı account’u eklemek için sp_grantdbaccess sistem stored procedure’u veya SQL Server Enterprise Manager çalıştırılmalı. Sadece dbo ve database access administratorlar çalıştırabilir.
Syntax sp_grantdbaccess {‘login’} [,’name_in_db’]
Login parametresi, veritabanındaki yeni account için login ismidir. Bu WinNT kullanıcısı, WinNT grubu veya SQL Server kullanıcısı olabilir.
Name_in_db parametresi veritabanındaki account için seçimlik bir isimdir. Aşağıdaki sistem stored procedure’ler veritabanı erişimini yönetmek için kullanılır.
Sistem Stored Procedure
Tanım
Sp_revokedbaccess
Geçerli veritabanından bir güvenlik account’unu kaldırır.
Sp_change_users_login
Geçerli veritabanındaki, SQL Server login ve SQL Server user arasındaki ilişkiyi kaldırır.
Default Kullanıcı Account’lar
Default kullanıcı account’lar, ikiye ayrılır: dbo ve guest olarak.
DBO Account
Sa login ve sysadmin rol üyeleri, tüm veritabanları içerisindeki özel kullanıcı account’una map edilir. Bu dbo olarak adlandırılır. Sistem administrator’ın yarattığı nesneler otomatik olarak dbo’ya bağlanır. Dbo kullanıcısı kaldırılamaz. Database owner (DBO) veritabanı yaratıcısıdır. Sadece bir DBO vardır. DBO veritabanı içindeki bütün ayrıcalıklara sahiptir ve diğer kullanıcılara erişim ve yetenek sağlar.
Kullanıcı, kendi veritabanında, DBO olarak tanınır. Başka veritabanlarında DBO, kendi veritabanı kullanıcı ismi ile bilinir.
DBO özelliği, farklı kullanıcıya verilebilir. Diğer login ID’ler DBO’ya alias olabilmelerine rağmen, sadece bir login ID, DBO olabilir.
Guest User Account
Guest User Account, kullanıcı account’u olmadan loginlerin veritabanına erişmesine izin verir. Aşağıdaki her iki durumla da karşılaşıldığında, loginler guest user kimliğini üstlenir.
q Loginin, SQL Server’a erişimi var ama kendi user account’u yoluyla izni yok.
q Veritabanı bir guest user account içerir.
Master ve tempdb veritabanları hariç herhangi bir veritabanına guest user eklenebilir ve veritabanından kaldırılabilir.
Eğer guest user, başka user account’uysa, izinler guest user’a uygulanır.
Rollere Loginler Belirleme
Roller, kullanıcıları izinlerin uygulandığı tek parçalar içinde birleştirmektir.
SQL server , çok kullanılan administrative fonksiyonlar için predefined server ve veritebenı rolleri sağlar. Böylece seçilmiş administrative izinler belirli kullanıcılara kolayca verilebilir.
Organizasyonunuzdaki işçilerin yaptıkları işleri temsil etmek için kendi veritabanı rollerinizi yaratabilirsiniz. Onları rol üyesi olarak basitçe ekleyebilir ve kaldırabilirsiniz. İşçiler , Çalışmaya başladıklarında veya çalışma ortamını terk ettiklerinde , izinler tekrar tekrar onaylanmaz ve iptal edilmez. Pozisyon değişirse , rol için izinlerin değiştirilmesi çok kolaydır. Böylece tüm rol üyeleri içinde otomatik olarak değişirler.
Fixed Server Roles
Fixed Server Roller , server seviyesindeki administrative ayrıcalıkları sağlar. Bunlar , server seviyesindeki kullanıcı veritabanlarına bağlı olmadan yönetilirler , ve master syslogins sistem tablosunda tutulurlar.
Role
İzin
Veritabanı yaratıcıları (dbcreator)
Veritabanlarını yaratır ve değiştirir.
Disk Yöneticileri (diskadmin)
Disk dosyalarını yönetir.
Process Yöneticileri (processadmin)
SQL Server Processleri yönetir.
Güvenlik Yöneticileri (securityadmin)
Server loginleri yönetir ve audit eder (denetler).
Server Yöneticileri (serveradmin)
Server-wide ayarlarını yapar
Setup Yöneticileri (setupadmin)
Kopyayı kurar.
Sistem Yöneticileri (sysadmin)
Herhangi bir aktiviteyi yerine getirir.
Fixed Rol’e Bir Login Account Belirleme
Fixed Server üyesi olarak bir login account eklemek için SSEM veya sp_addsrurolemember kullanılır.
Syntax sp_addsrurolemember login , role
Server Rol’e bir login eklendiği zaman , login’in rol üyesi olduğunu göstermek için sysloins tablosundaki uygun row güncellenir , ve server rol’e bağlı izinlere sahip olur.
Fixed Server Rol’e login account’lar belirlemek için aşağıdaki adımları gözönüne alalım:
· Fixed server Roller eklenemez , değiştirilemez veya kaldırılamaz.
· Herhangi bir fixed server rol üyesi , role başka login account’lar ekleyebilir.
· Sp_addsrvrolemember , kullanıcı tanımlı bir işlemle çalıştırılamaz.
ÖRNEK :
Sysadmin server rolüne , Win NT Kullanıcısı Corporote\Elenos eklemek için:
EXEC sp_addsrvrolemember ‘Corporote\Elenas’ , sysadmin
Ayrıca , sp_dropsrvrolemember kullanılarak fixed server role’den bir üye kaldırılabilir.
Fixed Database Rolleri
Fixed database rol’leri veritabanı seviyesindeki administrative ayrıcalıklarını sağlar. Fixed database rolleri , herbir veritabanındaki sysusers sistem tablosu içinde tutulur.
Role
İzin
Public
Bir veritabanındaki kullanıcılar için tüm geçerli olan izinleri sağlar.
Db_owner
Herhangi bir veritabanı rolü aktivitesini icra eder
Db_accessadmin
Veritabanı kullanıcılarını, grupları, ve rolleri ekler veya kaldırır.
Db_ddladmin
Veritabanı nesnelerini ekler, değiştirir veya kaldırır.
Db_securityadmin
Statement ve nesne izinlerini belirler.
Db_backupoperator
Veritabanını yedekler ve açar.
Db_datareader
Herhangi bir tablodan veri okur.
Db_datawriter
Veri ekler, değiştirir veya bütün tablolardan veri siler.
Db_denydatareader
Herhangi bir tablodan veri okumaz.
Db_denydatawriter
Herhangi bir tablodan veri değiştirmez.
Public Rol
Public rol , veritabanı kullanıcılarına özel bir veritabanı rolüdür.
Public Rol
· Veritabanındaki kullanıcılar için tüm default izinleri denetler.
· Ona görev verecek kullanıcılara , gruplara veya rollere sahip değildir. Çünkü bunlar zaten ona bağlıdır.
· Master , msdb , tempdb , model ve tüm kullanıcı veritabanlarının içinde bulunur.
· Kaldırılamaz
Uygun izinler olmadan , bir kullanıcı SQL server’a bağlanabilir ama sadece sınırlandırılmış task’ları çalıştırabilir. İzinler olmadan , bir kullanıcı , public role verilmiş izinlere sahip olabilir ve aşağıdakileri yapabilir:
· PRINT ifadesi gibi , izine sahip olmayan statement’leri çalıştırma
· Sistem tablosu bilgilerini inceleyebilir ve master veritabanından ve kullanıcı veritabanından bilgi almak için belirli sistem stored procedure ‘leri çalıştırabilir.
· Guest access ile herhangi bir veritabanına erişebilir.
Fixed Database Rol’e Güvenlik Account ‘ları Belirleme
Fixed veritabanı rolünün üyesine bir güvenlik account ‘u eklemek için SSEM veya sp_addrolemember kullanılır. Sadece db_owner rolünün üyeleri , sp_addrolemember’I çalıştırabilir. Role owner’lar kendi rollerine üye eklemek için sp_addrolemember’I çalıştırır.
Syntax sp_addrolemember role , security_account
Fixed role güvenlik accuntları belirlenirken aşağıdaki adımlar göz önüne alınır:
· Fixed database roller , eklenemez , değiştirilemez veya kaldırılamaz.
· Herhangi bir fixed database rolünün üyesi , olarak başka login accountlar ekleyebilir.
Ayrıca bir rol’den, güvenlik account’unu kaldırmak için sp_droprolemember kullanılır.
Kullanıcı Tanımlı Veritabanı Rolleri
Kullanıcı Tanımlı veritabanı rolleri yaratma, ortak izinlere sahip kullanıcı gruplarını yaratmaya olanak sağlar. Bir veritabanına kullanıcı tanımlı rol ekleme aşağıdaki nedenlere bağlıdır:
q Eğer WinNT kullanıcı account’larını yönetme iznine sahip değilsek
q İnsanların SQL Server’daki belirlenmiş aktiviteleri çalıştırmaya ihtiyaçları olduğu zaman ve uygun olmayan WinNT grubu varsa, kullanıcı tanımlı rol eklenir.
Örneğin bir şirket farklı departmanlardan çalışanları içeren yeni bir komite oluşturabilir. Bu çalışanlar veritabanındaki özel bir proje tablosuna erişime ihtiyaç duyabilirler. Bunun için kullanıcı tanımlı rol tanımlanabilir ve sonra role özel WinNT kullanıcı account’u eklenebilir. İzinler uygulamaya konduğu zaman roldeki özel kullanıcı accountları tablo erişimine ulaşır.
Kullanıcı Tanımlı Veritabanı Rolü Yaratma
SQL Server Enterprise Manager veya sp_addrole sistem stored procedure ile yeni bir veritabanı rolü yaratılabilir. Herbir kullanıcı tanımlı rol için, geçerli veritabanının sysusers tablosuna bir giriş eklenir. Sadece security admin ve dbo üyeleri sp_addrole sistem stored procedure’ı çalıştırabilir.
Syntax sp_addrole role, owner
Veri tabanı rolü yaratmak için aşağıdaki adımları inceleyelim:
# Sp_addrole sistem stored procedure, geçerli veritabanına yeni bir SQL Server rolü ekler
# Role izinler uygulandığı zaman, sanki izin üyenin kendi account’una uygulanmış gibi, herbir rol üyesi izinleri elde eder.
Örnek: dbo kullanıcısı tarafından, Managers isimli yeni bir rol eklemek için aşağıdaki ifade çalıştırılmalı.
EXEC sp_addrole Managers, dbo
Kullanıcı Tanımlı Veritabanı Rolüne Bir Güvenlik Account’u Belirleme
Bir rol eklendikten sonra, SQL Server Enterprise Manager veya sp_addrolemember sistem stored procedure kullanılarak, rol üyesi olarak kullanıcılar ve roller eklenbilir. Sadece db_owner, fixed database rol üyeleri, fixed database rollerine üye eklemek için sp_addrolemember sistem stored procedure’I çalıştırabilir.
Syntax sp_addrolemember role, security_account
Örnek: Managers rolüne, Alicia kullanıcısını eklemek için, aşağıdaki ifade çalıştırılır:
EXEC sp_addrolemember Managers, Alicia
Fixed database rol’e güvenlik account’ları belirlendiği zaman aşağıdaki adımlar göz önüne alınır.
· sp_addrolemember ile role bir güvenlik account’u eklendiği zaman, role uygulanan izinler yeni üyeye de uygulanır.
· Aynı security_account farklı rol üyelerine verilemez.
· Nesting roller sistem performansını düşürür.
Veritabanı rollerinin yönetimi için aşağıdaki ek stored procedure’lar kullanılabilir.
Sistem Stored Proocedure
Tanım
Sp_droprole
Geçerli veritabanından SQL Server rolünü kaldırır.
Sp_droprolemember
SQL Server rolünden bir security account kaldırılır.
Kullanıcılara ve Rollere İzinler Belirlemek
Kullanıcı account’lara ve rollere loginler belirlendikten sonra, veritabanı güvenliğini yönetmek için izinler belirlenmeli.
İzinler, kullanıcıların hangi tip veritabanı nesnelerini kullanabileceğini ve bunları ne şekilde kullanabileceğini belirlerler. Kullanıcılara veya gruplara verilen izinler çok önemlidir.
İzin Tipleri
SQL Server veritabanı güvenliğini yürütmek için izinleri kullanır. SQL Server, Transact-SQL ifadelerinin, view’ların, ve stored procedure’lerin kullanılması için yetki verir. İzinler herbir kullanıcının durumuna bağlı olarak (sa, dbo, database object owner olarak).
SQL Server’da 3 tip izin var. statement, object ve predefined.
Statement
Object
Predefined
Create Database
Select
Fixed Role
Create Table
Insert Table
Object Owner
Create View
Update View
Create Procedure
Delete
Create Index
Select
Create Rule
Update Column
Create Default
References
Exec Stored Procedure
Statement İzinleri
Belirli Transact-SQL ifadeleri ile ilgili ayrıcalıkları kullanıcılara verir. Veritabanı veya item yaratma ile ilgili aktiviteler statement izinler olarak adlandırılır. Sysadmin, dbo, securityadmin rolleri statement izinleri verebilir. Statement izinleri, belirli Transaction-SQL ifadelerini işlemek için ayrıcalık sağlar. Statement izinleri, nesneye özgü değildir. Bunlar sysadmin, db_owner, veya db_securityadmin tarafından onaylanırlar.
Statement izinleri, şu ifadeleri uygular: CREATE DATABASE, CREATE DEFAULT, CREATE PROCEDURE, CREATE RULE, CREATE TABLE, CREATE VIEW, DUMP DATABASE, ve DUMP TRANSACTION. Ayrıca komut izinleri olarak da adlandırılırlar.
Object İzinleri
Verilerle çalışma veya procedure’leri çalıştırma izinleri verir. Belirli veritabanı nesneleri üzerindeki belirli ifadelerin kullanımını denetler. Bunlar DBO tarafından onaylanır ve iptal edilirler.
Tablo ve View İzinleri
SELECT, INSERT, UPDATE, DELETE ifadelerini kullanmaya izin verir.
Column İzinleri
SELECT, UPDATE ve REFERENCES izinleri belirli kolonlara uygulanabilir. Bir kullanıcı FOREIGN KEY constraint ile bir tabloya bir satır eklediği zaman veya FOREIGN KEY constraint ile bir sütundaki veri değiştirildiği zaman, SQL Server FOREIGN KEY constraint’teki referans edilmiş veri ile sütun içindeki veriyi onaylar. Eğer kullanıcının referans edilmiş sütun veya tabloda SELECT izinleri yoksa kolon için REFERENCES izinleri kullanıcıya verilmiş olmalı.
Stored Procedure İzinleri
EXECUTE izni, stored procedure için sadece nesne iznidir.
Predefined İzinler
Sadece fixed rol üyeleri veya db_owner’larbelirli aktiviteleri yerine getirebilirler. Bu aktiviteleri yerine getiren izinler, predefined izinler olarak adlandırılırlar.
Object Owner İzinleri
Kendi yarattıkları nesnelerin, aktivitelerini yerine getirmeye izinli olurlar. Table owner olan bir kullanıcı, tablo ile ilgili bütün aktiviteleri yerine getirebilir. Bu tablo ile çalışan kullanıcılara, ekleme, silme, değiştirme, tablo tanımlama izinleri verir.
Fixed Role İzinleri
Fixed roller yönetimsel izinlere sahiptirler. Örneğin; sysadmin rolünün bir üyesi olarak eklenen kullanıcı, SQL Server kurulumundaki herhangi bir şeyi yapmak veya okumak için bütün izinlere sahiptir. Sysadmin rolü değiştirilemez ve başka bir user account’a verilemez.
Granting, Denying, Revoking (Onaylama, Engelleme, İptal Etme) İzinleri
Rol veya kullanıcı için izinler 3 durumludur. Bunlar onaylama, engelleme, iptal etmedir. İzinler kullanıcıya onaylanmazsa veya engellenmezse, sanki iptal edilmiş gibi olur. İzinler sysprotects sistem tablosunda tutulurlar.
Statement
Sysprotects tablosunda giriş durumu
Tanım
GRANT (Onaylama)
Pozitif
Hareketi yerine getirebilir.
DENY (Engelleme)
Negatif
Hareketi yerine getiremez ve rol üyesi tarafından önemsenmez.
REVOKE (İptal etme)
Hiçbiri
Hareketi yerine getiremez ama rol üyesi tarafından önemsenir.
Tüm onaylanmış izinler kümülatiftir. Hareketler onaylandığı zaman kullanıcılar tarafından icra edilebilirler.
DENY ifadesi kullanıcıların hareketleri icra etmesini önlerler. İzinlerin kullanıcılara doğrudan onaylanıp onaylanmadığını önemser.
Aşağıdakiler gerçekleşirse, kullanıcılar bir hareketi yapmaya izinli olurlar:
q Kullanıcılar izinleri onaylarlarsa ya da bağlı oldukları rol izinleri onaylarsa
q İzin kullanıcıya yada kullanıcının bağlı olduğu rollerden birine engellenmezse
Erişime Müsaade Ederek İzinleri Onaylama
GRANT SELECT
ON products
TO order
GRANT INSERT, UPDATE
ON products
TO Eva, Ivan, David
İzinler, veri ile çalışmaya veya aktiviteleri çalıştırmaya izin vermek için security account’lara uygulanır.
İzinler onaylanırken aşağıdaki adımlar göz önüne alınmalı.
Ø Sadece, geçerli veritabanında izinler onaylanabilir.
Ø Sysadmin, db_owner ve db_securityadmin rollerine ve object owner’lara izinleri onaylama hakkı verilmiştir.
İzinler SQL Server Enterprise Manager veya GRANT ifadesi ile onaylanır.
Aşağıda bir örnek görülmektedir.
USE northwind
GO
GRANT SELECT
ON products
TO order
GO
GRANT INSERT, UPDATE, DELETE
ON products
TO Eva, Ivan, David
GO
Yukarıdaki örnekte; Order isimli role SELECT izni verilmiş. Bundan sonra ek izinler birkaç kullanıcıya verilmiş (Eva, Ivan, David). (Zaten insert, update izinlerine sahipler. Select iznine sahip değiller. Ayrıca select iznine de order rolü tarafından sahip olurlar.) Products tablosu üzerindeki bütün izinlere sahipler; çünkü onlar ayrıca order rolünün üyesiler.
Erişimi Engelleyerek İzinleri Engelleme
DENY SELECT, INSERT, UPDATE
ON products
TO Eva, Ivan, David
Belirli kullanıcı veya rollerin izinleri sınırlanmak istenebilir. Bir security account’a izinleri engelleme:
v Kullanıcı veya role önceden onaylanmış izinleri kaldırır
v Başka rolden miras alınmış (inherit) izinlerin aktifliğini bozar
v Gelecekte Kullanıcı veya rolün herhangi bir rolden izinleri miras almayacağından emin olur
İzinler engellendiği zaman aşağıdaki adımlar göz önüne alınmalı:
· Sadece geçerli veritabanındaki iznler engellenebilir.
· Sysadmin, db_owner ve db_securityadmin rol üyelerine ve object owner’lara izinleri engelleme hakkı verilmiştir.
İzinleri engellemek için, SQL Server Enterprise Manager veya DENY ifadesi kullanılabilir.
USE northwind
GO
GRANT SELECT
ON products
TO order
GO
DENY SELECT, INSERT, UPDATE
ON products
TO Eva, Ivan, David
Yukarıdaki örnekte; Order isimli role SELECT izni verilmiş. Bundan sonra rol üyesi birkaç kullanıcının (Eva, Ivan, David) products tablosuna erişimleri engellenmiş.
Onaylanmış ve Engellenmiş İzinleri İptal Etme
REVOKE SELECT, INSERT, UPDATE
ON products
FROM Eva, Ivan
İptal etme ile onaylanmış veya engellenmiş izinler etkisiz hale getirilebilir. İptal Etme, iki hareket içinde benzerdir. Farklılık bir izni iptal etme, onaylanmış izinleri kaldırırken, kullanıcının veya rolün, izinleri miras almasına (inherit) engel olamaz. Ayrıca DENY ifadesi iptal edilerek, önceki engellenmiş izinler de kaldırılabilir. İzinler iptal edilirken aşağıdaki adımlar göz öüne alınmalı:
· Sadece geçerli veritabanındaki iznler iptal edilebilir.
· Bir izni iptal etme, onaylanmış ve engellenmiş izinler tarafından yaratılan sysprotects sistem tablosuna girişleri kaldırır.
· Sysadmin, db_owner ve db_securityadmin rol üyelerine ve object owner’lara izinleri engelleme hakkı verilmiştir.
Önceki onaylanmış ve engellenmiş izinleri iptal etmek için, SQL Server Enterprise Manager veya REVOKE ifadesi kullanılabilir.
USE northwind
REVOKE SELECT, INSERT, UPDATE
ON products
FROM Eva, Ivan
Yukarıdaki örnek çoklu kullanıcılardan çoklu statement (Select, insert, update gibi) izinleri iptal eder.
Güvenliği Planlama
Güvenlik planlanırken 5 ana madde göz önüne alınmalı.
1. Geçerli Login Kullanıcıları Tanımlamak
Sa veya BUILTIN\Administrators Login’inin kullanılıp kullanılmayacağı veya nasıl kullanılacağı belirlenmeli.
Sa Login
Sa bir built- in administrator login olmasına rağmen rutin olarak kullanılmaz. Sistem yöneticisi sysadmin fixed server rol üyesi olmalı ve kendi loginleriyle log olmalı.
Not: SQL Server kurulduğu zaman, sa loginin bir şifresi bulunmaz. Sa loginle, SQL Server’a, yetkisiz kişilerin erişimini engellemek için şifrenin hemen değiştirilmesi önerilir.
BUILTIN\Administrators Login
BUILTIN\Administrators WinNT yöneticileri için sysadmin rolünün bir üyesidir.
Kendi organizasyonunda SQL Server’a tam erişim sağlamak için WinNT yöneticilerinin tamamını istemezsen, BUILTIN\Administrators logini kaldırabilirsin veya sysadmin rolünden kaldırabilirsin. İstenirse login eski yerine konabilir ve izinleri belirlenebilir.
2. Guest User Account Fonksiyonlarını Belirlemek
Guest User Account veritabanına kullanıcı account’u olmadan erişen bir logine izin verir. Veritabanının bir Guest User Account’unun olup olmayacağına karar vermeli. Eğer olacaksa veritabanlarında hangi izinlere sahip olacağı belirlenmeli.
3. Public Rol İzinlerini Belirlemek
Public rol, özel bir veritabanı rolüdür. Her bir veritabanında kullanıcının sahip olduğu izinleri kontrol eder. Herbir veritabanında public rol’ün sahip olacağı izinlere karar verilmeli. Başta public rolün izinleri yoktur.
4. Loginleri Kullanıcı Account’lara ve Rollere Map Etmek
Veritabanına login’ler belirlenmeden önce, bir kullanıcı account’un veya bir rolün kullanılıp kullanılmayacağını belirlemek gerekir. Genelde; aşağıdakiler önerilir.
q Eğer WinNT grup üyelerilerinden sadece biri görevleri icra edebilirse, grup için kullanıcı account’u yaratabilir ve bunlar için izinler kullanabilirler.
q Eğer birden fazla login görevleri icra edebilirse, bir rol yaratabilir ve rol’e login belirleyebilirler.
q Eğer bir login ortak yönetimsel görevleri icra ederse, veritabanı rolüne veya fixed server’a login map edilir.
5. DBO ile Nesneler Yaratmak
Hangi kullanıcıların veya rollerin nesneler yaratabileceğini belirlemek çok önemlidir. Sadece sysadmin, db_owner ve db_ddladmin fixed veritabanı rolleri, veritabanı nesneleri yaratabilirler. Bütün nesneler object owner olarak, dbo kullanıcısıyla tanımlanır. Dbo ile nesne tanımlama, kullanıcların owner ismi içermeyen nesnelerden söz etmesine olanak sağlar. Aksi taktirde nesne, object owner olarak kullanıcı ismiyle yaratılır. Sysadmin rolden yaratılan herhangi bir rol dbo’ya sahiptir.
Nesne Owner’ları Değiştirme
Veritabanı nesneleri, tablolar, indexler, view’lar, default’lar, trigger’lar, rule’lar ve procedure’lerdir. Veritabanı nesnesi yaratan kullanıcı, database object owner olarak adlandırılır ve otomatik olarak nesneler üzerindeki bütün haklara sahiptir. Nesneyi kullanmaları için diğer kullanıcılara izin verebilirler. Database object sahipliği devredilemez.
Eğer nesneler dbo ile yaratılmamışsa, sp_changeobjectowner sistem procedure ile object owner’lar değiştirilebilir.
Syntax sp_changeobjectowner object, owner
Dbo owner’ları değiştirmek için, aşağıdaki adımlar göz önüne alınabilir.
¨ Sadece db_owner ve db_ddladmin fixed veritabanı rolleri ve securityadmin server rol üyeleri nesne owner’ları değiştirebilirler.
¨ Bir veritabanının owner’ını değiştirme, yeni ownership bilgisiyle güncellenen nesneyi referans eden scriptleri ve batch file’ları gerektirir. SQL Server bu güncellemeyi otomatik olarak icra edemez.
Application Güvenliğini Yönetme
İzinler ve Login authentication kullanılarak, veritabanına erişim güvence altına alınabilir. Method olarak stored procedure’lar, view’lar ve application roller kullanılabilir.
View’lar ve Stored Procedure’larla Güvenliği Yönetme
View’lar ve stored Procedure’lar bir uygulama için yaratılmış olan SQL Server nesneleriyle birlikte güvenliği kurmaya izin verir.
View’lar ve stored Procedure’lar, ilgili oldukları nesneler üzerindeki izinler yerine sadece View’lar ve stored Procedure’lar üzerindeki izinleri yönetme imkan sağlar. Ayrıca kullanıcıları, tablo değişikliklerine karşı korur.
Güvenliği basitleştirmek için view’ları ve stored procedure’ları kullanmak:
ü Underlying tablolar üzerindeki izinler olmadan, bir view üzerindeki izinleri onaylar
Örneğin; bir tablodaki doğum tarihi gizli olsun. Kullanıcıların erişimleri engellensin. Ayrıca kullanıcılar tablodaki diğer kolonlara erişebilmeliler. Doğum tarihi hariç diğer kolonları içeren bir view tanımlanır. View’a select izni vererek kullanıcıların gizli olmayan kolonlara erişimleri sağlanır.
ü Değiştirilmiş tabloya erişim onayı vermeden stored procedure’I çalıştırma izinlerini onaylar.
Örneğin eski veri, arşiv tablosuna kopyalanır ve daha sonra primary tablosundan silinir. Kullanıcılara, doğrudan primary tablosundan bir row silme veya bunları primary tablosundan silmeden,arşiv tablosuna bir row ekleme izni verilmez. Bir stored procedure yaratılarak her iki aktivite de birlikte çalıştırılabilir. Daha sonra kullanıcılara stored procedure’ları çalıştırma izni verilir.
Aşağıdaki örnek bir view yaratır. Employee tablosundan employee bilgilerini yeniden alır ama birthdate ve homephone gibi verileri hesaba katmaz.
CREATE VIEW employee_view AS
SELECT FirstName, LastName, Title, Extension
FROM employees
Application Rollerini Kullanarak Client Application Güvenliğini Yönetme
Uygulama rolleri, özel bir uygulama için güvenliği yürütmeye izin verir. Bunlar dolaylı yollardan veriye erişim için kullanıcıları sınırlar.
Örneğin; order entry clerklerin, sadece Order entry uygulamasını kullanırken products, orders, customer tablolarını güncelleyebilmesi istenebilir. Microsoft Excel gibi başka bir üründeki tablolara erişen clerkler istenmeyebilir. Bu durumda; order entry uygulaması için bir uygulama rolü yaratılabilir.
Uygulama rolleri diğer rollerden farklıdır. Aşağıda diğer rollerle, uygulama rolleri arasındaki farklılıklar
listelenmiştir.
· Application rollerin, kullanıcı uygulamayı çalıştırdığı zaman kullanıcılar için aktifleştirilen, üyeleri yoktur. Bu, uygulama kullanıcılarına özel haklar verir.
· Uygulama rolleri, aktif olabilmek için bir şifre isterler. Application rol şifresinin güvenliğini korumak için basit encrypt anahtarlar kullanılabilir. Ayrıca extended stored procedure kullanılarak şifre server’a yerleştirilebilir.
· Aktif uygulama rolü, kullanıcının veritabanındaki diğer izinlerini umursamaz. SQL Server kullanıcı account veya rollerin sahip olduğu izinleri göz önüne almaz.
Uygulama Rolleri Yaratma
EXEC sp_addapprole SalesApp, hg_7532LR
GRANT SELECT
ON products
TO SalesApp
Application roller yaratılabilir ve bunlara izinler belirlenebilir.
Uygulama Rolleri Yaratma
Yeni bir uygulama rolü yaratmak için, SQL Server Enterprise Manager veya sp_addapprole stored procedure kullanılır. Sadece db_owner, db_securityadmin, ve sysadmin rollerinin üyeleri sp_addapprole stored procedure’ı çalıştırabilirler.
Syntax sp_addapprole role, password
Yeni uygulama rolleri yaratmak için aşağıdaki adımlara dikkat etmek gerekir.
§ sp_addapprole sistem stored procedure’ü yeni rol için, bir güvenlik account’u ekler. Bu durum, sysusers tablosuna bir kayıt eklemeyle yapılır.
§ Password değeri bir şifredir. Rolü aktif yapmak için istenir ve encrypt edilmiş forma dönüştürülür.
Aşağıdaki örnek SalesApp isimli ve şifresi hg_7532LR olan yeni bir uygulama rolü ekler.
EXEC sp_addapprole SalesApp, hg_7532LR
Application Rol İzinlerini Yönetme
SQL Server Enterprise Manager veya GRANT, DENY, ve REVOKE ifadeleri ile uygulama rol izinleri yönetilir.
Aşağıdaki örnek product tablosundan seçmek için SalesApp uygulama rolüne izinler verir.
GRANT SELECT
ON products
TO SalesApp
Uygulama Rollerini Aktif Hale Getirmek
Bir client, SQL Server’a herhangi bir login account’u ile bağlandıktan sonra, client, application rolüyle birleşmiş izinleri aktif hale getirmek için, sp_setapprole sistem stored procedure’ını çalıştırır. sp_setapprole sadece Transact-SQL ifadeleriyle çalıştırılabilir.
Syntax sp_setapprole {‘name’, ‘password ’}
Uygulama Rollerini aktif hale getirmek için aşağıdaki adımlara dikkat edilir.
v Geçerli uygulama, şifre sağlamalı.
v Eğer kullanıcılar veritabanını değiştirirlerse, izinlere dayanan aktiviteleri icra etme hakkına sahip olurlar.
v Bir uygulama rolü sp_setapprole ile aktifleştirildikten sonra, kullanıcılar SQL Server’dan kopana kadar rol aktif haldedir.
Aşağıdaki örnek; adı SalesAppRole ile şifresi AsDeFXX olan bir uygulama rolünü aktif hale getirir;
EXEC sp_setapprole ‘SalesAppRole’, ‘AsDeFXX’Sistem Stored Procedure
Tanım
Sp_dropapprole
Geçerli veritabanından uygulama rolünü kaldırır.
Sp_approlepassword
Bir application rolünün password’ünü değiştirir.
Tavsiye Edilen Uygulamalar
Güvenlik tamamlanırken aşağıdaki tavsiyeler dikkate alınmalı:
i. Network ortamı sadece güvenli hale getirilmiş client bağlantılarını desteklerse, WinNT authentication modu kullanılır. Mixed Modu sadece güvenli olmayan client’lara bağlanmak için kullanılır.
ii. Sa login yerine sistem yöneticileri (sysadmin) rolünü kullan. Sa login, WinNT authentication kullanılsa bile SQL Server’a local olarak log olmak için kullanılır. Bu, sysadmin role’den yanlışlıkla tüm kullanıcılar kaldırılırsa, yararlı olabilir.
iii. WinNT kullanıcıları veya grupları kaldırılırken, ilk olarak network erişimi engellenerek WinNT’den kaldırılır. Daha sonra SQL Server’dan kaldırılır.
iv. Bütün nesneler, kolayca erişilebilir olmaları için dbo kullanıcılarıyla yaratılırlar.
Güvenliği sağlamak için Stored procedure’leri ve view’ları kullanma, column-level güvenliğinden çok daha hızlı olabilir.
4.2. Kedisinin Doğruladığı Girişleri SQL Server Nasıl Denetler ?
4.3. Bir Authentication Tamamlamak için Gerekli Adımlar
4.4. Login Account'ları Yaratma
4.5. SQL Server'a Win NT Login'i Ekleme
4.6. Bir SQL Server Login'i Ekleme
4.7. Default Login Account'lar
4.8. Kullanıcılara ve Rollere Login'ler Belirleme
4.9. Rollere Loginler Belirleme
4.10. Fixed Database Rolleri
4.11. Kullanıcı Tanımlı Veritabanı Rolleri
4.12. Kullanıcı Tanımlı Veritabanı Rolüne bir Güvenlik Account'u Belirleme
4.13. Kullanıcılara ve Rollere İzinler Belirlemek
4.14. İzin Tipleri
4.15. Tablo ve View İzinleri
4.16. Erişime Müsaade Ederek İzinleri Onaylama
4.17. Erişimi Engelleyerek İzinleri Engelleme
4.18. Onaylanmış ve Engellenmiş İzinleri İptal Etme
4.19. Güvenliği Planlama
4.20. Application Güvenliğini Yönetme
4.21. View'lar ve Stored Procedure'larla Güvenliği Yönetme
4.22. Application Rollerini Kullanarak Client Application Güvenliğini Yönetme
4.23. Uygulama Rolleri Yaratma
4.24. Uygulama Rollerini Aktif Hale Getirmek
4.25. Tavsiye edilen Uygulamalar
Güvenlik Yönetimi
Belge Denetimi (Authentication Processing)
SQL Server, girişleri doğrulamak için WinNT’ye güvenir ya da kendi kendine girişleri doğrular.
WinNT’nin Doğruladığı Girişleri SQL Server Nasıl Denetler
Aşağıdaki adımlar, WinNT’nin doğruladığı loginleri SQL Server’ın nasıl işlediğini tanımlar.
v Bir kullanıcı SQL Server’a bağlandığı zaman client SQL Server’a güven bağlantısı açar.
Client güven bağlantısı açtığı için SQL Server, WinNT’nin login account’u zaten onayladığını bilir.
v Eğer SQL Server, SQL Server login accounts listesindeki kullanıcının WinNT user account veya group account’unu syslogins sistem tablosunda bulursa bağlantıyı kabul eder.
SQL Server’ın bir şifreyi yeniden onaylamaya ihtiyacı yok; çünkü WinNT zaten onu onaylamıştır.
Not: SQL Server, WinNT’de yaratılan veya WinNT’den kaldırılan grupları tanımaz. Grubu SQL Server’dan kaldırıp tekrar eklemek gerekir; çünkü SQL Server grubu teşhis etmek için WinNT güvenlik kimlik numarasını (Security identification number) kullanır.
v Bu durumda kullanıcının SQL Server login account’u, SQL Server login account olarak tanımlanmış ya WinNT kullanıcı ya da grup account’udur.
v Eğer çoklu SQL Server bilgisayarları güvenli domain gruplarının içine katılırsa tek bir NT domain’e giriş bütün SQL Server’lara erişim sağlamak için yeterlidir.
Kendisinin Doğruladığı Girişleri SQL Server Nasıl Denetler
SQL Server kendi doğruladığı girişleri onaylamak için aşağıdaki adımları ele alır:
v Bir kullanıcı, SQL Server login account’u ve şifresiyle bağlandığı zaman, SQL Server syslogins tablosunda yer alan girişi onaylar ve belirlenmiş şifre önceki kaydedilmiş şifreye uyar.
Eğer SQL Server kullanıcıya yer verecek login account’a sahip değilse, authentication başarısız olur ve bağlantı reddedilir.
Authentication Mode Seçme
Network ortamları ve server’ın güvenlik ihtiyaçları, SQL Server’da kullanılacak authentication modu belirler. Authentication Mode’u ayarlamak için SQL Server Enterprise Manager kullanılabilir.
WinNT Authentication Mode’un Avantajları
Tüm client’ların desteklediği güvenli bağlantılar içindeki network ortamında WinNT Authentication Modu kullan. WinNT authentication, SQL Server authenticationdan farklı avantajlar sunar.
Ø Geçersiz bir şifreden sonra, account lockout, minimum şifre uzunluğu, şifre sonu, denetleme (auditing) ve şifrelerin güvenlik onayı ve encryption’I gibi bir çok özellik sağlar.
Ø Tek bir login account eklemeyle, SQL Server’a kullanıcı grupları eklemeye olanak sağlar.
Ø Başka bir login account ve şifre hatırlamadan SQL Server’a kolayca erişebilmeye olanak tanır.
Mixed Modun Avantajları
Mixed Mode ve SQL Server authentication mekanizması, aşağıdaki avantajları sunar.
Ø Mixed Mode, SQL Server’a bağlanmak için Windows NT client’ları, Internet client’ları, mixed client grupları olmayanlara olanak sağlar.
Ø SQL Server authentication, WinNT üzerine başka güvenlik katmanları eklemeye izin verir.
Bir Authentication Mode’u Tamamlamak için Gerekli Adımlar
Authentication’I tamamlamak, için sistem administration account’undan aşağıdaki işleri yapmak gerekir.
WinNT authentication modu için 1-5 arasındaki adımları, Mixed Mode için ise 1-6 arasındaki adımları icra etmek gerekir.
1. Güvenli bağlantıların (Multi-Protocol, Named Pipes veya TCP/IP socketleri) desteklediği protocollerin doğruluğunu kanıtlamak
2. SQL Server’ın login güvenlik modu’nu ayarlamak için, SQL Server Enterprise Manager’I kullanmak.
3. Güvenlik seçeneğinin aktif olabilmesi için dur ve MSSQLServer servisi yeniden başlat.
4. Güvenli bağlantılar üzerinde SQL Server’a erişimi olan kullanıcılar ve WinNT grupları yaratmak. WinNT gruplarını ve kullanıcılarını yönetme iznine sahip değilsen, WinNT administrator bu görevi senin için yapar.
5. WinNT gruplarına ve kullanıcılarına, SQL Server’a erişim izni vermek için SQL Server Enterprise Manager’I kullanmak.
6. Güvenli bağlantılar üzerinden bağlanamayan bütün kullanıcılar için server’a erişim izni vermek. Bir login ID ve şifre yarat ve herbir kullanıcı için geçerli bir lisan belirle.
Login Account’ları Yaratma
WinNT kullanıcılarından veya gruplarından login account’lar yaratılabilir veya yeni SQL Server login account’lar yaratılabilir. Ayrıca default login account’lardan biri de kullanılabilir.
Login ID, SQL Server tarafından bilinen bir kullanıcı ismidir. Login ID’ler ayrıca loginler olarak söz edilirler.
SQL Server’a log olmak için, bir kullanıcı, geçerli login ID ve şifre sağlamalı.
Login account’lar master..syslogins sistem tablosunda tutulur. Bir login SQL Server’a eklendiği zaman bu geçerli bir veritabanını görevlendirir. Default veritabanını login account’a verme, veritabanında bir kullanıcı account’u yaratmaz. Kullanıcı işlemleri için default bir context ayarlar. Kullanıcı account, login için yaratılmadıkça, (eğer varsa) guest kullanıcı account’u kullanılarak veritabanına erişebilir.
SQL Server’a WinNT Login’I Ekleme
SQL Server Enterprise Manager veya sp_grantlogin sistem stored procedure’I, WinNT kullanıcısının veya grup account’unun SQL Server’a bağlanmasına izin verir. Sadece güvenlik veya sistem administrator’I sp_grantlogin’I çalıştırabilir.
Syntax Sp_grantlogin {‘login’}
Login parametresi, eklenecek olan WinNT kullanıcı veya grup ismidir. WinNT kullanıcı veya grubu, bir WinNt domain ismi ile sınırlı olmalı. Kullanıcı veya grup ismi 128 karakter ile sınırlıdır.
SQL Server’a WinNT loginleri eklemek için, aşağıdaki adımlar göz önüne alınır.
1. SQL Server, bir WinNT grubu için tek bir login’e sahip olmasından dolayı, WinNT grup üyeleri değiştiği zaman SQL Server’a hiç bir değişiklik kabul edilmez. Bu durum orphaned object’leri engeller. (SQL Server’da bulunmayan kullanıcılara ait olan object’ler)
2. Çıkarılan WinNT grup veya kullanıcısı, SQL Server’dan çıkarılamaz. Bu orphaned object’lerin oluşumunu engeller.
WinNT grup veya kullanıcısı çıkarılacağı zaman, network erişimini engelleyecek şekilde ilk olarak WinNT’den çıkarılması gerekir. Daha sonra SQL Server’dan çıkarılmalı.
3. Tüm grup üyeleri SQL Server’a bağlanırsa, bir WinNT grup account’u için bir login account eklenir.
4. Eğer kullanıcı, izni onaylanmış bir grubun üyesi değilse, WinNT kullanıcı account’u için bir login account’u eklenir.
5. Kullanıcılar, WinNT gruplarının üyesi olarak, SQL Server’a log olsa bile, SQl Server hala kullanıcıların kimliklerini (tanımlarını) bilir. USER_NAME fonksiyonu, WinNT grubunun üyesi olan kullanıcıların kullanıcı domainini ve login ismini döndürür.
WinNT login account’ları yönetmek için aşağıdaki tablodaki sistem stored procedure’lar kullanılabilir.
Sistem Stored Procedure
Tanım
Sp_revokelogin
WinNT kullanıcısı ve ya grubu için SQL Server’dan login girişlerini kaldırır
Sp_denylogin
WinNT kullanıcısı ve ya grubunun SQL Server’a bağlanmasını önler.
Bir SQL Server Login’I Ekleme
SQL Server’da, veritabanı kullanıcı ismi, kullanıcının veritabanına erişmesi için, login ID olarak belirlenen bir isimdir. Bir kullanıcının işlevi, kullanıcı isimlerine verilen izinlere bağlıdır.
WinNT ‘de, bir kullanıcı ismi, WinNT bilgisayarı veya domain tarafından bilinen bir isimdir. Bir kullanıcının, domain veya bilgisayara girebilmesi için, kullanıcı ismine ve şifreye sahip olması gerekir. Kullanıcının işlevi, WinNT haklarına ve o kullanıcı için onaylanan izinlere ve üyesi olduğu WinNT grupalarına bağlıdır.
SQL Server login’I yaratmak için sp_addlogin sistem stored procedure’I veya SQL Server Enterprise Manager kullanılır. Bunu, sadece sistem veya güvenlik adminstrator’I çalıştırabilir.
Syntax sp_addlogin {‘login’} [,’password’ [,’database’]]
sp_addlogin, master veritabanının, syslogins tablosuna bir kayıt ekler. sp_addlogin çalıştırıldıktan sonra, kullanıcı, bu account’la SQL Server’a log olabilir. Kullanıcılar şifrelerini sp_password kullanarak değiştirebiliyorlar.
SQL Server login’lerive şifreleri 128 karaktere kadar olabilir ve bu karakterler büyük harfler, semboller, rakamlar içerebilir. Fakat login’ler aşağıdakileri içermez:
· Backslash karakterini
· Varolan bir login account’u - sa gibi
· Boşuk karakterini
Sistem administratorları, kullanıcının şifresini, eski şifre yerine NULL koyarak değiştirebilir.
Default Login Account’lar
SQL Server iki default login account’a sahip. Bunlar sa, BULTIN\Administrators:
Sa
SQL Server üzerindeki ve bütün veritabanlarındaki tüm haklara sahip olan özel bir logindir. (Sistem administrator). Sa, temel uygulamalardan bağımsız olan yönetimsel ve işlemsel fonksiyonlardan sorumludur.
SQL Server’I yönetme, SQL Server’I kurma, server’ları ve client’ları konfigüre etme, kullanılan diske alanını, belleği ve bağlantıları denetleme ve yönetme, aygıtları ve veritabanlarını yaratma, SQL Server kullanıcılarını yetkilendirme ve izinlerini onaylama, veri transferi yapma, veritabanlarını yedekleme ve açma, kopyalamayı tamamlama, SQL Server performansını denetleme, sistem problemlerini teşhis etme işlemlerini yapabilir. Ayrıca sa, SQL Server’da varolan veri hakkında, uygulama tasarımcısına (application designer) tavsiye verir.
Sa, SQL Server sistem yöneticisinin kontrol etmesine izin vermediği koruma sisteminin haricinde işletir. Sa, ayrıca veritabanı sahibi olarak düşünülür. Sa şifresi bilinirse, sisteme onun hakları ile girilebilir.
Builtin/Administrators
Tüm WinNT yöneticileri için, default login account olarak sağlanır. SQL Server üzerindeki ve bütün veritabanlarındaki bütün haklara sahiptir.
Kullanıcılara ve Rollere Login’ler Belirleme
SQl Server’a loginler ekledikten sonra, bunlar, kullanıcıların erişmek istedikleri veritabanlarındaki, kullanıcı account’lara ve rollere map edilir.
Bir veritabanındaki sysusers sistem tablosu, herbir WinNT kullanıcısı, WinNT grubu, SQL Server kullanıcısı veya rolü için bir row içerir. İzinler, sysusers tablosundaki loginlere uygulanır ve sysprotects tablosunda tutulur.
Örneğin; WinNT payroll grubunun üyesinin northwind veritabanına erişimi onaylanır. Maria SQL Server’ bağlandıktan sonra aşağıdakilere sahip olur:
· Geçerli bir bağlantıya sahiptir; çünkü WinNT kullanıcı account’u, WinNT payroll grubunun içindedir.
· Northwind veritabanındaki hiçbir izne sahip değildir. Sadece payroll grubu izinlerine sahiptir.
Kullanıcı Account’lara Loginler Belirleme
Bir veritabanına erişmek için, bir login ya belirlenmiş kullanıcı account’unu ya da default kullanıcı account’unu kullanır.
Kullanıcı Account’u Ekleme
Bir kullanıcı account’u eklemek için sp_grantdbaccess sistem stored procedure’u veya SQL Server Enterprise Manager çalıştırılmalı. Sadece dbo ve database access administratorlar çalıştırabilir.
Syntax sp_grantdbaccess {‘login’} [,’name_in_db’]
Login parametresi, veritabanındaki yeni account için login ismidir. Bu WinNT kullanıcısı, WinNT grubu veya SQL Server kullanıcısı olabilir.
Name_in_db parametresi veritabanındaki account için seçimlik bir isimdir. Aşağıdaki sistem stored procedure’ler veritabanı erişimini yönetmek için kullanılır.
Sistem Stored Procedure
Tanım
Sp_revokedbaccess
Geçerli veritabanından bir güvenlik account’unu kaldırır.
Sp_change_users_login
Geçerli veritabanındaki, SQL Server login ve SQL Server user arasındaki ilişkiyi kaldırır.
Default Kullanıcı Account’lar
Default kullanıcı account’lar, ikiye ayrılır: dbo ve guest olarak.
DBO Account
Sa login ve sysadmin rol üyeleri, tüm veritabanları içerisindeki özel kullanıcı account’una map edilir. Bu dbo olarak adlandırılır. Sistem administrator’ın yarattığı nesneler otomatik olarak dbo’ya bağlanır. Dbo kullanıcısı kaldırılamaz. Database owner (DBO) veritabanı yaratıcısıdır. Sadece bir DBO vardır. DBO veritabanı içindeki bütün ayrıcalıklara sahiptir ve diğer kullanıcılara erişim ve yetenek sağlar.
Kullanıcı, kendi veritabanında, DBO olarak tanınır. Başka veritabanlarında DBO, kendi veritabanı kullanıcı ismi ile bilinir.
DBO özelliği, farklı kullanıcıya verilebilir. Diğer login ID’ler DBO’ya alias olabilmelerine rağmen, sadece bir login ID, DBO olabilir.
Guest User Account
Guest User Account, kullanıcı account’u olmadan loginlerin veritabanına erişmesine izin verir. Aşağıdaki her iki durumla da karşılaşıldığında, loginler guest user kimliğini üstlenir.
q Loginin, SQL Server’a erişimi var ama kendi user account’u yoluyla izni yok.
q Veritabanı bir guest user account içerir.
Master ve tempdb veritabanları hariç herhangi bir veritabanına guest user eklenebilir ve veritabanından kaldırılabilir.
Eğer guest user, başka user account’uysa, izinler guest user’a uygulanır.
Rollere Loginler Belirleme
Roller, kullanıcıları izinlerin uygulandığı tek parçalar içinde birleştirmektir.
SQL server , çok kullanılan administrative fonksiyonlar için predefined server ve veritebenı rolleri sağlar. Böylece seçilmiş administrative izinler belirli kullanıcılara kolayca verilebilir.
Organizasyonunuzdaki işçilerin yaptıkları işleri temsil etmek için kendi veritabanı rollerinizi yaratabilirsiniz. Onları rol üyesi olarak basitçe ekleyebilir ve kaldırabilirsiniz. İşçiler , Çalışmaya başladıklarında veya çalışma ortamını terk ettiklerinde , izinler tekrar tekrar onaylanmaz ve iptal edilmez. Pozisyon değişirse , rol için izinlerin değiştirilmesi çok kolaydır. Böylece tüm rol üyeleri içinde otomatik olarak değişirler.
Fixed Server Roles
Fixed Server Roller , server seviyesindeki administrative ayrıcalıkları sağlar. Bunlar , server seviyesindeki kullanıcı veritabanlarına bağlı olmadan yönetilirler , ve master syslogins sistem tablosunda tutulurlar.
Role
İzin
Veritabanı yaratıcıları (dbcreator)
Veritabanlarını yaratır ve değiştirir.
Disk Yöneticileri (diskadmin)
Disk dosyalarını yönetir.
Process Yöneticileri (processadmin)
SQL Server Processleri yönetir.
Güvenlik Yöneticileri (securityadmin)
Server loginleri yönetir ve audit eder (denetler).
Server Yöneticileri (serveradmin)
Server-wide ayarlarını yapar
Setup Yöneticileri (setupadmin)
Kopyayı kurar.
Sistem Yöneticileri (sysadmin)
Herhangi bir aktiviteyi yerine getirir.
Fixed Rol’e Bir Login Account Belirleme
Fixed Server üyesi olarak bir login account eklemek için SSEM veya sp_addsrurolemember kullanılır.
Syntax sp_addsrurolemember login , role
Server Rol’e bir login eklendiği zaman , login’in rol üyesi olduğunu göstermek için sysloins tablosundaki uygun row güncellenir , ve server rol’e bağlı izinlere sahip olur.
Fixed Server Rol’e login account’lar belirlemek için aşağıdaki adımları gözönüne alalım:
· Fixed server Roller eklenemez , değiştirilemez veya kaldırılamaz.
· Herhangi bir fixed server rol üyesi , role başka login account’lar ekleyebilir.
· Sp_addsrvrolemember , kullanıcı tanımlı bir işlemle çalıştırılamaz.
ÖRNEK :
Sysadmin server rolüne , Win NT Kullanıcısı Corporote\Elenos eklemek için:
EXEC sp_addsrvrolemember ‘Corporote\Elenas’ , sysadmin
Ayrıca , sp_dropsrvrolemember kullanılarak fixed server role’den bir üye kaldırılabilir.
Fixed Database Rolleri
Fixed database rol’leri veritabanı seviyesindeki administrative ayrıcalıklarını sağlar. Fixed database rolleri , herbir veritabanındaki sysusers sistem tablosu içinde tutulur.
Role
İzin
Public
Bir veritabanındaki kullanıcılar için tüm geçerli olan izinleri sağlar.
Db_owner
Herhangi bir veritabanı rolü aktivitesini icra eder
Db_accessadmin
Veritabanı kullanıcılarını, grupları, ve rolleri ekler veya kaldırır.
Db_ddladmin
Veritabanı nesnelerini ekler, değiştirir veya kaldırır.
Db_securityadmin
Statement ve nesne izinlerini belirler.
Db_backupoperator
Veritabanını yedekler ve açar.
Db_datareader
Herhangi bir tablodan veri okur.
Db_datawriter
Veri ekler, değiştirir veya bütün tablolardan veri siler.
Db_denydatareader
Herhangi bir tablodan veri okumaz.
Db_denydatawriter
Herhangi bir tablodan veri değiştirmez.
Public Rol
Public rol , veritabanı kullanıcılarına özel bir veritabanı rolüdür.
Public Rol
· Veritabanındaki kullanıcılar için tüm default izinleri denetler.
· Ona görev verecek kullanıcılara , gruplara veya rollere sahip değildir. Çünkü bunlar zaten ona bağlıdır.
· Master , msdb , tempdb , model ve tüm kullanıcı veritabanlarının içinde bulunur.
· Kaldırılamaz
Uygun izinler olmadan , bir kullanıcı SQL server’a bağlanabilir ama sadece sınırlandırılmış task’ları çalıştırabilir. İzinler olmadan , bir kullanıcı , public role verilmiş izinlere sahip olabilir ve aşağıdakileri yapabilir:
· PRINT ifadesi gibi , izine sahip olmayan statement’leri çalıştırma
· Sistem tablosu bilgilerini inceleyebilir ve master veritabanından ve kullanıcı veritabanından bilgi almak için belirli sistem stored procedure ‘leri çalıştırabilir.
· Guest access ile herhangi bir veritabanına erişebilir.
Fixed Database Rol’e Güvenlik Account ‘ları Belirleme
Fixed veritabanı rolünün üyesine bir güvenlik account ‘u eklemek için SSEM veya sp_addrolemember kullanılır. Sadece db_owner rolünün üyeleri , sp_addrolemember’I çalıştırabilir. Role owner’lar kendi rollerine üye eklemek için sp_addrolemember’I çalıştırır.
Syntax sp_addrolemember role , security_account
Fixed role güvenlik accuntları belirlenirken aşağıdaki adımlar göz önüne alınır:
· Fixed database roller , eklenemez , değiştirilemez veya kaldırılamaz.
· Herhangi bir fixed database rolünün üyesi , olarak başka login accountlar ekleyebilir.
Ayrıca bir rol’den, güvenlik account’unu kaldırmak için sp_droprolemember kullanılır.
Kullanıcı Tanımlı Veritabanı Rolleri
Kullanıcı Tanımlı veritabanı rolleri yaratma, ortak izinlere sahip kullanıcı gruplarını yaratmaya olanak sağlar. Bir veritabanına kullanıcı tanımlı rol ekleme aşağıdaki nedenlere bağlıdır:
q Eğer WinNT kullanıcı account’larını yönetme iznine sahip değilsek
q İnsanların SQL Server’daki belirlenmiş aktiviteleri çalıştırmaya ihtiyaçları olduğu zaman ve uygun olmayan WinNT grubu varsa, kullanıcı tanımlı rol eklenir.
Örneğin bir şirket farklı departmanlardan çalışanları içeren yeni bir komite oluşturabilir. Bu çalışanlar veritabanındaki özel bir proje tablosuna erişime ihtiyaç duyabilirler. Bunun için kullanıcı tanımlı rol tanımlanabilir ve sonra role özel WinNT kullanıcı account’u eklenebilir. İzinler uygulamaya konduğu zaman roldeki özel kullanıcı accountları tablo erişimine ulaşır.
Kullanıcı Tanımlı Veritabanı Rolü Yaratma
SQL Server Enterprise Manager veya sp_addrole sistem stored procedure ile yeni bir veritabanı rolü yaratılabilir. Herbir kullanıcı tanımlı rol için, geçerli veritabanının sysusers tablosuna bir giriş eklenir. Sadece security admin ve dbo üyeleri sp_addrole sistem stored procedure’ı çalıştırabilir.
Syntax sp_addrole role, owner
Veri tabanı rolü yaratmak için aşağıdaki adımları inceleyelim:
# Sp_addrole sistem stored procedure, geçerli veritabanına yeni bir SQL Server rolü ekler
# Role izinler uygulandığı zaman, sanki izin üyenin kendi account’una uygulanmış gibi, herbir rol üyesi izinleri elde eder.
Örnek: dbo kullanıcısı tarafından, Managers isimli yeni bir rol eklemek için aşağıdaki ifade çalıştırılmalı.
EXEC sp_addrole Managers, dbo
Kullanıcı Tanımlı Veritabanı Rolüne Bir Güvenlik Account’u Belirleme
Bir rol eklendikten sonra, SQL Server Enterprise Manager veya sp_addrolemember sistem stored procedure kullanılarak, rol üyesi olarak kullanıcılar ve roller eklenbilir. Sadece db_owner, fixed database rol üyeleri, fixed database rollerine üye eklemek için sp_addrolemember sistem stored procedure’I çalıştırabilir.
Syntax sp_addrolemember role, security_account
Örnek: Managers rolüne, Alicia kullanıcısını eklemek için, aşağıdaki ifade çalıştırılır:
EXEC sp_addrolemember Managers, Alicia
Fixed database rol’e güvenlik account’ları belirlendiği zaman aşağıdaki adımlar göz önüne alınır.
· sp_addrolemember ile role bir güvenlik account’u eklendiği zaman, role uygulanan izinler yeni üyeye de uygulanır.
· Aynı security_account farklı rol üyelerine verilemez.
· Nesting roller sistem performansını düşürür.
Veritabanı rollerinin yönetimi için aşağıdaki ek stored procedure’lar kullanılabilir.
Sistem Stored Proocedure
Tanım
Sp_droprole
Geçerli veritabanından SQL Server rolünü kaldırır.
Sp_droprolemember
SQL Server rolünden bir security account kaldırılır.
Kullanıcılara ve Rollere İzinler Belirlemek
Kullanıcı account’lara ve rollere loginler belirlendikten sonra, veritabanı güvenliğini yönetmek için izinler belirlenmeli.
İzinler, kullanıcıların hangi tip veritabanı nesnelerini kullanabileceğini ve bunları ne şekilde kullanabileceğini belirlerler. Kullanıcılara veya gruplara verilen izinler çok önemlidir.
İzin Tipleri
SQL Server veritabanı güvenliğini yürütmek için izinleri kullanır. SQL Server, Transact-SQL ifadelerinin, view’ların, ve stored procedure’lerin kullanılması için yetki verir. İzinler herbir kullanıcının durumuna bağlı olarak (sa, dbo, database object owner olarak).
SQL Server’da 3 tip izin var. statement, object ve predefined.
Statement
Object
Predefined
Create Database
Select
Fixed Role
Create Table
Insert Table
Object Owner
Create View
Update View
Create Procedure
Delete
Create Index
Select
Create Rule
Update Column
Create Default
References
Exec Stored Procedure
Statement İzinleri
Belirli Transact-SQL ifadeleri ile ilgili ayrıcalıkları kullanıcılara verir. Veritabanı veya item yaratma ile ilgili aktiviteler statement izinler olarak adlandırılır. Sysadmin, dbo, securityadmin rolleri statement izinleri verebilir. Statement izinleri, belirli Transaction-SQL ifadelerini işlemek için ayrıcalık sağlar. Statement izinleri, nesneye özgü değildir. Bunlar sysadmin, db_owner, veya db_securityadmin tarafından onaylanırlar.
Statement izinleri, şu ifadeleri uygular: CREATE DATABASE, CREATE DEFAULT, CREATE PROCEDURE, CREATE RULE, CREATE TABLE, CREATE VIEW, DUMP DATABASE, ve DUMP TRANSACTION. Ayrıca komut izinleri olarak da adlandırılırlar.
Object İzinleri
Verilerle çalışma veya procedure’leri çalıştırma izinleri verir. Belirli veritabanı nesneleri üzerindeki belirli ifadelerin kullanımını denetler. Bunlar DBO tarafından onaylanır ve iptal edilirler.
Tablo ve View İzinleri
SELECT, INSERT, UPDATE, DELETE ifadelerini kullanmaya izin verir.
Column İzinleri
SELECT, UPDATE ve REFERENCES izinleri belirli kolonlara uygulanabilir. Bir kullanıcı FOREIGN KEY constraint ile bir tabloya bir satır eklediği zaman veya FOREIGN KEY constraint ile bir sütundaki veri değiştirildiği zaman, SQL Server FOREIGN KEY constraint’teki referans edilmiş veri ile sütun içindeki veriyi onaylar. Eğer kullanıcının referans edilmiş sütun veya tabloda SELECT izinleri yoksa kolon için REFERENCES izinleri kullanıcıya verilmiş olmalı.
Stored Procedure İzinleri
EXECUTE izni, stored procedure için sadece nesne iznidir.
Predefined İzinler
Sadece fixed rol üyeleri veya db_owner’larbelirli aktiviteleri yerine getirebilirler. Bu aktiviteleri yerine getiren izinler, predefined izinler olarak adlandırılırlar.
Object Owner İzinleri
Kendi yarattıkları nesnelerin, aktivitelerini yerine getirmeye izinli olurlar. Table owner olan bir kullanıcı, tablo ile ilgili bütün aktiviteleri yerine getirebilir. Bu tablo ile çalışan kullanıcılara, ekleme, silme, değiştirme, tablo tanımlama izinleri verir.
Fixed Role İzinleri
Fixed roller yönetimsel izinlere sahiptirler. Örneğin; sysadmin rolünün bir üyesi olarak eklenen kullanıcı, SQL Server kurulumundaki herhangi bir şeyi yapmak veya okumak için bütün izinlere sahiptir. Sysadmin rolü değiştirilemez ve başka bir user account’a verilemez.
Granting, Denying, Revoking (Onaylama, Engelleme, İptal Etme) İzinleri
Rol veya kullanıcı için izinler 3 durumludur. Bunlar onaylama, engelleme, iptal etmedir. İzinler kullanıcıya onaylanmazsa veya engellenmezse, sanki iptal edilmiş gibi olur. İzinler sysprotects sistem tablosunda tutulurlar.
Statement
Sysprotects tablosunda giriş durumu
Tanım
GRANT (Onaylama)
Pozitif
Hareketi yerine getirebilir.
DENY (Engelleme)
Negatif
Hareketi yerine getiremez ve rol üyesi tarafından önemsenmez.
REVOKE (İptal etme)
Hiçbiri
Hareketi yerine getiremez ama rol üyesi tarafından önemsenir.
Tüm onaylanmış izinler kümülatiftir. Hareketler onaylandığı zaman kullanıcılar tarafından icra edilebilirler.
DENY ifadesi kullanıcıların hareketleri icra etmesini önlerler. İzinlerin kullanıcılara doğrudan onaylanıp onaylanmadığını önemser.
Aşağıdakiler gerçekleşirse, kullanıcılar bir hareketi yapmaya izinli olurlar:
q Kullanıcılar izinleri onaylarlarsa ya da bağlı oldukları rol izinleri onaylarsa
q İzin kullanıcıya yada kullanıcının bağlı olduğu rollerden birine engellenmezse
Erişime Müsaade Ederek İzinleri Onaylama
GRANT SELECT
ON products
TO order
GRANT INSERT, UPDATE
ON products
TO Eva, Ivan, David
İzinler, veri ile çalışmaya veya aktiviteleri çalıştırmaya izin vermek için security account’lara uygulanır.
İzinler onaylanırken aşağıdaki adımlar göz önüne alınmalı.
Ø Sadece, geçerli veritabanında izinler onaylanabilir.
Ø Sysadmin, db_owner ve db_securityadmin rollerine ve object owner’lara izinleri onaylama hakkı verilmiştir.
İzinler SQL Server Enterprise Manager veya GRANT ifadesi ile onaylanır.
Aşağıda bir örnek görülmektedir.
USE northwind
GO
GRANT SELECT
ON products
TO order
GO
GRANT INSERT, UPDATE, DELETE
ON products
TO Eva, Ivan, David
GO
Yukarıdaki örnekte; Order isimli role SELECT izni verilmiş. Bundan sonra ek izinler birkaç kullanıcıya verilmiş (Eva, Ivan, David). (Zaten insert, update izinlerine sahipler. Select iznine sahip değiller. Ayrıca select iznine de order rolü tarafından sahip olurlar.) Products tablosu üzerindeki bütün izinlere sahipler; çünkü onlar ayrıca order rolünün üyesiler.
Erişimi Engelleyerek İzinleri Engelleme
DENY SELECT, INSERT, UPDATE
ON products
TO Eva, Ivan, David
Belirli kullanıcı veya rollerin izinleri sınırlanmak istenebilir. Bir security account’a izinleri engelleme:
v Kullanıcı veya role önceden onaylanmış izinleri kaldırır
v Başka rolden miras alınmış (inherit) izinlerin aktifliğini bozar
v Gelecekte Kullanıcı veya rolün herhangi bir rolden izinleri miras almayacağından emin olur
İzinler engellendiği zaman aşağıdaki adımlar göz önüne alınmalı:
· Sadece geçerli veritabanındaki iznler engellenebilir.
· Sysadmin, db_owner ve db_securityadmin rol üyelerine ve object owner’lara izinleri engelleme hakkı verilmiştir.
İzinleri engellemek için, SQL Server Enterprise Manager veya DENY ifadesi kullanılabilir.
USE northwind
GO
GRANT SELECT
ON products
TO order
GO
DENY SELECT, INSERT, UPDATE
ON products
TO Eva, Ivan, David
Yukarıdaki örnekte; Order isimli role SELECT izni verilmiş. Bundan sonra rol üyesi birkaç kullanıcının (Eva, Ivan, David) products tablosuna erişimleri engellenmiş.
Onaylanmış ve Engellenmiş İzinleri İptal Etme
REVOKE SELECT, INSERT, UPDATE
ON products
FROM Eva, Ivan
İptal etme ile onaylanmış veya engellenmiş izinler etkisiz hale getirilebilir. İptal Etme, iki hareket içinde benzerdir. Farklılık bir izni iptal etme, onaylanmış izinleri kaldırırken, kullanıcının veya rolün, izinleri miras almasına (inherit) engel olamaz. Ayrıca DENY ifadesi iptal edilerek, önceki engellenmiş izinler de kaldırılabilir. İzinler iptal edilirken aşağıdaki adımlar göz öüne alınmalı:
· Sadece geçerli veritabanındaki iznler iptal edilebilir.
· Bir izni iptal etme, onaylanmış ve engellenmiş izinler tarafından yaratılan sysprotects sistem tablosuna girişleri kaldırır.
· Sysadmin, db_owner ve db_securityadmin rol üyelerine ve object owner’lara izinleri engelleme hakkı verilmiştir.
Önceki onaylanmış ve engellenmiş izinleri iptal etmek için, SQL Server Enterprise Manager veya REVOKE ifadesi kullanılabilir.
USE northwind
REVOKE SELECT, INSERT, UPDATE
ON products
FROM Eva, Ivan
Yukarıdaki örnek çoklu kullanıcılardan çoklu statement (Select, insert, update gibi) izinleri iptal eder.
Güvenliği Planlama
Güvenlik planlanırken 5 ana madde göz önüne alınmalı.
1. Geçerli Login Kullanıcıları Tanımlamak
Sa veya BUILTIN\Administrators Login’inin kullanılıp kullanılmayacağı veya nasıl kullanılacağı belirlenmeli.
Sa Login
Sa bir built- in administrator login olmasına rağmen rutin olarak kullanılmaz. Sistem yöneticisi sysadmin fixed server rol üyesi olmalı ve kendi loginleriyle log olmalı.
Not: SQL Server kurulduğu zaman, sa loginin bir şifresi bulunmaz. Sa loginle, SQL Server’a, yetkisiz kişilerin erişimini engellemek için şifrenin hemen değiştirilmesi önerilir.
BUILTIN\Administrators Login
BUILTIN\Administrators WinNT yöneticileri için sysadmin rolünün bir üyesidir.
Kendi organizasyonunda SQL Server’a tam erişim sağlamak için WinNT yöneticilerinin tamamını istemezsen, BUILTIN\Administrators logini kaldırabilirsin veya sysadmin rolünden kaldırabilirsin. İstenirse login eski yerine konabilir ve izinleri belirlenebilir.
2. Guest User Account Fonksiyonlarını Belirlemek
Guest User Account veritabanına kullanıcı account’u olmadan erişen bir logine izin verir. Veritabanının bir Guest User Account’unun olup olmayacağına karar vermeli. Eğer olacaksa veritabanlarında hangi izinlere sahip olacağı belirlenmeli.
3. Public Rol İzinlerini Belirlemek
Public rol, özel bir veritabanı rolüdür. Her bir veritabanında kullanıcının sahip olduğu izinleri kontrol eder. Herbir veritabanında public rol’ün sahip olacağı izinlere karar verilmeli. Başta public rolün izinleri yoktur.
4. Loginleri Kullanıcı Account’lara ve Rollere Map Etmek
Veritabanına login’ler belirlenmeden önce, bir kullanıcı account’un veya bir rolün kullanılıp kullanılmayacağını belirlemek gerekir. Genelde; aşağıdakiler önerilir.
q Eğer WinNT grup üyelerilerinden sadece biri görevleri icra edebilirse, grup için kullanıcı account’u yaratabilir ve bunlar için izinler kullanabilirler.
q Eğer birden fazla login görevleri icra edebilirse, bir rol yaratabilir ve rol’e login belirleyebilirler.
q Eğer bir login ortak yönetimsel görevleri icra ederse, veritabanı rolüne veya fixed server’a login map edilir.
5. DBO ile Nesneler Yaratmak
Hangi kullanıcıların veya rollerin nesneler yaratabileceğini belirlemek çok önemlidir. Sadece sysadmin, db_owner ve db_ddladmin fixed veritabanı rolleri, veritabanı nesneleri yaratabilirler. Bütün nesneler object owner olarak, dbo kullanıcısıyla tanımlanır. Dbo ile nesne tanımlama, kullanıcların owner ismi içermeyen nesnelerden söz etmesine olanak sağlar. Aksi taktirde nesne, object owner olarak kullanıcı ismiyle yaratılır. Sysadmin rolden yaratılan herhangi bir rol dbo’ya sahiptir.
Nesne Owner’ları Değiştirme
Veritabanı nesneleri, tablolar, indexler, view’lar, default’lar, trigger’lar, rule’lar ve procedure’lerdir. Veritabanı nesnesi yaratan kullanıcı, database object owner olarak adlandırılır ve otomatik olarak nesneler üzerindeki bütün haklara sahiptir. Nesneyi kullanmaları için diğer kullanıcılara izin verebilirler. Database object sahipliği devredilemez.
Eğer nesneler dbo ile yaratılmamışsa, sp_changeobjectowner sistem procedure ile object owner’lar değiştirilebilir.
Syntax sp_changeobjectowner object, owner
Dbo owner’ları değiştirmek için, aşağıdaki adımlar göz önüne alınabilir.
¨ Sadece db_owner ve db_ddladmin fixed veritabanı rolleri ve securityadmin server rol üyeleri nesne owner’ları değiştirebilirler.
¨ Bir veritabanının owner’ını değiştirme, yeni ownership bilgisiyle güncellenen nesneyi referans eden scriptleri ve batch file’ları gerektirir. SQL Server bu güncellemeyi otomatik olarak icra edemez.
Application Güvenliğini Yönetme
İzinler ve Login authentication kullanılarak, veritabanına erişim güvence altına alınabilir. Method olarak stored procedure’lar, view’lar ve application roller kullanılabilir.
View’lar ve Stored Procedure’larla Güvenliği Yönetme
View’lar ve stored Procedure’lar bir uygulama için yaratılmış olan SQL Server nesneleriyle birlikte güvenliği kurmaya izin verir.
View’lar ve stored Procedure’lar, ilgili oldukları nesneler üzerindeki izinler yerine sadece View’lar ve stored Procedure’lar üzerindeki izinleri yönetme imkan sağlar. Ayrıca kullanıcıları, tablo değişikliklerine karşı korur.
Güvenliği basitleştirmek için view’ları ve stored procedure’ları kullanmak:
ü Underlying tablolar üzerindeki izinler olmadan, bir view üzerindeki izinleri onaylar
Örneğin; bir tablodaki doğum tarihi gizli olsun. Kullanıcıların erişimleri engellensin. Ayrıca kullanıcılar tablodaki diğer kolonlara erişebilmeliler. Doğum tarihi hariç diğer kolonları içeren bir view tanımlanır. View’a select izni vererek kullanıcıların gizli olmayan kolonlara erişimleri sağlanır.
ü Değiştirilmiş tabloya erişim onayı vermeden stored procedure’I çalıştırma izinlerini onaylar.
Örneğin eski veri, arşiv tablosuna kopyalanır ve daha sonra primary tablosundan silinir. Kullanıcılara, doğrudan primary tablosundan bir row silme veya bunları primary tablosundan silmeden,arşiv tablosuna bir row ekleme izni verilmez. Bir stored procedure yaratılarak her iki aktivite de birlikte çalıştırılabilir. Daha sonra kullanıcılara stored procedure’ları çalıştırma izni verilir.
Aşağıdaki örnek bir view yaratır. Employee tablosundan employee bilgilerini yeniden alır ama birthdate ve homephone gibi verileri hesaba katmaz.
CREATE VIEW employee_view AS
SELECT FirstName, LastName, Title, Extension
FROM employees
Application Rollerini Kullanarak Client Application Güvenliğini Yönetme
Uygulama rolleri, özel bir uygulama için güvenliği yürütmeye izin verir. Bunlar dolaylı yollardan veriye erişim için kullanıcıları sınırlar.
Örneğin; order entry clerklerin, sadece Order entry uygulamasını kullanırken products, orders, customer tablolarını güncelleyebilmesi istenebilir. Microsoft Excel gibi başka bir üründeki tablolara erişen clerkler istenmeyebilir. Bu durumda; order entry uygulaması için bir uygulama rolü yaratılabilir.
Uygulama rolleri diğer rollerden farklıdır. Aşağıda diğer rollerle, uygulama rolleri arasındaki farklılıklar
listelenmiştir.
· Application rollerin, kullanıcı uygulamayı çalıştırdığı zaman kullanıcılar için aktifleştirilen, üyeleri yoktur. Bu, uygulama kullanıcılarına özel haklar verir.
· Uygulama rolleri, aktif olabilmek için bir şifre isterler. Application rol şifresinin güvenliğini korumak için basit encrypt anahtarlar kullanılabilir. Ayrıca extended stored procedure kullanılarak şifre server’a yerleştirilebilir.
· Aktif uygulama rolü, kullanıcının veritabanındaki diğer izinlerini umursamaz. SQL Server kullanıcı account veya rollerin sahip olduğu izinleri göz önüne almaz.
Uygulama Rolleri Yaratma
EXEC sp_addapprole SalesApp, hg_7532LR
GRANT SELECT
ON products
TO SalesApp
Application roller yaratılabilir ve bunlara izinler belirlenebilir.
Uygulama Rolleri Yaratma
Yeni bir uygulama rolü yaratmak için, SQL Server Enterprise Manager veya sp_addapprole stored procedure kullanılır. Sadece db_owner, db_securityadmin, ve sysadmin rollerinin üyeleri sp_addapprole stored procedure’ı çalıştırabilirler.
Syntax sp_addapprole role, password
Yeni uygulama rolleri yaratmak için aşağıdaki adımlara dikkat etmek gerekir.
§ sp_addapprole sistem stored procedure’ü yeni rol için, bir güvenlik account’u ekler. Bu durum, sysusers tablosuna bir kayıt eklemeyle yapılır.
§ Password değeri bir şifredir. Rolü aktif yapmak için istenir ve encrypt edilmiş forma dönüştürülür.
Aşağıdaki örnek SalesApp isimli ve şifresi hg_7532LR olan yeni bir uygulama rolü ekler.
EXEC sp_addapprole SalesApp, hg_7532LR
Application Rol İzinlerini Yönetme
SQL Server Enterprise Manager veya GRANT, DENY, ve REVOKE ifadeleri ile uygulama rol izinleri yönetilir.
Aşağıdaki örnek product tablosundan seçmek için SalesApp uygulama rolüne izinler verir.
GRANT SELECT
ON products
TO SalesApp
Uygulama Rollerini Aktif Hale Getirmek
Bir client, SQL Server’a herhangi bir login account’u ile bağlandıktan sonra, client, application rolüyle birleşmiş izinleri aktif hale getirmek için, sp_setapprole sistem stored procedure’ını çalıştırır. sp_setapprole sadece Transact-SQL ifadeleriyle çalıştırılabilir.
Syntax sp_setapprole {‘name’, ‘password ’}
Uygulama Rollerini aktif hale getirmek için aşağıdaki adımlara dikkat edilir.
v Geçerli uygulama, şifre sağlamalı.
v Eğer kullanıcılar veritabanını değiştirirlerse, izinlere dayanan aktiviteleri icra etme hakkına sahip olurlar.
v Bir uygulama rolü sp_setapprole ile aktifleştirildikten sonra, kullanıcılar SQL Server’dan kopana kadar rol aktif haldedir.
Aşağıdaki örnek; adı SalesAppRole ile şifresi AsDeFXX olan bir uygulama rolünü aktif hale getirir;
EXEC sp_setapprole ‘SalesAppRole’, ‘AsDeFXX’Sistem Stored Procedure
Tanım
Sp_dropapprole
Geçerli veritabanından uygulama rolünü kaldırır.
Sp_approlepassword
Bir application rolünün password’ünü değiştirir.
Tavsiye Edilen Uygulamalar
Güvenlik tamamlanırken aşağıdaki tavsiyeler dikkate alınmalı:
i. Network ortamı sadece güvenli hale getirilmiş client bağlantılarını desteklerse, WinNT authentication modu kullanılır. Mixed Modu sadece güvenli olmayan client’lara bağlanmak için kullanılır.
ii. Sa login yerine sistem yöneticileri (sysadmin) rolünü kullan. Sa login, WinNT authentication kullanılsa bile SQL Server’a local olarak log olmak için kullanılır. Bu, sysadmin role’den yanlışlıkla tüm kullanıcılar kaldırılırsa, yararlı olabilir.
iii. WinNT kullanıcıları veya grupları kaldırılırken, ilk olarak network erişimi engellenerek WinNT’den kaldırılır. Daha sonra SQL Server’dan kaldırılır.
iv. Bütün nesneler, kolayca erişilebilir olmaları için dbo kullanıcılarıyla yaratılırlar.
Güvenliği sağlamak için Stored procedure’leri ve view’ları kullanma, column-level güvenliğinden çok daha hızlı olabilir.