SQL Server Management Studio (SSMS) kullanarak kullanıcı oluşturma ve rol/izin ataması, veritabanı güvenliği ve erişim yönetiminin en temel yapı taşlarından biridir. SQL Server'da her kullanıcının kimlik doğrulama süreci, sunucu ve veritabanı seviyesindeki erişim yetkileri, işlemleri yapma hakları gibi konular belirli bir yapıya oturtulmuştur ve bu yapı, güvenlik zafiyetlerinin önüne geçmek için titizlikle yönetilmelidir. Özellikle geniş çaplı veritabanı yapılarında, kullanıcılara yetki tanımlama ve bu yetkilerin detaylandırılması büyük önem taşır. Yanlış bir yetki tanımlaması, veritabanının işleyişinde ciddi güvenlik risklerine yol açabilir, bu yüzden her kullanıcı rolünün dikkatli bir şekilde yapılandırılması gerekir.
SSMS aracılığıyla kullanıcı oluşturma işlemi, Windows Authentication ve SQL Server Authentication olmak üzere iki temel kimlik doğrulama mekanizması üzerinden gerçekleştirilir. Windows Authentication, kullanıcının zaten Windows ortamında doğrulanmış olduğu anlamına gelir. Bu mod, genellikle domain bazlı Network yapılarında tercih edilir ve güvenlik açısından birçok işletme tarafından tercih edilen yöntemdir. Çünkü kullanıcı, Windows Server ortamında oturum açtıktan sonra aynı kimlik bilgilerini kullanarak SQL Server'a da bağlanabilir. SQL Server Authentication ise, SQL Server'da tanımlı bir kullanıcı adı ve şifre ile çalışır. Bu yapı, özellikle sunucu dışı erişimlerde, farklı ağlardan bağlanan kullanıcılar için sıklıkla kullanılır. Fakat, bu modda güvenliğin artırılması için şifre politikalarının sıkı tutulması büyük önem taşır.
Kullanıcı oluşturma işlemi sırasında, Server ve Database seviyesinde çeşitli roller ve izinler atanır. SQL Server'da kullanıcıların hangi işlemleri yapabileceği Role yapıları ile düzenlenir. Rollerin doğru bir şekilde atanması, veritabanı üzerinde meydana gelebilecek hataların, veri kaybının ve güvenlik açıklarının önlenmesi açısından son derece önemlidir. SQL Server’da Fixed Server Roles ve Fixed Database Roles olmak üzere önceden tanımlanmış iki ana rol kategorisi bulunur.
Fixed Server Roles, SQL Server seviyesinde tanımlanmış roller olup sunucu genelinde geniş yetkiler içerir. Örneğin sysadmin rolü, SQL Server’daki tüm işlemleri yapabilme yetkisine sahiptir. Bu, veritabanının tamamına erişim, tabloları değiştirme, kullanıcı hesaplarını yönetme gibi yetkiler içerir. Bu yüzden, sysadmin gibi geniş yetkilere sahip roller yalnızca veritabanı yöneticilerine atanmalıdır. Diğer roller arasında, securityadmin (güvenlik ayarlarını yönetir), serveradmin (sunucu yapılandırmasını yönetir) gibi önemli roller bulunur.
Fixed Database Roles ise veritabanı seviyesinde tanımlanmış rollerdir. Örneğin db_owner rolü, belirli bir veritabanı üzerinde tam kontrol sağlar ve veritabanındaki tüm işlemleri yapabilir. db_datareader rolü, sadece veritabanındaki verilere okuma erişimi verirken, db_datawriter rolü ise veri yazma yetkisini sağlar. Bu roller, daha kısıtlı ve spesifik yetkiler sunarak, kullanıcılara gereksiz fazla yetki verilmesinin önüne geçer.
Veritabanı güvenliğini artırmanın bir diğer önemli bileşeni, kullanıcıların hangi Schema'lar üzerinde işlem yapabileceklerinin belirlenmesidir. Schema'lar, veritabanı içerisindeki nesneleri mantıksal bir yapı altında organize eder ve kullanıcıların hangi nesnelere erişebileceğini, hangi işlemleri yapabileceğini sınırlar. Her kullanıcı, belirli bir Schema'ya atanabilir ve bu sayede o Schema içindeki tablo, prosedür veya diğer nesnelere erişim izinleri kontrol edilebilir. Örneğin, bir kullanıcı sadece belirli bir Schema'ya erişebilirken, diğer tüm veritabanı nesnelerine erişimi engellenmiş olabilir. Bu şekilde, veri güvenliği ve bütünlüğü daha etkin bir şekilde korunabilir.
SQL Server'da kullanıcı oluştururken dikkat edilmesi gereken önemli unsurlardan biri de least privilege prensibine göre hareket edilmesidir. Yani, kullanıcılara yalnızca görevlerini yerine getirmeleri için ihtiyaç duydukları en düşük yetkilerin verilmesi gereklidir. Örneğin, sadece veri sorgulama yetkisi gereken bir kullanıcıya veri değiştirme veya silme yetkisi vermek, güvenlik risklerini artırır. Least Privilege prensibi, sadece yetki kısıtlaması ile sınırlı kalmaz; aynı zamanda performans açısından da olumlu etkiler yaratır, çünkü gereksiz geniş yetkiler veritabanı üzerindeki yükü artırabilir.
Bir diğer önemli unsur ise kullanıcıların Permission seviyelerinde yapılan ince ayarlardır. SQL Server, her kullanıcının hangi işlemleri yapabileceğini belirlemek için ayrıntılı bir izin mekanizması sunar. Örneğin, bir kullanıcının sadece belirli bir tabloyu görüntüleyebilmesi veya sadece belirli bir tabloya veri ekleyebilmesi sağlanabilir. Kullanıcı izinleri belirlenirken, SQL Server'da her komut ve işlem için izinler tanımlanabilir, bu da çok ince ayarlarla kullanıcı erişim kontrolü yapılabilmesini sağlar. Özellikle hassas verilerin bulunduğu tablolar veya kritik işlemlerin yürütüldüğü prosedürler için bu izinlerin doğru bir şekilde atanması veritabanı güvenliği açısından elzemdir.
SQL Server Yeni Kullanıcı (Login) 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 pencerede 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.
1- Windows Authentication
SQL Server'da varsayılan ve en güvenli kimlik doğrulama modudur. Bu mod, yalnızca Windows hesaplarını ve Active Directory'de tanımlı olan Domain hesaplarını kabul eder. Windows Authentication kullanıldığında, SQL Server, kullanıcının kimlik doğrulamasını Windows işletim sistemi üzerinden gerçekleştirir. Bu da kullanıcının Windows ortamında oturum açtığında geçerli olan Principal Token'ını (kullanıcının kimlik belirteci) SQL Server'a ileterek kimlik doğrulamasını yapması anlamına gelir. SQL Server, kullanıcı adına ve parola doğrulama işlemi için Kerberos veya NTLM gibi Windows tarafından sağlanan güvenlik protokollerini kullanır.
Windows Authentication modunda, SQL Server oturum açma taleplerini Windows kimlik doğrulama mekanizması üzerinden yönetir. Bu, kullanıcının daha önce Windows işletim sistemine oturum açarken kullandığı kullanıcı adı ve parola ile SQL Server'a otomatik olarak bağlanabilmesini sağlar. Örneğin, bir kullanıcı zaten Windows ortamında oturum açmışsa, SQL Server için ekstra bir kimlik doğrulama gerekmeyecek ve mevcut oturum açma bilgileri kullanılarak bağlantı sağlanacaktır.
Eklemeler ve Teknik Derinlik
» Kerberos Protokolü: Windows Authentication Mode'da Kerberos protokolü kullanılır. Kerberos, daha güçlü bir güvenlik katmanı sağlar ve özellikle bir Domain ortamında çalışırken, Mutual Authentication (çift yönlü kimlik doğrulama) sağlar. Bu, hem Client hem de Server'ın kimliğinin doğrulanması anlamına gelir. Ayrıca Kerberos, kimlik doğrulama sürecini daha güvenli hale getirerek yetkisiz erişimi önler.
» NTLM Protokolü: Kerberos'un kullanılamadığı durumlarda, NTLM protokolü devreye girer. Ancak NTLM, Kerberos'a kıyasla daha zayıf bir güvenlik mekanizmasıdır ve genellikle eski sistemlerde veya Domain ortamı bulunmayan Workgroup yapılandırmalarında kullanılır. NTLM, istemcinin kimlik doğrulaması için şifreli parolalar kullanır, ancak çift yönlü kimlik doğrulama sağlamaz.
» Password Expiration ve Lockout: Windows Authentication, aynı zamanda Active Directory'de yapılandırılmış olan Account Lockout ve Password Expiration ilkelerini destekler. Bu, kullanıcıların belirli bir süre sonra şifrelerini değiştirmelerini zorunlu kılar ve hesaplarına yetkisiz erişim denemeleri olduğunda hesaplarını kilitleyebilir.
Windows Authentication Mode, güvenliğinin yanı sıra, merkezi kimlik doğrulama avantajı sunar. Domain ortamındaki kullanıcılar, yalnızca tek bir kimlik bilgisi ile oturum açar ve aynı kimlik bilgileriyle SQL Server'a erişim sağlar. Böylece, veritabanı yöneticileri SQL Server üzerinde ekstra kullanıcı yönetimi yapmak zorunda kalmazlar ve Active Directory’de yönetilen kullanıcı politikaları doğrudan SQL Server’a da uygulanır. Özellikle büyük ve dağıtık sistemlerde bu, yönetimsel yükü büyük ölçüde azaltır.
Domain Ortamı ve Workgroup Ortamında Kullanıcı Tanımları
» Domain Ortamı: SQL Server bir Domain ortamında çalışıyorsa, kullanıcı hesapları genellikle [DomainAdi\KullaniciAdi] formatında tanımlanır. Örneğin, kullanıcı adı firat olan bir kişi FIRATBOYAN\firat formatında oturum açabilir. Bu yapı, Active Directory üzerinden merkezi bir kimlik doğrulama sağlar ve kullanıcının Windows'ta oturum açtıktan sonra SQL Server'a ekstra bir kimlik doğrulama yapmadan erişmesine olanak tanır.
» Workgroup Ortamı: Eğer SQL Server bir Workgroup ortamında çalışıyorsa, yani bir Domain yapısı bulunmuyorsa, kullanıcı hesapları [PC-adi(Hostname)\KullaniciAdi] formatında tanımlanır. Örneğin, yerel bir bilgisayarda tanımlı firat kullanıcısı için PC-Name\firat şeklinde tanımlama yapılır. Bu durumda her bir kullanıcı hesabı, SQL Server sunucusunun bulunduğu bilgisayara göre lokal olarak doğrulanır. Bu model, genellikle küçük ağlar ve tek sunucuya sahip ortamlar için kullanılır.
Güvenlik Önerileri
» Kerberos Kullanımı: Mümkün olduğunda Kerberos protokolünün tercih edilmesi, NTLM'e kıyasla daha güçlü bir güvenlik sağlar. Domain ortamında çalışan SQL Server'lar için Kerberos kullanmak, güvenlik açıklarını minimize eder ve kullanıcıların kimliğinin doğruluğunu garanti altına alır.
» En Düşük Yetki İlkesi (Least Privilege): Windows Authentication kullanarak oluşturulan kullanıcıların, SQL Server üzerindeki yetkileri dikkatlice sınırlandırılmalıdır. Kullanıcılara yalnızca ihtiyaç duydukları yetkiler verilerek güvenlik açıkları önlenebilir. Örneğin, bir kullanıcıya sadece okuma yetkisi vermek, yazma veya silme işlemlerini engelleyerek veri bütünlüğünü koruyabilir.
» Password Policy'ler: Windows Authentication modunda, Active Directory'de tanımlı olan güçlü parola ilkelerinin SQL Server'a da uygulanması, hesapların daha güvenli olmasını sağlar. Kullanıcıların zayıf parolalar kullanmasını önlemek, sistemin güvenliğini artırır.
Oluşturacağım kullanıcıyı önce Windows Authentication Mode'da oluşturuyorum. Örnek olarak FIRATBOYAN\firat kullanıcısını oluşturuyorum.
2- SQL Server Authentication
SQL Server üzerinde yerel olarak tanımlanmış kullanıcı hesaplarını ve şifrelerini kullanarak kimlik doğrulama yapılmasını sağlayan bir kimlik doğrulama modudur. Bu mod, SQL Server ortamında Windows Authentication'dan farklı olarak, veritabanına erişecek her kullanıcı için SQL Server üzerinde ayrı bir kullanıcı hesabı ve parola tanımlanmasını gerektirir. SQL Server Authentication genellikle Domain ortamı dışındaki senaryolarda, farklı ağlardan erişen kullanıcılar veya veritabanı sunucusuna yerel Windows kullanıcı hesabı olmayan kullanıcılar için kullanılır.
SQL Server Authentication'ın Temel İşleyişi
SQL Server Authentication'da, her kullanıcı için SQL Server'da bir kullanıcı hesabı (Login) ve şifre oluşturulur. Bu kullanıcı bilgileri, SQL Server'ın içindeki sys.sql_logins sistem tablosunda saklanır ve kimlik doğrulama sırasında bu tabloya başvurulur. Her oturum açma isteğinde, SQL Server kullanıcı adı ve şifreyi alır, sys.sql_logins tablosunda bu bilgileri doğrular ve kullanıcıyı SQL Server'a bağlar. SQL Server Authentication, özellikle Windows Authentication kullanılamayan senaryolarda bir alternatif kimlik doğrulama yöntemi olarak devreye girer. Örneğin, SQL Server'ın bulunduğu sunucu, bir Domain ortamına dahil değilse veya kullanıcılar, Linux ve macOS gibi farklı platformlardan SQL Server'a bağlanıyorsa, SQL Server Authentication kullanılır.
Eklemeler ve Teknik Derinlik
» SQL Server'da Kullanıcı Hesapları: SQL Server Authentication ile oturum açan kullanıcılar için SQL Server, Login adı verilen kimlik doğrulama bilgilerini tutar. Bu login bilgisi, sadece SQL Server'da geçerlidir ve bu nedenle Windows ortamındaki kimlik doğrulama mekanizmalarından bağımsızdır. Her login için bir kullanıcı adı ve güçlü bir parola tanımlanmalıdır. Ayrıca, SQL Server parolaların karmaşık olmasını sağlamak için parola ilkeleri uygulayabilir. Bu, en kısa parola uzunluğu, karmaşık karakter zorunluluğu ve belirli sürelerde parolaların değiştirilmesi gibi kuralları içerir.
» Şifreleme ve Güvenlik: SQL Server Authentication ile kimlik doğrulaması yapıldığında, kullanıcı adı ve parola bilgileri SQL Server’a gönderilir ve kimlik doğrulama süreci bu bilgiler üzerinden yapılır. Ancak bu süreçte şifreleme kritik bir rol oynar. SQL Server, kullanıcı parolalarını hash ve salt yöntemleri ile şifreler. Hashing, parolanın güvenli bir şekilde saklanmasını sağlar, salt ise aynı parolaya sahip kullanıcıların farklı hash sonuçlarına sahip olmasını garantiler. Bu da SQL Server'da saklanan şifrelerin olası saldırılara karşı daha dirençli olmasını sağlar.
» Karmaşık Parola İlkeleri: SQL Server, SQL Server Authentication kullanıldığında Strong Password Policy (güçlü parola ilkeleri) uygulanmasını zorunlu kılabilir. Bu politika, şifrelerin belirli bir uzunlukta, büyük ve küçük harfler, sayılar ve özel karakterler içermesini şart koşar. Ayrıca, SQL Server parolaların periyodik olarak değiştirilmesi ve eski parolaların tekrar kullanılmamasını sağlayan politikaları da destekler. Bu tür şifreleme ve parola ilkeleri, SQL Server'ın kimlik doğrulama süreçlerini daha güvenli hale getirir.
» Bağımsız Kullanıcı Yönetimi: SQL Server Authentication, kullanıcıların SQL Server'dan bağımsız olarak yönetilmesini sağlar. Windows ortamından bağımsız olduğu için, SQL Server'a erişmesi gereken fakat aynı ağ veya Domain'de bulunmayan kullanıcılar için idealdir. Örneğin, harici bir iş ortağı veya farklı bir Network üzerinden SQL Server'a bağlanması gereken bir kullanıcı, SQL Server Authentication ile kimlik doğrulaması yaparak sunucuya erişebilir.
SQL Server Authentication Modunun Kullanım Alanları
1. Domain Dışı Ortamlar: SQL Server’ın Domain'e dahil olmadığı veya Windows Authentication’ın kullanılamadığı durumlarda SQL Server Authentication tercih edilir.
2. Farklı Ağlar veya Platformlar: SQL Server'a Windows ortamı dışında erişim sağlanıyorsa (Linux, macOS gibi), SQL Server Authentication daha yaygın olarak kullanılır.
3. Güçlü Güvenlik Politikası Gerektiren Senaryolar: SQL Server üzerinde şifreleme ve güçlü parola politikaları uygulanarak, SQL Server Authentication kullanıcıları için yüksek güvenlik sağlanabilir.
Güvenlik Riskleri ve Öneriler
SQL Server Authentication, her ne kadar kullanıcı kimlik doğrulama için esneklik sağlasa da bazı güvenlik risklerini de beraberinde getirir. Özellikle dışarıya açık sunucularda SQL Server Authentication kullanırken dikkat edilmesi gereken güvenlik önlemleri vardır:
» Şifreleme: SQL Server Authentication oturum açma bilgilerinin şifrelenmemiş bir bağlantı üzerinden iletilmesi güvenlik riski yaratabilir. Bu nedenle SSL kullanılarak SQL Server bağlantılarının şifrelenmesi önerilir.
» Güçlü Parola Politikaları: SQL Server Authentication kullanıldığında güçlü parola politikalarının etkinleştirilmesi, parola deneme yanılma saldırılarına karşı koruma sağlar.
» SQL Server'da IP Kısıtlamaları: Harici bağlantılarda SQL Server Authentication kullanıyorsanız, sunucunun yalnızca belirli IP aralıklarına erişime izin verecek şekilde yapılandırılması, güvenlik seviyesini artırır.
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.
SQL Server Management Studio (SSMS) üzerinde bir kullanıcı oluştururken, SQL Server Authentication yapılandırmasından sonra karşılaşılan ayarlar, kullanıcının kimlik doğrulama dışında nasıl yönetileceğini ve hangi varsayılan ayarlarla çalışacağını belirler. Bu ayarlar, SQL Server'a bağlanıldığında parola ilkeleri, parola süresi dolumu, varsayılan veritabanı ve dil gibi önemli yapılandırma seçeneklerini içerir.
Bu noktada, SQL Server Authentication ile kullanıcı kimliği doğrulandıktan sonra, kullanıcının güvenliği ve veritabanı üzerindeki işlemlerinin doğru bir şekilde kontrol edilmesi büyük önem taşır. Parola politikalarının uygulanması, varsayılan çalışma veritabanının belirlenmesi ve kullanıcının oturum açtığında hangi dil ayarlarıyla çalışacağının ayarlanması gibi işlemler, veritabanı yönetiminde büyük rol oynar. Bu ayarların her biri, kullanıcının SQL Server üzerindeki deneyimini kişiselleştirirken aynı zamanda güvenliği artırır ve sistem yönetimini kolaylaştırır.
1. Enforce Password Policy: Bu seçenek, SQL Server Authentication ile oluşturulan kullanıcı hesaplarının Windows veya Domain üzerindeki Password Policy kurallarına uymasını zorunlu kılar. Bu kurallar, parolaların karmaşık olması gerektiği durumlarda (büyük/küçük harf, sayı, özel karakter) devreye girer. Özellikle Active Directory üzerinden yönetilen parola ilkeleri uygulanır ve kullanıcıların güçlü parolalar kullanması sağlanır. Bu ayar etkinleştirildiğinde, SQL Server hesapları Windows Security Policy ile uyumlu hale gelir. Böylece hesapların güvenliğini artırmak amacıyla en kısa parola uzunluğu, karakter çeşitliliği ve belirli bir süre içinde parola değiştirme zorunluluğu gibi kurallar devreye girer.
Ek Bilgi: Bu ayarın etkin olması durumunda, SQL Server üzerinde parola oluştururken Windows Server veya Domain Controller üzerindeki parola ilkeleri (örneğin, hesap kilitleme ve parola süresi dolma gibi güvenlik önlemleri) geçerli olur. SQL Server, bu ilkeyi ihlal eden parolaların kullanılmasını engeller.
2. Enforce Password Expiration: Bu seçenek, SQL Server'daki kullanıcı hesaplarına, belirli bir süre sonra parolanın geçerliliğini yitirmesini zorunlu hale getirir. Password Expiration politikası, parolaların periyodik olarak değiştirilmesini sağlar ve kullanıcının, SQL Server'da uzun süre aynı parolayı kullanmasını engeller. Bu özellikle güvenliği artırmak amacıyla kullanılır; çünkü zamanla zayıflayan parolaların değiştirilmemesi, saldırılara açık bir alan oluşturabilir.
Ek Bilgi: Bu ilke, Domain veya Windows işletim sisteminde tanımlı parola ilkeleri ile uyumlu şekilde çalışır. Parolanın süresi dolduğunda, kullanıcı bir sonraki oturum açışında parolasını değiştirmek zorunda kalır. Bu işlem, SQL Server Management Studio (SSMS) veya başka bir bağlantı aracı kullanılarak gerçekleştirilir. Süresi dolmuş parolaların otomatik olarak engellenmesi, özellikle kritik veritabanlarına erişim sağlanırken güvenliği bir kat daha artırır.
3. User must change password at next login: Bu seçenek etkinleştirildiğinde, SQL Server Authentication kullanıcılarının, bir sonraki oturum açışlarında mevcut parolalarını değiştirmeleri zorunlu hale gelir. Bu özellik, genellikle yeni bir kullanıcı oluşturulduğunda veya parolası sıfırlanan bir kullanıcı için kullanılır. Parola değişikliği işlemi, oturum açıldıktan sonra SQL Server Management Studio (SSMS) veya başka bir SQL bağlantı aracı üzerinden yapılabilir. Kullanıcı, belirlenen güçlü parola ilkelerine uyan yeni bir parola belirler.
Ek Bilgi: Bu seçenek, varsayılan bir parolanın ya da güvensiz bir parolanın kullanıcılarda kalıcı hale gelmesini önlemek için etkili bir yöntemdir. Yeni bir kullanıcı oluşturulurken veya mevcut bir kullanıcının parolası sıfırlanırken güvenlik açısından bu ilkenin uygulanması önemlidir. Böylece, kullanıcı kendi kişisel parolasını belirleyerek daha güvenli bir erişim sağlar.
4. Default Database: Bu seçenek, SQL Server'a bağlanan kullanıcının hangi veritabanına yönlendirileceğini belirler. Kullanıcı oturum açtığında otomatik olarak bu varsayılan veritabanına giriş yapar. Eğer Default Database seçeneği ayarlanmazsa, kullanıcı varsayılan olarak master veritabanına yönlendirilir. Ancak kullanıcılar spesifik bir veritabanında çalışıyorsa, buraya erişim sağlamak için bu ayarın doğru yapılandırılması gereklidir.
Ek Bilgi: Kullanıcının erişim izni olmayan bir veritabanı Default Database olarak ayarlanırsa, kullanıcı oturum açmaya çalışırken bir hata alabilir. Bu nedenle her kullanıcının varsayılan veritabanı dikkatlice seçilmelidir. Özellikle çok sayıda veritabanı üzerinde çalışan büyük ölçekli sistemlerde, kullanıcıların doğru veritabanına otomatik yönlendirilmesi, çalışma süreçlerini hızlandırır.
5. Default Language: Bu seçenek, SQL Server üzerindeki dil ayarlarını belirler. Kullanıcının oturum açtığında alacağı hata mesajları, tarih/saat formatı ve SQL Server'da kullanılan diğer dil ayarları bu seçenek üzerinden tanımlanır. Kullanıcıya özgü bu dil ayarı, SQL Server üzerindeki komut ve mesajların kullanıcı tarafından daha anlaşılır olmasını sağlar.
Ek Bilgi: SQL Server, çoklu dil desteği sunar ve bu dil ayarı ile her kullanıcının kendi diline uygun ayarlarla çalışması sağlanabilir. Özellikle farklı dil konuşan ekiplerin çalıştığı ortamlarda veya çok uluslu şirketlerde bu ayar, kullanıcıların SQL Server ile daha verimli bir şekilde etkileşim kurmasına yardımcı olur. sp_configure komutu kullanılarak sunucu genelinde dil ayarı değiştirilebilirken, Default Language ayarı kullanıcı bazında bu dili değiştirme imkanı sunar.
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.
Server & Database Kullanıcı Rol ve İzin Atamaları
SQL Server'da veritabanı güvenliğini yönetmenin en temel unsurlarından biridir. Bu süreç, kullanıcıların veritabanı ve sunucu seviyesindeki yetkilerinin tanımlanmasını ve kontrol edilmesini sağlar. SQL Server'da her kullanıcıya belirli roller ve izinler atanarak, hangi işlemleri yapabilecekleri, hangi verilere erişebilecekleri ve hangi görevleri üstlenebilecekleri net bir şekilde belirlenir. Bu model, güvenliğin sağlanmasının yanı sıra, sistemin düzenli ve etkin bir şekilde işletilmesine olanak tanır.
Kullanıcılar, Server Roles ve Database Roles aracılığıyla çeşitli yetkilerle donatılabilir. Rollerin doğru bir şekilde atanması, özellikle büyük ve çok kullanıcılı veritabanı ortamlarında, veritabanı güvenliğinin sağlanmasında kritik bir rol oynar. İzinler ise, kullanıcının belirli bir veri kaynağı üzerinde yapabileceği işlemleri sınırlar. SQL Server, kullanıcıların sadece ihtiyaç duydukları yetkilerle donatılması prensibine dayanarak, güvenlik risklerini minimize eder.
Bu rol ve izin atama mekanizması, SQL Server yöneticilerine esneklik sağlarken, aynı zamanda sistem üzerindeki işlemleri ve erişimleri kontrol altında tutar. Doğru yapılandırılmış roller ve izinler, veritabanı yönetimini kolaylaştırır ve kullanıcıların sorumlu oldukları görevleri güvenli bir şekilde yerine getirmelerine olanak tanır.
1- SQL Server Rolleri - Server Roles
SQL Server'da roller, kullanıcılara belirli yetkiler atamak için kullanılan gruplardır. Bu gruplar sayesinde, her bir kullanıcıya özel yetki tanımlamak yerine, kullanıcıları belirli roller altında toplayarak onların yetkilerini yönetmek çok daha kolay hale gelir. Server Roles, SQL Server'ın sunucu seviyesindeki işlemlerini yürütmek için kullanıcıya verilen yetkilerdir. Her SQL Server oturumu (Login), bir ya da daha fazla server rolüne atanabilir ve bu roller aracılığıyla SQL Server'ın genel işleyişine dair çeşitli yetkiler kazanabilir.
Varsayılan olarak bir SQL Server oturumu oluşturulduğunda, kullanıcı herhangi bir yönetici yetkisine sahip olmaz ve sadece public rolüne atanır. Public rolü, SQL Server'a bağlanan her kullanıcının sahip olduğu varsayılan, kısıtlı yetkilere sahip roldür. Ancak, bir kullanıcıya yönetici yetkileri verilmek isteniyorsa, Server Roles penceresinden ilgili rol atanmalıdır.
SQL Server Yönetimsel Roller ve Görevleri
» bulkadmin (Bulk Insert Administrator): Toplu ekleme işlemlerinden sorumlu yönetici rolüdür. Bu role sahip kullanıcı, SQL Server'a toplu veri ekleme işlemlerini gerçekleştirebilir. Bu, büyük miktarda veri yükleme işlemlerinde kullanılan bir roldür. BULK INSERT komutu ile CSV beya Excel dış veri kaynaklarından ya da dosyalardan (örneğin, CSV veya Excel dosyalarından) SQL Server veritabanına veri eklemek için kullanılır.
Ek Bilgi: Özellikle dış sistemlerden veri çekme ve büyük veri kümelerinin hızlı bir şekilde SQL Server'a aktarılması gerektiğinde kullanışlıdır. Ancak, bu işlem yüksek kaynak kullanımı gerektirdiğinden, yetkinin dikkatle verilmesi önerilir.
» dbcreator (Database Creators): Veritabanı oluşturma ve değiştirme işlemlerinden sorumlu kullanıcı rolüdür. Bu rol, SQL Server'da yeni veritabanları oluşturma, mevcut veritabanlarını değiştirme veya silme yetkisini içerir. Yazılımcılar genellikle bu yetkiye ihtiyaç duyarlar, özellikle test ve geliştirme süreçlerinde yeni veritabanları oluşturma gerekliliği olduğunda bu rol sık kullanılır.
Ek Bilgi: Bu rol, veritabanı oluşturma, silme ve değiştirme işlemlerini yapma yetkisi verirken, veritabanı içinde tüm yetkilere sahip olmayı garanti etmez. Her veritabanı için ek yetkilendirme gerekebilir.
» diskadmin (Disk Administrator): SQL Server'daki disklerle ilgili işlemleri yönetir. Bu rol, SQL Server veritabanının dosya sistemindeki dosyalarını yönetme yetkisi verir. Örneğin, Main Database Files (MDF), Transaction Log Files (LDF) gibi veritabanı dosyalarının konumlarını değiştirme veya yeni disk ekleme işlemleri diskadmin rolü ile gerçekleştirilir.
Ek Bilgi: Bu role sahip olan bir kullanıcı, SQL Server'ın depolama yapılandırmasını değiştirebilir, bu nedenle veritabanı performansını ve bütünlüğünü etkileyebilecek işlemleri yönetirken dikkatli olunmalıdır.
» processadmin (Process Administrator): SQL Server'daki işlem (process) yönetiminden sorumlu kullanıcı rolüdür. Bu rol, SQL Server üzerinde çalışan tüm süreçleri izleyebilir, durdurabilir veya sonlandırabilir. SQL Server üzerinde çalışan işlemler arasında bağlantı işlemleri, sorgu süreçleri ve diğer hizmetler yer alır.
Ek Bilgi: Bu rol özellikle kill komutunu kullanarak, SQL Server'da kilitlenmiş ya da uzun süredir çalışan ve veritabanı performansını olumsuz etkileyen işlemleri sonlandırmak için kullanışlıdır. Ancak, dikkatsiz kullanım sunucu üzerindeki tüm işlemleri kesintiye uğratabileceği için dikkatli yönetilmelidir.
» public (Herkese Kısıtlı Hak): SQL Server'da varsayılan olarak tüm kullanıcıların atandığı roldür. Public rolü, en düşük seviyeli izinlerle yapılandırılmıştır ve SQL Server'a yeni bir oturum açan her kullanıcının başlangıç yetkilerini belirler. Bu rol, kullanıcının temel verilere erişmesine izin verir, ancak yönetici yetkileri içermez.
Ek Bilgi: Public rolü genellikle güvenlik açısından kritik öneme sahip değildir. Ancak, tüm kullanıcıların bu role sahip olması nedeniyle public rolüne ek yetkiler vermekten kaçınılmalıdır. Aksi takdirde, SQL Server'ın güvenliği riske girebilir.
» securityadmin (Security Administrator): Güvenlik yönetiminden sorumlu kullanıcı rolüdür. Bu rol, SQL Server'da oturum (login) oluşturma, silme ve yönetme yetkisini verir. Securityadmin rolü, SQL Server üzerinde yeni oturumlar açabilir, mevcut oturumları silebilir ya da yetkilerini düzenleyebilir. Ancak, bu rol sunucu ayarlarını değiştirme veya diğer yönetici rolleri atama yetkisi vermez.
Ek Bilgi: Securityadmin rolü, SQL Server'daki güvenlik politikalarını yönetir, ancak server genelindeki ayarları değiştirme yetkisine sahip değildir. Bu nedenle, güvenlik yapılandırması ve kullanıcı yetkilendirmesi için kullanışlıdır, fakat tam sunucu yönetimi için yeterli değildir.
» serveradmin (Server Administrator): Sunucu ayarlarını yönetmekten sorumlu kullanıcı rolüdür. Bu rol, SQL Server sunucusunun genel ayarlarını değiştirme, sunucu yapılandırmalarını yönetme ve sunucuyu yeniden başlatma gibi işlemleri içerir.
Ek Bilgi: Serveradmin, sunucu üzerinde geniş yetkiler sağlar. Örneğin, SQL Server hizmetlerinin başlatılması, durdurulması veya yeniden başlatılması gibi işlemler bu rol aracılığıyla yapılabilir. Bu yüzden, yalnızca yetkin ve güvenilir kullanıcılara verilmesi gereken bir roldür.
» setupadmin (Setup Administrator): SQL Server kurulum ve ayarlarını yönetir. Bu rol, SQL Server'da yeni Linked Server yapılandırması yapma, sunucu seviyesinde Replication gibi hizmetleri yapılandırma yetkisine sahiptir.
Ek Bilgi: Setupadmin rolü, SQL Server'ın ağ ayarlarını ve sunucu yapılandırmalarını yönetmek için kullanılır. Bu role sahip kullanıcılar, diğer SQL Server örnekleri ile bağlantılar oluşturabilir ve serverlar arasında veri alışverişini yönetebilir.
» sysadmin (System Administrator): SQL Server'daki en geniş yetkilere sahip olan sistem yöneticisi rolüdür. Bu rol, sunucu üzerindeki tüm işlemleri yapma yetkisini sağlar. Bir sysadmin, SQL Server'da veritabanlarını yönetebilir, kullanıcı oturumlarını kontrol edebilir, sunucu yapılandırmalarını değiştirebilir ve SQL Server hizmetlerini yönetebilir.
Ek Bilgi: Sysadmin rolü, SQL Server'daki en güçlü roldür ve sınırsız yetkiye sahiptir. Bu yüzden yalnızca güvenilir ve deneyimli yöneticilere atanmalıdır. Tüm veritabanı işlemlerine ve sunucu yönetimine erişim sağladığından dolayı yanlış kullanımda büyük riskler taşıyabilir.
2- Veri Tabanı Rolleri (Database Roles) - User Mapping
SQL Server’da bir kullanıcıya Server Roles atandığında, bu kullanıcıya sunucu seviyesinde geniş yetkiler tanımlanır. Ancak bazı durumlarda kullanıcının, sadece belirli bir veri tabanında ya da veri tabanlarında yetkilendirilmesi gerekir. Bu gibi durumlarda, Login Properties penceresindeki User Mapping sekmesi üzerinden kullanıcıya yetki ataması yapılır. Bu sekme, kullanıcıların spesifik bir veri tabanına bağlandığında hangi yetkilere sahip olacağını, yani hangi Database Roles (Veri Tabanı Rolleri) altında görev yapacağını belirler.
User Mapping, bir kullanıcının hangi veri tabanlarına erişebileceğini ve bu veri tabanları üzerinde ne tür işlemler yapabileceğini yönetmenin en temel yollarından biridir. Kullanıcı bir veri tabanına atandıktan sonra, o veri tabanına özel roller ve izinler atanır. Bu rollere ve izinlere bağlı olarak kullanıcı; veriyi görüntüleme, ekleme, güncelleme, silme veya veri tabanı objeleri üzerinde işlem yapma yetkisine sahip olabilir.
Kullanıcı Rolleri (Database Roles) ve Yetkilendirme
Kullanıcılara, her bir veri tabanı için farklı roller atanabilir. Örneğin, bir kullanıcı Database002 veri tabanında sadece okuma yetkisine sahip olabilirken, başka bir veri tabanında ekleme ve güncelleme işlemlerine de izin verilebilir. SQL Server'daki Database Roles, kullanıcıların bir veri tabanı üzerindeki belirli işlemleri yapmalarını sağlamak için önceden tanımlanmış izinler grubudur.
Veri tabanı kullanıcı rolleri genel olarak şunlardır:
» db_datareader: Kullanıcının veri tabanındaki tüm tabloları okumasına izin verir.
» db_datawriter: Kullanıcının veri tabanındaki tüm tablolara veri eklemesine veya veriyi güncellemesine izin verir.
» db_owner: Kullanıcıya veri tabanı üzerinde tam yetki verir. Bu rol, veri tabanı sahibine tüm veri tabanı işlemlerini yapabilme yetkisini tanır.
» db_securityadmin: Güvenlik ayarlarını yönetir ve diğer kullanıcıların izinlerini düzenler.
» db_ddladmin: veri tabanı yapısını değiştirebilir, tablolar ve diğer veri tabanı nesneleri üzerinde değişiklikler yapabilir.
Kullanıcıya User Mapping alanında belirli bir veri tabanı atanıp, bu veri tabanı üzerinde uygun roller tanımlandığında, kullanıcının sunucunun genelinde değil, sadece belirlenen veri tabanında işlem yapması sağlanır. Bu, özellikle çoklu veri tabanı yapılarına sahip sistemlerde kullanıcıların sadece belirli verilere erişmesini sağlayarak güvenliği artırır. Kullanıcı, erişim izni olmadığı diğer veri tabanlarına erişemez ve işlem yapamaz.
User Mapping ve Güvenlik
User Mapping, kullanıcıların sadece ihtiyaç duydukları veri tabanlarına ve verilere erişmesini sağlamak açısından kritik bir yapılandırma aracıdır. Bu sayede, veri tabanı seviyesinde gereksiz yetkilendirmeler engellenmiş olur ve sistem güvenliği artırılır. Kullanıcılar, sadece kendi yetkilerine tanımlanmış veri tabanlarında çalışabilir, diğer veri tabanlarına erişemezler. Bu durum, özellikle çok kullanıcılı ortamlarda, Least Privilege Principle (en düşük yetki ilkesi) doğrultusunda kullanıcıların görevlerine göre yetkilendirilmesini sağlar.
3) Nesne İzinleri (Object Permissions) - Securables
Securables İzinleri SQL Server’da kullanıcıların, rollerin veya oturumların (Logins) belirli kaynaklar (nesneler) üzerinde ne tür işlemler yapabileceğini tanımlayan bir güvenlik modelidir. Securables terimi, SQL Server'da korunan ve üzerinde işlem yapılabilecek nesneleri ifade eder. Bu nesneler, sunucu seviyesinde, veritabanı seviyesinde veya daha alt seviyede olabilir ve her biri farklı güvenlik ayarları ile korunur. Securables üzerinden yetkilendirme, SQL Server güvenlik mimarisinin en önemli bileşenlerinden biridir, çünkü sistemin hangi kullanıcılarının hangi işlemleri yapabileceğini belirler.
Securables Nedir?
SQL Server'da Securables, üç ana kategoriye ayrılır:
1. Server (Sunucu) Seviyesi: SQL Server sunucusunun genelinde korunan nesneler. Örnekler arasında sunucunun kendisi, sunucu logins, Linked Servers ve Endpoint’ler yer alır.
2. Database (Veritabanı) Seviyesi: SQL Server veritabanında korunan nesneler. Bu kategoride tablolar, Views , Stored Procedures, fonksiyonlar ve veritabanı rollerini içeren nesneler yer alır.
3. Schema veya Object (Şema ve Nesne) Seviyesi: Daha spesifik düzeyde, tabloya ait sütunlar veya bir prosedüre ait parametreler gibi nesneler. Bu seviyede nesneler çok daha ince tanımlı izinlere tabi olabilir. Bu kategorilere giren her nesne üzerinde, yetkilendirme işlemi yapılabilir ve belirli izinler verilebilir.
İzin Türleri
SQL Server'da Securables ile ilişkili üç ana izin türü vardır:
1. GRANT: Bu izin, kullanıcının belirli bir securable üzerinde belirli bir işlemi yapmasına izin verir. Örneğin, bir tablo üzerinde SELECT izni verildiğinde, kullanıcı bu tabloyu sorgulayabilir.
2. DENY: GRANT'in tam tersidir. Kullanıcının belirli bir securable üzerinde bir işlem yapmasını açıkça engeller. DENY izni, o kullanıcıya başka bir rolden ya da atama ile GRANT izni verilmiş olsa dahi, bu yetkiyi geçersiz kılar.
3. REVOKE: Verilen bir izni veya reddedilen bir yetkiyi geri alır. Eğer bir kullanıcıya bir izin verilmişse ve bu izin kaldırılmak isteniyorsa, REVOKE komutu kullanılır. REVOKE, bir nesne üzerindeki izinleri temizler, ancak o nesneye yeni bir izin vermez.
Securables Üzerinde Tanımlanan Başlıca İzinler:
SQL Server'da Securables üzerinde tanımlanabilen izinler, kullanıcının ya da rolün hangi işlemleri gerçekleştirebileceğini belirler. İşte bazı ana izinler:
» SELECT: Veritabanındaki verileri okuma izni verir. Bu izin, kullanıcıya bir tablo, görünüm ya da tablo sütunlarına erişim sağlar.
» INSERT: Veritabanına yeni veri ekleme izni verir. Kullanıcı bu izne sahip olduğunda, belirli tablolara yeni satırlar ekleyebilir.
» UPDATE: Mevcut verileri değiştirme izni verir. Bu izin, kullanıcıya tablolar veya görünümler üzerinde değişiklik yapma yetkisi tanır.
» DELETE: Veritabanındaki mevcut verileri silme yetkisini verir.
» EXECUTE: Stored Procedures (saklı yordamlar) veya fonksiyonlar gibi kodların çalıştırılmasına izin verir.
» ALTER: Bir veritabanı nesnesinde (örneğin bir tablo ya da prosedür) değişiklik yapma yetkisi tanır.
» CONTROL: Bu izin, bir nesne üzerinde tam yetki sağlar. CONTROL iznine sahip olan bir kullanıcı, o nesne üzerinde her türlü işlemi yapabilir. Bu izin, neredeyse OWNER yetkisine eşdeğerdir.
» TAKE OWNERSHIP: Bir nesnenin sahipliğini değiştirme yetkisini verir. Bu izni alan kullanıcı, o nesnenin sahibi olabilir ve sahibi olduğu nesne üzerinde tam kontrol sahibi olabilir.
Securables Kullanımı ve Güvenlik Modelleri
SQL Server’da Securables izinleri, yetkilendirme ve güvenlik denetimi için kullanılır. Yetkilendirme modeli, her kullanıcıya en düşük yetki prensibi (Least Privilege Principle) doğrultusunda gereken en düşük yetkiyi vermeye dayalıdır. Bu prensip, kullanıcının ihtiyaç duyduğu kadar izinle donatılmasını sağlar, gereksiz yetkiler verilerek güvenlik açıkları oluşturulmaz.
Örneğin, bir kullanıcının yalnızca belirli tablolara veri ekleyebilmesi gerekiyorsa, bu kullanıcıya INSERT izni verilir. Ancak, aynı kullanıcıya DELETE veya UPDATE gibi daha geniş yetkiler verilmez. Bu şekilde, veritabanı güvenliği korunur ve hataların ya da kötü niyetli girişimlerin önüne geçilir.
Securables izni yapılandırırken, dikkat edilmesi gereken kritik noktalar:
• DENY izni, her zaman GRANT izninden baskındır. Eğer bir kullanıcıya aynı nesne üzerinde GRANT izni verilmişse bile, aynı nesne üzerinde DENY varsa kullanıcı bu işlemi gerçekleştiremez.
• REVOKE, izinleri iptal eder, ancak izni reddetmez. Bir kullanıcıya GRANT veya DENY izni verilmişse ve bu izinler geri alınmak isteniyorsa, REVOKE kullanılır.
• Server Roles ve Database Roles aracılığıyla verilen yetkiler, daha ince ayarlı izinler (örneğin sadece belirli bir tabloya erişim) gerektiren durumlarda Securables ile desteklenir.
İzinlerin Hiyerarşik Yapısı
SQL Server’da izinler, hiyerarşik bir yapıdadır. Bir üst seviyede verilen bir izin, alt seviyelerde de geçerli olabilir. Örneğin, bir kullanıcının bir veritabanı üzerindeki CONTROL izni varsa, o veritabanı içindeki tüm tablolar üzerinde CONTROL yetkisine sahiptir. Ancak bu izin, daha alt seviyelerde farklı izinlerle sınırlanabilir veya genişletilebilir. Bu hiyerarşi, güvenlik yönetimini basitleştirirken aynı zamanda esnek bir yapı sunar.
Securables İzinleriyle İlgili Güvenlik Tavsiyeleri:
1. En Düşük Yetki Prensibi: Kullanıcılara yalnızca ihtiyaç duydukları izinleri vermek en güvenli yoldur. Fazladan yetki vermek, güvenlik açıklarına neden olabilir.
2. DENY İzni Dikkatle Kullanılmalı: DENY izni, diğer tüm izinlerden daha önceliklidir. Eğer bir kullanıcıya DENY izni verilirse, diğer roller aracılığıyla verilmiş GRANT izinleri etkisiz hale gelir.
3. Güvenlik İzleme: SQL Server'daki izinler zaman zaman gözden geçirilmeli ve gerekirse kullanıcı izinleri yeniden yapılandırılmalıdır. Özellikle fazla yetkilendirilmiş kullanıcılar, sistem güvenliğini tehdit edebilir.
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.