Bu makalemde sizlere SQL Server Management Studio üzerinde yeni kullanıcı (user ya da hesap da diyebiliriz) oluşturma ve bu kullanıcıya SQL Server üzerinde Server bazlı ve Database (veri tabanı) bazlı kullanıcı izinlerinin nasıl verilirdiğinden bahsediyor olacağım.
SQL Server Yeni Kullanıcı (User) Ekleme
Sql Server’daki kullanıcıların hesaplarına Logins adı verilmektedir. Her bir Login’e ayrı yetkiler verilebilir, erişebileceği veri tabanları belirlenebilir.
Öncelikle SQL Server yeni kullanıcı (User) ekleme işlemini gerçekleştirelim. Bunun için;
1- Sırasıyla Security klasörü altındaki Logins klasöründe sağ tıklayarak New Login... seçeneğini seçiyorum.

2- Karşıma çıkan Login-New Penceresinde;
Login name: bölümünde yeni oluşturacağım kullanıcım için bir isim belirliyorum.
3- Kullanıcı adını tanımladıktan sonra, SQL Server Management Studio'ya nasıl bağalanacağını seçmemiz gerekiyor.
Bunun için Windows Authentication ve SQL Server Authentication olmak üzere iki seçenek mevcut;
3.1- Windows authentication: Windows authentication, sadece Windows hesaplarından açılan oturumları kabul eder. Bir kullanıcı Windows kullanıcı hesabı ile bağlandığında, SQL Server hesap adı ve principal token, yani Windows hesabı belirteci kullanarak parola doğrulanır. Bu kullanıcı kimliğinin Windows tarafından onaylandığı anlamına gelir.
Windows Authentication Mode'u ayrıca, Kerberos güvenlik protokolü, güçlü parolalar için karmaşıklık ilkesi ile hesap kilitleme ve parola süresi dolma (Password Expiration) desteği sağlar. Windows authentication, sadece Windows hesaplarından & Active Directory Domain hesaplarından açılan oturumları kabul edeceği için;
● SQL Server sunusu Domain ortamında ise kullanıcı adını yukarıda FIRATBOYAN\firat şeklinde belirlediğim gibi [DomainAdi\KullaniciAdi] şeklinde belirlemeniz gerekecektir,
● Workgroup ortamında ise, [PC-adi(Hostname)\KullaniciAdi] şeklinde belirlemeniz gerekecektir.
Oluşturacağım kullanıcıyı önce Windows Authentication Mode'da oluşturuyorum. Örnek olarak FIRATBOYAN\firat kullanıcısını oluşturuyorum.


3.2- SQL Server authentication: SQL Server Authentication ile ilgili bilinmesi gereken çok önemli bir nokta vardır o da; SQL Server'ın Login parolasının şifreli bir kopyasını değil, parola’nın HASH'ini sakladığıdır. Bir Login işlemi gerçekleştiğinde kullanıcı tarafından gönderilen HASH’li şife ve saklanan HASH karşılaştırılır. Bu iki HASH eşleşirse parola kabul edilir ve giriş başarılı olur.
Oluşturduğum FIRATBOYAN/firat kullanıcısını bu adımda da SQL server authentication'da oluşturuyorum. Örnek olarak FIRAT kullanıcısını oluşturuyorum.
● 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 veri tabanı otomatik olarak gelir.
● Default Language: SSMS üzerindeki dil ayarları, format ve hata mesajları istenen dilde bu seçenek ile ayarlanabilir.


NOT: SQL Server authentication mode, Windows hesapları (Active Directory Domain hesapları ya da Local hesaplar) ile çalışmadığı için, bu mod seçili iken, kullanıcı adını [DomainAdi\KullaniciAdi] ya da [PC-adi(Hostname)\KullaniciAdi] şeklinde Domain belirterek yazmanıza izin vermeryecek ve aşağıdaki hata ile karşılaşacaksınız. Bu nedenle, Domain adı belirtmeden, sadece kullanıcı adı berlitmelisiniz.

Kullanıcımı SQL Server authentication mode ile oluşturdum ve bu adımdan devam ediyorum. Oluşturduğum kullanıcının sırasıyla Security > Logins klasörleri altında yer aldığını görebiliyoruz. Bundan sonraki adımlarda, kullanıcıya Server ve Database seviyelerinde rollerin ve izinlerin atanması işlemini uygulamak için oluşturdum FIRAT kullanıcısı üzerinde sağ tıklayıp Properties'e tıklıyorum.

SQL Server Kullanıcı Rol ve İzin Atamaları
Sql Server’da güvenlik seviyesi iki katmandan oluşur. Bunlar, Server ve Database seviyeleridir.
1) SQL Server Rolleri - Server Roles
Login Properties penceresinde Server Roles alanında kullanıcının veri tabanı sunucusunun çalışması ile ilgili işlemlerin yürütülmesine yönelik rollerin atandığı alandır. Daha başka bir ifade ile; oluşturulan kullanıcının atandığı veri tabanında yürüteceği SQL Server yönetimsel rolleri, yani Server Rollerini belirler.
Bilgi!:Bir Sql Server hesabı varsayılan olarak hiçbir yönetici yetkisi olmadan oluşturulur. Bu role de public role denir. Oluşturduğunuz bir kullanıcıya yönetici yetkisi vermek istiyorsanız, gerekli yetkiyi bu alandan vermeniz gerekiyor.
SQL SERVER Yönetimsel Roller:
● bulkadmin (Bulk Insert Administrator): Toplu ekleme yöneticisi. Toplu Insert işlemlerini yerine getirir.
NOT: Genelde başka bir veri kaynağından ya da Excel'den veri çekme işlemleri için kullanılır.
● dbcreator (Database Creators): veri tabanı oluşturucusu. veri tabanı oluşturulması ve değiştirilmesi işlemlerini yönetir.
NOT: Bu role sahip olan kullanıcı, herhangi bir veri tabanı oluşturabilir, silebilir veya düzenleyebilir. Yazılımcılara test amaçlı bu yetki verilebilir.
● diskadmin (Disk Administrator): Disk yöneticisi. veri tabanı dosyalarını yönetir.
● processadmin (Process Administrator): İşlem yöneticisi. SQL Server'daki Process'leri kontrol eder.
NOT: Bu role sahip olan kullanıcı, çalışan tüm process'leri görebilir, kill komutu ile istenen process'leri sonlandırabilir.
● public (Herkese Kısıtlı Hak): SQL Server üzerinde standart ayarlarla giriş yapan herkesin atandığı roldür. Bu kural ile tüm kullanıcıların kısıtlı hakları vardır. Daha sonra bu kullanıcılara kural değişikliği yapılarak diğer kurallar atanabilir.
● securityadmin (Seurity Administrator): Güvenlik Yöneticisi. SQL Server Login bilgilerini yönetir.
NOT: Bu role sahip olan kullanıcı, SQL Server hesabı oluşturup silebilir. Rol oluşturma yetkisi yoktur.
● serveradmin (Server Administrator): Sunucu yöneticisi. Sunucu temelli ayarlamalardan sorumludur.
● setupadmin (Setup Administrator): Kurulum yöneticisi. SQL Server Raplication'ı kurar.
NOT: Bu role sahip olan kullanıcı, Linked Server oluşturma yetkileri vardır.
● sysadmin (System Administrator): Sistem yöneticisi. Server'daki hemen her işi yapabilir.
NOT: Bu role sahip olan kullanıcı, tüm yönetici yetkilerine sahip olur.

2) SQL Server Database & veri tabanı Rol ve İzin Atamaları - User Mapping
Sql Server’da kullanıcıya Server Roles verilmesi, birçok yetkiyi de beraberinde getirir. Kullanıcıya sadece istenen veri tabanlarında yetki verilmek istendiği zaman Login Properties penceresinde User Mapping alanında, öncelikle kullanıcıya bir veri tabanı atıyoruz ve kullanıcının atandığı veri tabanına bağlandığında hangi yetkilere (rollere) sahip olacağını, yani veri tabanı rollerini belirliyoruz.
Kullanıcıyı birden fazla veri tabanına da atayabilirsiniz ancak ben, örnek olarak FIRAT kullanıcısını Database002 isimli veri tabanına atadım.
NOT: Kullanıcım, sadece atandığı veri tabanı üzerinde, SQL Server Kullanıcı rolleri dahilinde işlem yapabilir. Başka bir Database'e (veri tabanı) erişmesi mümkün olMAyacaktır.
Veri tabanı kullanıcı rolleri; veri tabanına veri eklenmesi, silinmesi, veri okuma, veri yazma, nesne sahipliği, erişim ayarlamaları vb. konularda tanımlı rollerdir ve veri tabanı seviyeli işlemler olduklarından, veri tabanı kullanıcılarına verilebir.
SQL SERVER Database (veri tabanı) USer (Kullanıcı) Rolleri:
● db_accessadmin: veri tabanı yöneticisi
● db_backupoperator: veri tabanı Yedekleme Operatörü
● db_datareader: veri tabanı Okuyucusu
● db_datawriter: veri tabanı Veri Yazıcısı
● db_ddladmin: veri tabanı DDL Yöneticisi
● db_denydatareader: veri tabanı engelli veri okuyucu
● db_owner: Vertabanı sahibi
● db_security: veri tabanı güvenlik yöneticisi

3) SQL Server Server Seviyesinde Rol ve İzin Atamaları - Securables
Login Properties penceresinde Securables alanında kullanıcının SQL Server erişimi ile ilgili tüm güvenlik ayarlarını yapılandırabilirsiniz.Aşağıdaki ekran görüntüsünde de görüldüğü gibi kullanıcıya, sa (System Admin) tarafından Connect SQL yani SQL Server'a bağlanma yetkisi verilmiş. İhtiyacınıza göre diğer rol ve İzin Atamalarınında Grant seçeneği ile izin & rol ataması yapabilir, Deny seçeneği ile de izin & rol atamasını kısıtlayabilir, daha başka bir ifade ile rol yetkisi vermeyebilirsiniz.

Kullanıcımızı oluşturup gerekli rol ve izinleri de atadık.
Faydalı olması dileğiyle...
Her türlü görüş ve önerilerinizi aşağıdaki yorum panelinden bırakabilir, kafanıza takılanları veya merak ettiklerinizi sorabilirsiniz.