Sql Server Güvenlik Kavramı – Bölüm 2

SQL SERVER GÜVENLİK KAVRAMI – Bölüm 2

 

    İlk bölümde Sql Server’ın kurulu olduğu server ve network üzerindeki güvenlik ayarlarından bahsettik. Bu bölümde, Sql Server’ın kendi içindeki güvenlik tanımlamalarından bahsedeceğiz. Kimlik doğrulama seçenekleri, kullanıcı yönetimi, Sa kullanıcısının yetkileri, kullanıcı rolleri ve veritabanı yetkileri hakkındaki detaylara bakacağız.

    İlk olarak Sql Server’da kimlik doğrulama konusuna değinelim.

Kimlik Doğrulama:

   

    Sql Server ile clientlar arasında iki çeşit kimlik doğrulama yöntemi vardır. Windows Authentication ve Sql Server Authentication. Sql Server kurulumunda hangi yöntem ile kimlik doğrulama yapacağınız size sorulur. Windows Authentication modu devre dışı bırakılamaz. Tek olarak Windows Authentication veya Sql Server – Windows Authentication modları bütünleşik olarak seçilebilir.

Kimlik doğrulama seçeneklerini görmek için, Sql Server Management Studio – Object Explorer instance adınız üzerinde sağ klik Properties

SSS-29

Security sekmesine geliyoruz.

SSS-30

“Windows Authentication mode” Sadece Windows hesaplarından açılan oturumları kabul eder.

“Sql Server and Windows Authentication mode” Hem Windows hem de Sql Server hesaplarından açılan oturumları kabul eder.

Server Authentication kısmında yaptığınız kimlik doğrulama yöntemlerinden sonra Sql Server servisinin yeniden başlatılması gerekmektedir.

Windows Authentication varsayılan olarak Sql Server kurulumunda seçili olarak gelmektedir. Öngörülen ve daha güvenli olan kimlik doğrulama seçeneğidir. Kullanıcı Sql Server’a kullanıcı adı ve şifre girmeden, Windows hesabı ile bağlanabilmektedir. Windows Authentication devre dışı bırakılamaz. Mixed mode seçili olduğunda aynı zamanda Windows Authentication kullanılabilmektedir.

Sql Server Authentication’ı dışarıdan erişecek ve domain yapınızın dışından erişecek kullanıcılar için açabilirsiniz. Sql Server hesapları, Sql Server’ın içinden yönetilir, Windows hesapları ile bir bağlantısı yoktur.

Msdn: http://msdn.microsoft.com/en-us/library/bb669066(v=vs.110).aspx

Sql Server Kullanıcı Hesapları:

 

    Sql Server’daki kullanıcıların hesaplarına Logins denmektedir. Her bir login’e ayrı yetkiler verilebilir, erişebileceği veri tabanları belirlenebilir. Sql Server’da güvenlik seviyesi iki katmandan oluşur Server ve Veritabanı seviyesi. Login hesabı ilk önce server seviyesi oluşturulur, daha sonra ilgili veri tabanına mapped denilen ataması yapılır ve veri tabanına erişimi sağlanmış olur.

Sql Server üzerinde kullanıcı – login açmak için SS Management Studio – Security – Logins üzerinde sağ klik “New Login” diyorurz.

SSS-31

Windows Authentication ile domain kullanıcısına Sql Server için yetki verilebilir. Search kısmından yetki verilmek istenen kullanıcı seçilebilir.

SSS-32

Sql Server Authentication seçildiğinde kullanıcı adını yazabilirsiniz. Sql Server’ın yönettiği hesaplar olduğu için Windows hesaplarından farklı olacaktır.

“Enforce password policy” – Domaindeki veya Windows işletim sisteminde password policy kuralları geçerli olur.

“Enforce password expiration” – Domaindeki veya Windows işletim sisteminde şifre geçerlilik süresi bu seçenek ile geçerli olur.

“User must change password at next login” – Kullanıcı bir sonraki oturumunda şifresini değiştirmek zorunda kalır. SSMS ile bu şifre değiştirebilir.

“Default Database” – SSMS bağlanıldığında kullanıcı bazlı, çalışılacak olan veritabanı otomatik olarak gelir.

“Default Language” – SSMS üzerindeki dil ayarları, format ve hata mesajları istenen dilde bu seçenek ile ayarlanabilir.

SSS-33

Enforce password policy ve pasword expiration seçeneklerinin Sql logini için seçilmesi, basit şifrelerin kullanılmasının önüne geçeceği gibi, uzun süre değiştirilmeyen şifreler içinde tedbir olacaktır.

Domain Password Policy Technet: http://technet.microsoft.com/en-us/library/cc264456.aspx

T-Sql kodu ile Sql login aşağıdaki gibi oluşturulmaktadır.

USE [master]

GO

CREATE
LOGIN [yavuzsql] WITH
PASSWORD=N’Guclu_bir_sifre’
MUST_CHANGE,

DEFAULT_DATABASE=[PLANLAMA],

DEFAULT_LANGUAGE=[Türkçe],

CHECK_EXPIRATION=ON,

CHECK_POLICY=ON

GO

 

Password policy seçili olan bir Sql hesabında, şifre denemesi aynı Windows hesabında olduğu gibi geçerlidir. Yanlış girilen şifrelerden dolayı Sql hesabı kilitlenebilir. Sql hesabının kilidini açmak için aşağdaki T-Sql kodu çalıştırılır.

ALTER
LOGIN yavuzsql WITH
PASSWORD
=
‘yeni_sifre’
UNLOCK;

— Şifre değiştirilmek istenmiyor ise, aşağıdaki komutlar ile çalıştırılır

ALTER
LOGIN fred WITH
CHECK_POLICY
=
OFF;

ALTER
LOGIN fred WITH
CHECK_POLICY
=
ON;

 

Bir Sql hesabını devre dışı bırakmak veya tekrar aktifleştirmek için aşağıdaki T-Sql kodu kullanılır.

— Hesabı devre dışı bırakır

ALTER
LOGIN yavuzsql DISABLE;

— Hesabı aktifleştirir

ALTER
LOGIN yavuzsql ENABLE;

 

Bir Sql hesabını silince, bu hesabın tüm ayarları kaybolur, tekrar bu hesabı oluşturduğunuzda tüm tanımları yeniden yapmanız gerekmektedir. Bu sebeple, hesabın Sql Server’a erişimimi kapatarak, hesabı silmeden kullanıcının Sql Server’a erişimini engelleyebilirsiniz.

DENY
CONNECT
SQL
TO yavuzsql;

 

Bu ayarları kullanıcının Properties sayfasındaki Status sekmesinden de yapabilirsiniz.

SSS-34

“Permission to connect database engine” – Kullanıcının Sql Server’a bağlanmasına izin/engel vermesi.

“Login” – Kullanıcı hesabının devre dışı/aktif edilmesi.

“Sql Server Authentication – Login is locked out” – Kilitlenen Sql Server hesabı buradan açılabilir.

Kullanıcı hesaplarının güvenlik ile alakalı kısımlarından bahsettik. Login – Properties’in diğer sekmeleri olan Server Roles, User Mapping ve Securables bölümleri kullanıcının Sql Server içindeki erişim izinleri ile alakalıdır.

Sql Login Msdn: http://msdn.microsoft.com/en-us/library/aa337562.aspx

 

Sql Saldırılarından Korunma Yöntemleri:

   

    Windows sunucularına saldırdıkları gibi, Sql Server’a aynı şekilde Brute-force denilen saldırı yöntemi ile ataklar sürekli olmaktadır. Windows tarafında kullanılan password policy eğer Sql tarafında kullanılmıyorsa, Sql Server’ınızda güvenlik olarak büyük bir açığınız var demektir. Sql login şifrelerini 12345 gibi basit şifreler koydu iseniz, kırılması sadece birkaç saniye sürecektir. Önerilen en temel şifreleme policy’si en az bir rakam, en az bir büyük harf, en az bir özel karakter olacak şekilde 8 karakterden az olmamak şartıdır. Şifrenizin ne kadar uzun ve ne kadar çok karmaşık olması brute-force ataklarından sizi daha iyi koruyacaktır.

    Şifrenin uzun ve karmaşık olmasının yanı sıra, belirli periyodlarla değiştirilmesi gerekmektedir. Sürekli aylarca, yıllarca aynı kalan şifrelere uzun süren brute-force ataklar ile kırılabilmektedir.

İlk olarak Sql Server’ımızda kaç tane login-hesabınımız var bakalım.

SELECT
*
FROM
sys.sql_logins

 

Sys.sql_logins Sistem tablosundan tüm loginlerimizi bize getiriyor. Loginlerimizde password policy olmayan hesapları tespit etmemiz içn, SSMS üzerinde tek tek loginlerin özellikler sayfasına girmek çok fazla vakit kaybı olacaktır. Sql_logins tablosunda password policy olmayan hesapları tespit etmek için aşağıdaki sorguyu çalıştırıyoruz.

SELECT name, is_disabled

FROM
sys.sql_logins

WHERE is_policy_checked = 0

 

İki tane Sql loginde password policy olmadığı gözüküyor.

SSS-35

Birden çok login hesabınız olduğunda password policyleri aktif etmeniz uzun sürecektir. Aşağıdaki sorgu ile login veya loginlerin password policylerini aktif hale getirebilirsiniz.

ALTER
LOGIN yavuzsql WITH
CHECK_POLICY
=
ON,

CHECK_EXPIRATION
=
ON;

 

Check_Expiration ile de şifre değiştirme süresini aktif hale getirmiş olduk. Şifrenin süresinin ne zaman dolacağınız aşağıdaki komut ile sorguluyoruz.

SELECT
LOGINPROPERTY(‘yavuzsql’, ‘DaysUntilExpiration’);

 

SSS-36

Şifreyi değiştirmek için 39 gün kaldığını gösteriyor.

Msdn: http://msdn.microsoft.com/en-us/library/ms161959.aspx

Sql hesabınıza şifre deneme saldırısı yapıldığında, bu denemeleri kendinize veya tanımlı kişilere mail olarak bildirebilirsiniz.

İlk olarak Sql Server Management Studio – Management – Database Mail bölümünde tanımlı bir Sql Database hesabı yapılandırmanız gerekiyor. Bunun Database maile sağ klik “Configure Database Mail”

SSS-37

Wizard karşılama ekranını Next ile geçiyoruz.

Set up Database Mail by performing the following task seçeneğini seçip Next ilerliyoruz.

SSS_38

Profil adını yazdıktan sonra Add butonuna tıklıyoruz.

SSS-39

New Database Mail Account ekranını aşağıdaki gibi dolduruyoruz. Sisteminizde bir Smtp server var ise, Smtp serverınızdan bir hesap ile Database mail oluşturabilirsiniz.

SSS-40

Ok dedikten sonra Manage Profile Security ekranında “Public Profiles” sekmesinde Public check box’ını işaretliyor ve “Default Profile”i Yes olarak ayarlıyoruz.

SSS-41

Database mail hesabımız tanımlanmış oldu. Mutlaka aşağıdaki gibi bir test maili gönderip, Database mailin çalışıp çalışmadığını kontrol edin.

SSS-42

Mail tanımlarını yaptık, test mailini gönderdik. Sa hesabına şifre denemesi yapıldığında bize mail gelmesini istiyoruz.

Sql Server Agent üzerinde sağ klik New – Alert diyoruz. Yeni bir uyarı tanımlayacağız.

SSS-43

New Alert ekranında tanımları aşağıdaki gibi yazıyoruz.

SSS-44

Bu tanımdan sonra mail gelmesi için Response sekmesinde Notify Operators seçeneğini seçerek istenen kişilere mail gönderilmesi sağlanır. Eğer Operator tanımı yok ise New Operator ile yeni bir operatör tanımlanır. Tanımlanan operatör Response ekranına gelecektir.

SSS-45

Tüm ayarları yaptıktan sonra Database mailin Sql Server Agent için aktif edilmesi gerekmektedir. Database mail varsayılan olarak Sql Server içinde sys.send_mail prosedürü tarafından kullanılmak üzere ayarlanmaktadır. Sql Server Agent için Database maili aktifleştirmek içi, Sql Server Agent üzerinde sağ klik Properties ekranı açılır. Alert System sekmesindeki Enable Mail Profile ile aktifleştirme işlemi tamamlanır.

SSS-46

Bu ayar yapılmazsa, Sql Server Agent üzerindeki Alert’lerden mailler gelmez.

Sa kullanıcısına şifre denemeleri yapalım.

SSS-47

18456 nolu hatayı aldık, bakalım bu deneme Sql Server tarafından bize mail atıldı mı, mailimize gidip kontrol ediyoruz.

SSS-48

Operatöre Yahoo mailimi tanımlamıştım. Hatalı yapılan girişler mail olarak geldi.

 

Sa Hesabının Kısıtlanması:

 

    Sa kullanıcısı ilk Sql Server çıktığından beri olan, System Administrator anlamına gelen, Sql Server’ın sistem yöneticisi hesabıdır. Eski Sql Server sürümlerinde devre dışı bırakılması mümkün değildi. Sql Server 2005 ile birlikte devre dışı bırakılması ve değiştirilmesi sağlandı.

    Sa hesabını neden kapamalıyız veya neden kısıtlamalıyız, çünkü en çok saldırı alan Sql Server hesabıdır. Saldırganlar tarafından ilk önce kontrol edilen hesaptır, sa hesabında sistem yöneticiliği rolü olduğundan ilk önce bu hesap yoklanır. Birçok firmada sa hesapları aktif haldedir. Ne yazık ki kobi dediğimiz küçük ve orta boy ölçekteki bir çok firmada ise durum daha vahimdir. Bazı firmalarda halen sa hesabı aktif olup şifreside yoktur. Firma sahipleri etkili bir atak yedikten sonra, verileri çalınıp şifrelendikten sonra tedbir almaya başlarlar.

    Sa hesabını aşağıdaki komutla devre dışı bırakıyoruz.

ALTER
LOGIN [sa] DISABLE

 

Sa hesabının adını aşağıdaki komut ile değiştirebilirsiniz.

ALTER
LOGIN [sa] WITH NAME = [test_kullanici]

Sa hesabının Securtiy ID’si (SID) 1 olduğundan daha aşağıdaki sorgu ile sa hesabının adını öğrenebilirsiniz.

SELECT
*
FROM
sys.sql_logins
WHERE principal_id =
1

 

Sa hesabını SSMS üzerinden devre dışı bırakmak için. SSMS – Security – Logins Sa hesabına sağ tıklayıp özelliklerine giriyoruz.

Status sekmesinden aşağıdaki şekildeki gibi database engine için Deny, SSMS erişimi içinde Login Disable yapıyoruz.

SSS-49

Sql Server kurulumunda Windoıws Authentication seçeneği seçilerek kurulum yapıldı ise, sa devre dışı kalır. Sa şifresini hatırlamanıza gerek yoktur. Olabildiğince zor bir şifre koyarak sa hesabının adını değiştirmek gerekmektedir.

Msdn: http://msdn.microsoft.com/en-us/library/ms188670.aspx

 

Sql Server Rolleri:

 

    Bir Sql Server hesabı varsayılan olarak hiçbir yönetici yetkisi olmadan oluşturulur. Bu role public rolü denir. Daha sonra hangi veritabanına erişmek istiyor ise Logins – Properties – User Mapping sekmesinden veritabanı yetkileri atanır. Eğer bir kullanıcıya yönetici yetkileri vermek istiyorsanız, Login’nin server roles sekmesinden gerekli rolü verebilirsiniz.

    Sql Server’da roller aşağıdaki gibidir;

  • Bulk Admin: Bulk insert yapma yetkisine sahiptir. Bir dosyadan veritabanına kayıt eklemek için kullanılır. Genellikle excelden veri çekmek için kullanılmaktadır.
  • Dbcreator: Herhangi bir veritabanını oluşturma, düzenleme ve kaldırma yetkisi vardır. Yazılımcılara test amaçlı bu yetkiden verilebilir.
  • Processadmin: Sql proseslerini görme ve sonlandırma yetkisi vardır. Tüm çalışan prosesleri görebilirler. Kill komutu ile istenen proses veya prosesleri sonlandırabilirler.
  • Securityadmin: Sql hesabı oluşturup silebilirler. Server rolü oluşturma yetkileri yoktur.
  • Serveradmin: Sql server instance’ının özelliklerini değiştirebilir, yeniden başlatabilir veya hizmeti durdurabilirler.
  • Setupadmin: Linked server oluşturma yetkileri vardır.
  • Sysadmin: Tüm yönetici yetkilerine sahip roldür.

Sql Server hesaplarına atanmış olan rolleri aşağıdaki sorgu ile görebilirsiniz.

SELECT
role.name as
role,role.is_fixed_role,login.name as
login

FROM
sys.server_role_members srm

JOIN
sys.server_principals
role
ON srm.
role_principal_id =
role.principal_id

JOIN
sys.server_principals
login
ON srm.
member_principal_id =
login.principal_id

 

SSMS üzerinde bir kullanıcının rolünü ayarlamak için,

SSMS – Security – Logins bölümünde kullanıcının Properties ekranından Server Roles sekmesinden istenen rol kullanıcıya atanır.

SSS-50

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.

SSS-51

“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.

User Mapping Technet: http://technet.microsoft.com/en-us/library/ms178316(v=sql.105).aspx

Database Roles Technet: http://technet.microsoft.com/en-us/library/ms189121(v=sql.105).aspx

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.

SSS-52

Bu ekrandan kullanıcıya yetkileri Grant ile verebilir, Deny ile de engelleyebiliriz.

T-Sql ile yapmak içinde,

GRANT
ALTER
ANY CONNECTION TO yavuzsql;

 

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

 

SSS-53

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’

 

SSS-54

Alter Any Connection için Grant yetkisi vermiştik, sorguda karşımıza çıkıyor.

Database level permission ile ilgili aşağıdaki posteri indirip detaylı inceleme yapabilirsiniz. Sql 2008 R2 ve Sql 2012 için geçerlidir.

Technet Poster: http://social.technet.microsoft.com/wiki/cfs-file.ashx/__key/communityserver-wikis-components-files/00-00-00-00-05/5710.Permissions_5F00_Poster_5F00_2008_5F00_R2_5F00_Wiki.pdf

Msdn: http://msdn.microsoft.com/en-us/library/ms191291.aspx

 

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ğ klik – New User ile yeni veritabanı kullanıcısını açıyoruz.

SSS-55

Database user ekranında, ilk olarak General sekmesi karşımıza geliyor, User Type alanında kullanıcının tipini seçiyoruz.

SSS-56

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.

SSS-57

İ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.

Ownwd Schema ve Membership sekmelerinden rol yetkilerini verebiliriz.

SSS-58

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

SSS-59

Msdn: http://msdn.microsoft.com/en-us/library/aa337545.aspx

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(‘yavuzsony\yavuz’);

SSS-60

 

Diğer fonksiyonlarda aşağıdaki gibidir;

  • SYSTEM_USER: Bağlı olan login hesabını gösterir

SELECT
SYSTEM_USER veya
SELECT SUSER_SNAME();

 


SSS-61

 

  • SUSER_ID(): Mevcut kullanıcının Security ID’sini gösterir.

SELECT
SUSER_ID();


SSS-62

 

  • CURRENT_USER / SESSION_USER: Mevcut Database kullanıcısını gösterir.

SELECT
CURRENT_USER;

SELECT
SESSION_USER;


SSS-63

 

  • ORIGINAL_LOGIN: Windows hesabındaki kullanıcı adını gösterir.

SELECT
ORIGINAL_LOGIN();


SSS-64

 

  • 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(‘ARGE’);


SSS_65

 

Msdn: http://msdn.microsoft.com/en-us/library/ms186236.aspx

 

Kullanıcılardan ve Sql Hesaplarından Ana Verileri Gizleme:

    Sql serverdaki veritabanları ve diğer nesneler, yetkisi az olan bir kullanıcıya da açık olarak gelir. Gözükmesini istemediğiniz bu nesneler için engellemeler yapabilirsiniz. İlk olarak yapılması gerek public rolü için View Any Databases özelliğini kapatmak olacaktır.

 

USE
master;

GO

REVOKE
VIEW
ANY
DATABASE
TO
public;

 

Public rolündeki kullanıcımla SSMS’e giriş yapıp kontrol ediyorum.

SSS-66

Görüldüğü gibi yavuzsql kullanıcısında sadece ARGE veritabanını görme yetkisi vardı, Databases altında sadece ARGE gözüküyor.

SSS-67

 

Kullanıcı için bir veritabanındaki belli bir nesneye yetki vermek için, veritabanı içindeki Security – Users özellikler sayfasında, Securables sekmesinden gerekli izinler atanabilir. Örnek olarak bir stored procedure veya bir tablo bu ekrandan yetkilendirilebilir.

Kullanıcının üzerinde sağ klik Properties ekranına giriyoruz. Securables sekmesindeki Search’e tıklıyoruz.

SSS-68

Search – Specify Objects

SSS-69

Object Types’a tıklayıp seçebilecek nesneleri göreceğiz.

SSS-70

Select Object Types ekranında veritabanındaki tüm nesnelerin ana grupları gözükmekte. Örnek olarak View seçip Ok ile devam edelim.

SSS-71

Select Objects ekranında Browse diyoruz. Hangi nesne tipini seçersek, onunla ilgili kayıtlar gelecektir.

SSS-72

Sistem viewleri dahil veritabanındaki tüm viewler geldi. Daha önce oluşturduğum arge_view’i seçiyorum.

SSS-73

Select Objects ekranına view geldi, Ok ile devam ediyoruz.

Securables ekranına view geldi. Görüldüğü detaylı bir yetkilendirme var, sadece Select ve View Definition’a Grant yetkisi verip Ok diyorum.

SSS-74

View üzerinde sağ klik Edit top 200 rows diyelim, verilerde değişiklik yapmaya çalışalım.

SSS_75

Edit yetkisi olmadığı için izin vermedi.

View’i komple silmeye çalışalım.

SSS_76

Yetki olmadığı için silmeye izin vermedi.

Technet: http://technet.microsoft.com/en-us/library/ms190785(v=sql.105).aspx

Sql Server’da kullanıcı yetkilerinin ne kadar detaylı olduğunu görmüş olduk. Genelde uğraşmamak için loginlere sysadmin yetkisi verilir. Firmaya yeni bir yazılım alınır, yazılımcı firma Sql de bir kullanıcı ister ve Sql kullanıcısı sysadmin olarak açılır. Genel senaryo bu şekilde oluşur, siz farkında olmadan verilerinizi başka bir firmadaki kişiye teslim etmiş oluyorsunuz. Bir yanlışlık yapıldığında da geri dönülmesi zor hatalara yol açabilir.

Saldırganlarda bu açıklardan faydalanarak, sql loginlerindeki yetkileri kontrol ederler. Gerekli tedbirler alınmayan sistemlerde saldırgan, kıyıda köşede kalmış bir Sql hesabı ile istediği zararı verebilir.