Bilgisayar Mühendisliği Bölümü Veri Tabanı Yönetim Sistemleri 1 Ders 12 SQL Server'da Kullanıcı Yönetimi Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği Bölümü
Login ve User SQL Server'da Login nesnesi bir sunucuya giriş için, User ise sunucu altındaki bir veritabanına giriş için kullanılır. Öncelikle sunucu üzerinde bir login oluşturup, daha sonra hangi veritabanı üzerinde o login'e bağlanma hakkı vereceksek, ilgili veritabanı üzerinde o login için bir user oluştururuz. Bir login ismi aynı veritabanı üzerinde birden fazla kullanıcı ile ilişkilendirilemez (farklı veritabanları üzerinde kullanılabilir). Windows kullanıcıları da login'e bağlanabilir. SQL Server Management Studio üzerinden de Login, Kullanıcı, Rol, Şema yaratma ve yetki verme işlemleri yapılabilir. Ama sunuda T-SQL kodları ile yapılması gösterilecektir.
LOGIN Yaratma SQL Server Authentication için: CREATE LOGIN loginAdı WITH PASSWORD = 'şifresi' MUST_CHANGE Windows Authentication için: CREATE LOGIN [domainAdı\loginAdı] FROM WINDOWS Opsiyonel olarak varsayılan veritabanı adı ve varsayılan dil seçilebilir: DEFAULT_DATABASE = yeniDB DEFAULT_LANGUAGE = Turkish
USER Yaratma Genel Kullanım: CREATE USER kullanıcıAdı FOR LOGIN loginAdı Kullanıcı yaratılırken varsayılan şema atanabilir: CREATE LOGIN AltanMESUT WITH PASSWORD = '8fdKJl3$nlNv3049js'; USE yeniDB; CREATE USER Altan FOR LOGIN AltanMESUT WITH DEFAULT_SCHEMA = yeniSema; Altan kullanıcısının yaratacağı nesneler bir şema belirtilmez ise yeniSema altında yer alacaktır.
Şema (Schema) Şema, tablo ve prosedür gibi veritabanı nesnelerini barındıran yapıdır. Kullanıcı ve rol gibi yapılar ise şema içinde yer almazlar. Şemanın sahibi bir kullanıcı veya rol olabilir. Seçimlik olarak kullanılabilen AUTHORIZATION ile şemanın sahibi olacak kullanıcı belirlenir. Eğer kullanılmazsa şemayı yaratan kullanıcı sahibi olur: CREATE SCHEMA Alinin AUTHORIZATION Ali Tüm sabit veritabanı rollerinin kendilerine ait farklı bir şeması vardır.
Roller Rol, birçok yetkinin bir araya getirilmesi ile oluşan yetki gruplarına verilen isimdir. Kişilere tek tek yetkiler verildiğinde, sonradan yetkilerin değiştirilmesi gerekirse, yine tek tek o kişilere değişikliğin uygulanmasını gerektirecektir. Oysa ki kişilere bir rol verilirse, bu rolün yetkileri değiştirilince o role sahip olan tüm kişilerin yetkileri değiştirilmiş olur. SQL Server üzerindeki yetkili kullanıcılar için sabit sunucu rolleri, veritabanına erişim yetkisi olan kullanıcılar için ise sabit veritabanı rolleri mevcuttur.
Sabit Sunucu Rolleri Dış dosyalardan alınan verileri tablolara yerleştirebilme (BULK INSERT) VT oluşturma ve değiştirme VT yedek (backup) dosyalarını yönetme Sunucu işlemlerini kontrol etme (erişimleri sonlandırabilir) Genel kullanıcılar için en yetkisiz rol Login, Rol yaratma gibi güvenlik işleri Sunucu temelli ayarlamalar (veritabanını açıp, kapatabilme yetkisi) Birbirine bağlı sunucuların kurulumu ve idaresi (SQL Server Replication) Tüm işleri yapabilen en yetkili rol (sa kullanıcısı bu rolün üyesidir)
Sabit Veritabanı Rolleri Kullanıcı yaratır, yetki verir Yedek (backup) alır Tüm tablolardaki verileri sorgulayabilir Tüm tablolar üzerinde değişiklik (DML işlemleri) yapabilir Veritabanında DDL işlemleri yapabilir Hiçbir tabloyu sorgulayamaz Hiçbir tablo üzerinde değişiklik yapamaz Tüm yapılandırma ve bakım işlemlerini yapar Rol üyelikleri ve yetkilendirme işlemlerini yapar
Rol Yaratma Geçeli veritabanında bir rol yaratmak için: CREATE ROLE rol_adı [AUTHORIZATION kullanıcı_adı] Seçimlik olarak kullanılabilen AUTHORIZATION ile rolün sahibi olacak kullanıcı belirlenir. Eğer kullanılmazsa rolü yaratan kullanıcı sahibi olur. Rolü yaratacak olan kullanıcıda CREATE ROLE yetkisi veya db_securityadmin sabit veritabanı rolüne üyelik olması gereklidir.
Role Kullanıcı Ekleme Rollere kullanıcıları üye yapmak veya üyelikten çıkarmak için ALTER ROLE komutu kullanılır. CREATE ROLE yeniRol; ALTER ROLE yeniRol ADD MEMBER Altan; ALTER ROLE yeniRol DROP MEMBER Altan; Rollere üye olarak başka bir kullanıcı tanımlı veritabanı rolü de atanabilir (sabit veritabanı rolleri üye olarak atanamaz). ALTER ROLE public ADD MEMBER yeniRol; Yukarıdaki kod ile public rolünün sahip olduğu tüm yetkilere yeniRol de sahip olur. Dolayısıyla yeniRol'e üye olan herkes te public yetkilerine sahip olur.
Yetkiler Kullanıcı veya Rol yaratıldıktan sonra veritabanı üzerinde neleri yapıp neleri yapamayacaklarını belirlemek için yetkiler verilir. Bu işlemler için kullanılan aşağıdaki 3 komut DCL (Data Control Language) komutları olarak bilinir: GRANT komutu ile yetki verilir (kullanıcı veya rol üyelerinin yapabilecekleri belirlenir) DENY komutu ile kısıtlama tanımlanır (kullanıcı veya rol üyelerinin yapamayacakları belirlenir) REVOKE komutu ile verilen yetki ve tanımlanan kısıtlamalar geri alınır.
GRANT ile yetki verme Genel kullanım aşağıdaki gibidir: GRANT <yetki> ON <nesne> TO <user, login, rol> "yeniRol" rolüne tablo yaratma yetkisi verilmesi: GRANT CREATE TABLE TO yeniRol Nesneler üzerinde yetki verilirken ON kullanılır. Dersler tablosu üzerinde değişiklik yapabilme (DML işlemleri) yetkisinin Ali, Ahmet ve Mehmet kullanıcılarına verilmesi: GRANT INSERT, DELETE, UPDATE ON Dersler TO Ali, Ahmet, Mehmet Eğer bu 3 kişiye db_datawriter sabit rolünü verdiyseniz, zaten tüm tablolar üzerinde DML işlemleri yapabilirler.
DENY ile kısıtlama tanımlama Kullanıcının belirli bir role atanması ile üzerine aldığı yetkilerden bazılarını engellemek için DENY ile kısıtlama getirebiliriz. Kullanımı GRANT ile benzerdir: DENY CREATE TABLE TO Hasan, Ali Ali ve Mehmet'in Notlar tablosunu sorgulamasını engellemek için: DENY SELECT ON Notlar TO Ali, Mehmet
REVOKE ile yetkiyi geri alma Hem GRANT ile verilen yetkilerin, hem de DENY ile tanımlanan kısıtlamaların geri alınması için kullanılır. Kullanım olarak yine GRANT ve DENY'a benzer, fakat TO yerine FROM kullanılır: REVOKE CREATE TABLE FROM yeniRol REVOKE SELECT ON Hocalar FROM Altan
Management Studio üzerinde kullanıcı işlemleri Aynı anda birden fazla login ile bağlantı açılabilir Login ve Sunucu Rolleri sunucunun Security düğümü altındadır Kullanıcılar, Şemalar ve Veritabanı Rolleri ise ilgili veritabanının Security düğümü altındadır Her VT'de olan dbo (database owner) kullanıcısı sa (system administrator) login ismi ile bağlanır. Kullanıcı, Rol, Şema ve Login yaratma işlemleri ilgili düğümlerde sağ tıklama ve "New …" seçimi ile açılan pencerede gerekli alanları doldurma yolu ile yapılabilir. 15
Kullanıcı özellikleri üzerinden yetki verme General: varsayılan şema değiştirilir Owned Schemas: Şema sahiplikleri ayarlanır Membership: Rol üyellikleri ayarlanır Search + All objects of the types + Tables kullanılırsa Securables listesinde tablolar listelenir. Seçilen tabloda ilgili yetki için aşağıda Grant/Deny tıklanır. "With Grant" seçili ise aldığı yetkiyi başkasına da verebilir.