Veritabanı Seviyesinde Kullanıcı Yetkisinin Yapılandırılması, Server Seviyesinde Kullanıcı
Yetkisinin Yapılandırılması, Veritabanı Kullanıcısı Yönetimi, Sistem Fonksiyonları,
Kullanıcı ve Login Bilgileri Kontrolü
Veritabanı Seviyesinde Kullanıcı Yetkisinin Yapılandırılması
Sql Server’da kullanıcıya Server Roles verilmesi birçok yetkiyi de beraberinde getirir.
Kullanıcı sadece istenen veri tabanlarında yetki istediği zaman, login özelliklerinden
User Mapping sekmesinden istenen yetkiler atanabilir.
SSMS – Security – Logins kullanıcının properties sayfası açılır. User Mappings sekmesine
gelip, hangi veritabanında nasıl bir yetki isteniyor ise “Database role membership for:
<veritabanı_adi>” bölümünden ilgili yetkiler işaretlenir.
“Map” checkbox’I ile hangi veritabanında yetki verilecekse seçilir. Map seçildikten sonra
yetkiler açılır. User otomatik olarak gelir, istenirse “Default Schema” dan varsayılan
şema seçilebilir.
Veritabanı map edildikten sonra “ Database role membership for: “ alanından ilgili yetkiler
seçilir. Database rolleri nedir, bunları inceleyelim.
Database Roles:
Db_accessadmin: Veritabanına erişim için yetki verir.
Db_backupoperator: Veritabanının yedek alması için yetki verir. Sistem yöneticilerine
yedek alınan 3. Parti bir yazılımda kullanılmak üzere bu yetki verilebilir.
Db_datareader: Tablolardaki verileri okuma yetkisi verir. Sadece Select sorgusu kullanan
ve Self Service raporlaama yapan son kullanıcılara bu yetki verilebilir.
Db_datawriter: Tablolardaki verileri düzenleme, silme veya ekleme yetkisi verir. Server
bazında yetki kısıtlanarak farklı programlardaki farklı kullanıcılara bu yetki verilebilir.
Db_ddladmin: Veritabanı üzerinde DDL (Data Definition Language) komutlarını çalıştırma
izni verir.
Db_denydatareader: Veritabanı üzerinde okuma işlemi yetkisini engeller.
Db_denydatawriter: Veritabanı üzerinde değiştirme, ekleme ve silme yetkisini engeller.
Db_owner: Veritabanı üzerindeki tüm yapılandırma ve bakım yetkilerini verir. Veritabanını
drop etme yetkisine sahiptir. Owner, sahip anlamına gelmektedir.
Db_securityadmin: Veritabanı üzerindeki üyelikleri ve izinleri yönetme yetkisidir.
Server Seviyesinde Kullanıcı Yetkisinin Yapılandırılması
Sql Server’da kullanıcılara yetki verme ve yetki kısıtlamaları detaylı olarak sunulmuştur.
Doğru yapılandırıldığında sistem güvenliği daha da artaracaktır. Veritabanı seviyesindeki
yetkileri gördükten sonra, Server seviyesinde de Sql Server bize yetkilendirme imkanı
sunmaktadır.
SSMS – Security – Logins kullanıcının properties sayfasından Securables sekmesine geliyoruz.
Bu ekrandan kullanıcıya yetkileri Grant ile verebilir, Deny ile de engelleyebiliriz.
Loginin Securables sekmesine baktığınızda Alter Any Connection bölümünde Grant’ın seçili olduğunu göreceksiniz.
Yetki verilen server permissionlarına aşağıdaki sorgu ile kontrol edilebilir.
SELECT * FROM sys.server_permissions -- Kullanıcının izin verilen yetkileri aşağıdaki sorgu ile kontrol edilebilir. SELECT SP.class_desc, SP.permission_name, SP.state_desc FROM sys.server_permissions SP JOIN sys.server_principals SPR ON SP.grantee_principal_id = SPR.principal_id WHERE SPR.name = 'yavuzsql'
Alter Any Connection için Grant yetkisi vermiştik, sorguda karşımıza çıkıyor.
Veritabanı Kullanıcısı Yönetimi
Loginler Sql Server’daki kullanıcı hesaplarıdır. Yönetilmeleri de dikkat ister, yetkileri
detaylıdır. Database user yani veritabanı kullanıcısı ise sadece, ilgili veritabanındaki
temel güvenliğe bağlıdır. Sql Server’a server bazında bir yetkilendirme yapmaya gerek
kalmadan kullanabilir. Bu da gereksiz login açmaya gerek bırakmadan basit ve kolay bir
güvenlik sağlar. Varolan bir logine Database user bağlanabilir, böylelikle sürekli login
açmaya gerek kalmaz.
Veritabanı kullanıcısı açmak için SSMS – Databases – VeritabanıAdi – Security – Users
bölümde sağ click – New User ile yeni veritabanı kullanıcısını açıyoruz.
Database user ekranında, ilk olarak General sekmesi karşımıza geliyor, User Type
alanında kullanıcının tipini seçiyoruz.
Kullanıcı tiplerine kısaca bakalım;
Sql user with login: Bir Sql login hesabına map edilmiş kullanıcı tipidir.
Sql user without login: Bir Sql login hesabına bağlanmamış kullanıcıdır, T-Sql de
execute as user komutları ile kullanılabilir.
User mapped to a certificate/an asymetric key: Bir signature key’e atanmış kullanıcı
tipidir.
Windows user: Windows Authentication hesabına map edilmiş kullanıcı tipidir.
Windows user’a map edilmiş bir kullanıcı oluşturalım. User Name kısmında kullanıcı adını
yazıyoruz.
Kullanıcı adını yazdıktan sonra, database user’ı Windows User’a atamamız gerekiyor.
Login name kısmından bu atamayı yapıyoruz.
İstenirse default schema da atanabilir.
Windows user map edilirken, domaindeki bir kullanıcıyı siz biliyor olabilirsiniz ama
Sql Server bunu bilemez, bu yüzden Windows user olarak domaindeki kullanıcınızı Logins
kısmından ilk önce Sql Server’a eklemeniz gerekmektedir. Browse for object dediğimizde
karşımıza sadece Logins ekranında eklediğimiz Windows kullanıcıları gelecektir.
Owned Schema ve Membership sekmelerinden rol yetkilerini verebiliriz.
Veri tabanlarına atanmış olan Database owner yani veritabanı sahibi olarak atanmış kullanıcıları sorgulayarak, hangi veritabanında hangi kullanıcıların yetkileri var kontrol edebilirsiniz. Gereksiz gördüğünüz ve kullanılmayan hesapları mutlaka kapatın veya devre dışı bırakın.
Veri tabanlarındaki database owner ları görmek için aşağıdaki sorguyu çalıştırın.
SELECT SUSER_SNAME(owner_sid), name FROM sys.databases
Sistem Fonksiyonları – Kullanıcı ve Login Bilgileri Kontrolü
-- SSMS üzerinden kullanıcı ve loginleri ilgili ekranlara tek tek girerek incelemek -- gerekmektedir. Böyle bir işlem çok fazla zaman alacağından, Sql Server’ın sistem -- fonksiyonları ile kontrol edebiliriz. -- Is_Member ile mevcut kullanıcının grup üyesi olup olmadığını kontrol edebilirsiniz. SELECT IS_MEMBER('EMRE\Emre') -- Diğer fonksiyonlarda aşağıdaki gibidir -- SYSTEM_USER: Bağlı olan login hesabını gösterir SELECT SYSTEM_USER veya SELECT SUSER_SNAME() -- SUSER_ID(): Mevcut kullanıcının Security ID’sini gösterir SELECT SUSER_ID() -- CURRENT_USER / SESSION_USER: Mevcut Database kullanıcısını gösterir. SELECT CURRENT_USER SELECT SESSION_USER -- ORIGINAL_LOGIN: Windows hesabındaki kullanıcı adını gösterir. SELECT ORIGINAL_LOGIN() -- HAS_DBACCESS('veritabani_adi'): Mevcut kullanıcının veritabanına erişimi -- olup olmadığını gösterir. 1 Değeri döner ise erişim var demektir. SELECT HAS_DBACCESS('deneme')
*SQL SERVER GÜVENLİK KAVRAMI 1-2-3, Erişim Tarihi: 22 Temmuz 2016, http://www.cozumpark.com/blogs/sql/archive/2015/01/25/sql-server-guvenlik-kavrami.aspx