SQL Server’da Login Rolleri
Merhabalar,
Günlük hayatımızı sürdürürken bazı durumlarda önemli bilgiler ediniriz ve bu bilgi ya da parçaları gizlemek amacıyla bir kasaya ihtiyaç duyarız.Fiziksel olarak saklayabileceğimiz bu parçaları kasada konumlandırıp,ihtiyaç halinde ortaya çıkararak işimizi görebiliriz.Bu kasanın anahtarı ise belli başlı kişilerde bulunur.Zira fazla anahtar fazla risk demektir.
Peki ya bu saklayacağımız parçalar fiziksel olarak değil de teknolojik altyapı ile saklanacaksa ne yapmalı ?
Bu noktada yazımızın da konusu olan SQL Server ve bu sunucuya erişimi olan login ile bu işlemi gerçekleştirebiliriz.Bir veri kasası olarak kullandığımız SQL Server,gerekli düzenlemeler ile fazlasıyla güvenli olacaktır.Fakat bu güvenliği sağlamak için anahtarın organizasyon yapısında bulunan herkese ya da gereğinden fazla yetkiler ile birtakım personellere verilmemesi dikkat edilmesi gereken önemli bir konudur.Eğer bir kullanıcının SQL Server’a erişmesi gerekiyorsa gereksinimler iyi analiz edilmelidir.Oluşturulacak login için ne eksik ne de fazla,olması gerektiği şekilde bu yetkileri tanımlamak oldukça kritik bir konudur.Bu sebeple,SQL Server’da login ve user oluştururken en ufak detayına kadar ihtiyaçlarımızı karşılayabilecek esnekliğe sahip rolleri incelemeye başlayalım.
SQL Server’da iki farklı yetkilendirme alanı bulunur.Bunlardan ilki server seviyesinde roller diğeri ise database seviyesinde rollerdir.
1.) Server Roles
Oluşturacağımız login için server seviyesinde yetkileri barındırır.Bu yetkilerin listesine Security–Server Roles altından erişebileceğimiz gibi
select
[name]
from sys.server_principals
where type=‘R’
sorgusu ile de erişebiliriz.
Bu rollerin özellikleri ve hangi yetkilere sahip olduğu genel hatlarıyla paylaşılacak olsa da her rolün tüm yetkilerini sp_srvrolepermission ile de görebiliriz.
Hadi başlayalım. 😊
- bulkadmin : Bulk Insert Admin diyebileceğimiz bu rol,Excel ya da diğer veri kaynaklarından toplu insert yapılabilmesi için kullanılır.
- dbcreator : Kullanıcıya verilecek bu rol ile database oluşturmak,değiştirmek,droplamak ya da bir database restore etmek gibi işlemler gerçekleştirebilir.
- diskadmin : Disk üzerinde yer alan dosyaların yönetilmesi,düzenlenmesi gibi disk kaynaklı işlemlerin yapılması gerektiğinde kullanıcıya verilecek roldür.
- processadmin : SQL Server üzerinde gerçekleştirdiğimiz processlerin kontrolü,izlenmesi,denetlenmesi ve gerektiğinde de bu processleri KILL etme yetkisine sahiptir.
- public : Default olarak tüm loginlere tanımlanan bu rol ile kullanıcılar sadece SQL Server’a erişebilir.Herhangi bir işlem gerçekleştirilmek isteniyorsa user bazında yetkilendirme ya da gerekliyse server seviyesinde bir rol tanımlanmalıdır.
- securityadmin : Bu rolün atandığı bir kullanıcı genel anlamda login işlemleri üzerinde yetkilidir.Login oluşturma,password sıfırlama,error log okuma gibi işlemler gerçekleştirebilir.Server seviyesinde roller atayamazlar.
- serveradmin : Sunucu üzerinde yapılacak konfigürasyon,değişiklik ya da sunucuyu kapatmak gibi işlemler için atanan roldür.
- setupadmin : Bu rol ile kullanıcı,diğer sunuculara erişim sağlayabildiğimiz Linked Server kurabilir,düzenleyebilir ya da kaldırabilir.
- sysdmin : SQL Server’daki en yetkili kullanıcıdır.Bu yetki sebebiyle denetime takılabilir ve eğer varsa DBA dışındaki sysadminleri açıklamanız gerekebilir.😊
2.) Database Roles
Yukarıda açıklanan server seviyesindeki rollerden gerekli olan seçildikten sonra şimdi de bu kullanıcının hangi databaselere hangi yetkiler ile erişebileceğini belirleyelim.Bu seviyedeki yetkiler ile tablo,view hatta column seviyesine kadar inebildiğimiz için asıl yetki kırılımının bu seviyede gerçekleşeceğini de belirtelim.Bu alt kırılımlar ise sadece tek database üzerinde değil birden fazla database üzerinde olabilir.Yani bir kullanıcı için farklı databaseler üzerinde farklı yetkilendirmeler yapılabilir.
SQL üzerindeki database rollerini görüntülemek için sol taraftan herhangi bir database seçerek sırasıyla Security–Roles–Database Roles diyerek ya da
select
[name]
from sys.database_principals
where type=‘R’
sorgusu ile görebiliriz.
Server rollerinde olduğu gibi database rollerinde de her bir rolün detaylı yetkilerini görmek istediğimizde sp_dbfixedrolepermission ile görebiliriz.
- db_accessadmin : Veri tabanında oturum açma yetkisi verileceği gibi,bu yetkinin ortadan kaldırılması için de kullanılabilecek database rolüdür.
- db_backupoperator : SQL Server yönetiminde önemli bir yere sahip backupların alınması,düzenlenmesi gibi süreçleri yönetecek kullanıcıya atanan roldür.
- db_datareader : Databasede yer alan tablo,view gibi objelere sadece select sorgusu atabilmesi için atanması gereken roldür.
- db_datawriter : Kullanıcının database üzerinde yer alan tablolarda değişiklik yapmasına imkan veren kullanıcı rolüdür.Bu yetkiye sahip kullanıcı tablolara insert,update,delete atabilir.
- db_ddladmin : Oluşturulan kullanıcı için bu yetki verildiğinde,kullanıcı veri tabanı üzerinde DDL komutlarını çalıştırarak istediği çalışmayı yürütebilir.
- db_denydatareader : Bu role sahip bir kullanıcı,tablolar üzerinde SELECT sorgusu atamaz.Tablo içindeki verilerin okunmadan süreçlerin işletilmesi gerektiği durumlarda avantaj sağlamaktadır.
- db_denydatawriter : Bu role sahip kullanıcımızın database objelerine Update,Delete,Insert sorguları atmasını engeller.Dataya ya da tabloya müdahale etmeden süreçlerin işletilmesi gerektiği durumlarda kullanılabilir.
- db_owner : Sysadmin rolünün database seviyesindeki karşılığı desek yanlış olmayacaktır.Database üzerinde tam yetkiye sahiptir.
- db_securityadmin : Database üzerindeyetkilendirme yapılması gerektiğinde bu role sahip kullanıcılar bu işlemi gerçekleştirebilir.Yetki tanımlama,yetkiyi geri alma,yetki düzenlemesi gibi birtakım işlemler gerçekleştirebilir.
- Public : Oluşturulan her user için tanımlanan default roldür.Tek başına yeterli bir yetkilendirmeye sahip olmadığından gerekli düzenlemelerin yapılması gerekir.
Görüldüğü üzere SQL Server her ihtiyaç için bize fazlasıyla esnek bir yetkilendirme imkanı sunmaktadır.Yukarıda genel hatlarıyla paylaşmış olduğum rollerin detaylarına,her konunun başında bahsetmiş olduğum splere uygun parametreleri vererek(istenilen rolün ismini) inceleyebilirsiniz.
Güvenlik ve yönetilebilirlik açısından hassasiyetle yaklaşılması gereken konulardan birisi olan kullanıcı rolleri ve detayları yazımızın da sonuna gelmiş bulunmaktayız.Bu roller için login oluşturmaya da ihtiyacınız olması halinde bu yazıma da göz atabilirsiniz.
Umarım faydalı olmuştur.
Hoşça kalın.
Merhaba, kullandığım bir programın .ini dosyasında yaptığım ayarlarla sql 2019 a bağlayıp kullanıcı adı ve şifre girdikten sonra ekran arabiriminin açılmasını ayrlamaya çalışıyorum. Kullanmış olduğum veritabanında logları tutan tabloda giriş yapmaya çalışıtığımda logout kayıtlarının oluşmasına rağmen “Login failed. Please check account/password or DB settings” hatası alıyorum. Log out kayıtlarının veritabanında loginhistroy tablosunda oluşması bana programın veritabanı bağlantısını sağladığını düşündürüyor, bilmiyorum yanılıyormuyum. Fakat kullanıcı adı ve şifre doğru olmasına rağmen login authenticate gerçekleşip program arabirim ekranı gelmiyor. Sorunu nerde aramalıyım bir öneriniz olursa sevinirim. Saygılar….