Read-Only Kullanıcı Oluşturma :
Kullanıcı yönetimi veritabanlarında en dikkat edilmesi gereken konulardan biridir. Kullanıcı yetkileri ihtiyaca göre verilmelidir, aksi durumda sadece select yapması gereken bir kullanıcıda farklı yetkiler de verildiğinde istenmeyen durumlarla karşılaşılabilir.
SQL Server veritabanında bir kullanıcı oluştururken sadece verileri görmesini, herhangi bir değişiklik yapmasını istemediğimiz sadece select atmasını istediğimiz durumlar olabilir.
Read-only kullanıcıyı veritabanı bazında da yapabiliriz, server bazında da bu yazıda her ikisi için de nasıl oluşturulacağını gösteriyor olacağım.
- Veritabanı bazında read-only kullanıcı oluşturma
- Server bazında read only kullanıcısı oluşturma
1.Veritabanı bazında read-only kullanıcı oluşturma
1.1 SSMS ile kullanıcı oluşturma :
Adım 1: Logins -> New Login diyelim
- Windows Authentication : Eğer varolan bir windows kullanıcısını SQL Server kullanıcısı olarak tanımlamak istiyorsak
- SQL Server Authentication : SQL Server üzerinde bir kullanıcı tanımlamak istiyorsak
- Enforce Password Policy : Domaindeki ya da Windows işletim sistemimizdeki PasswordPolicy kuralları geçerli olur. Şifre kurala uymuyorsa hata verir.
- Enforce Password Expiration : Domain veya windowstaki şifre geçerlilik süresinin geçerli olmasını istiyorsak. Yapılandırma nasılsa ona göre şifre expire olacak ve güncellenmesi gerekecektir.
- User must change password at next login : Kullanıcı bağlantı sağladığında şifresini değiştirmesini istediğimiz durumlarda kullanılabilir.
- Default Database : SSMS bağlandığında kullanıcı bazlı, çalışacak olan veritabanı otomatik olarak gelirç
- Default Language : SSMS üzerinde dil ayarları, format, hata mesajları istenilen dilde bu seçenek ile ayarlanabilir.
Ben test amaçlı olarak oluşturduğumdan SQL Server Authentication ile ReadOnlyUser isimli bir kullanıcı oluşturdum ve password ayarlamalarında herhangi bir işaretleme yapmadım
Adım 3: Veritabanı bazında yetkilendirme yapacağımızdan User Mapping kısmına gelelim. Hangi veritabanı üzerinde read only şekilde yapmak istiyorsak işaretleyelim (ben DENEME isimli veritabanında yapacağım) ve db_datareader veritabanı rolünü seçelim ve OK diyelim
Adım 4: Şimdi oluşturmuş olduğumuz kullanıcı ile bağlantı sağlayalım.
Adım 5: Eveet ReadOnlyUser kullanıcısı ile instance’ımıza bağlantı sağlayabildik.
Adım 6: Şimdi DENEME veritabanında bir tabloya select atmayı deneyelim.
Aşağıda da görüldüğü gibi ReadOnlyUser kullanıcısı ile veri güncelleme, kayıt girme vb gibi işlemler yapmaya çalışırsak “permission was denied” hatası almaktayız
Peki DENEME isimli veritabanında biz sadece select yetkisi vermiştik, başka bir veritabanından veri çekmeye çalışırsak aşağıda da görüldüğü gibi “The server principal “ReadOnlyUser” is not able to access the database “READ_ONLY_DB” under the current security context.” hatası almaktayız
1.2 SSMS ile kullanıcı oluşturma :
Aynı işlemleri TSQL komutları ile de aşağıdaki şekilde yapabilmekteyiz
USE [master] GO CREATE LOGIN [ReadOnlyUser] WITH PASSWORD=N'', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF GO USE [DENEME] GO CREATE USER [ReadOnlyUser] FOR LOGIN [ReadOnlyUser] GO USE [DENEME] GO ALTER ROLE [db_datareader] ADD MEMBER [ReadOnlyUser] GO
Veritabanı bazında kullanıcıya read-only yetkisi bu şekilde verebilmekteyiz. Peki bizim onlarca veritabanımız olduğunu düşünelim ve hepsinde okuma yetkisi vermemiz gerekirse ne yapmalıyız?
2. Server bazında read only kullanıcısı oluşturma
Eğer biz instance bazında read-only kullanıcı oluşturmak istiyorsak yani instance üzerindeki tüm veritabanlarında okuma yapmasını istiyorsak aşağıdaki şekilde yapabilmekteyiz
Bizim kullanıcılarımıza tanımlayabildiğimiz server rolleri aşağıda verilmiştir bunlar hakkında daha ayrıntılı anlatıma buradan ulaşabilirsiniz.
Adım 1: Öncelikle gerekli ayrıcalıklara sahip bir Server Role oluşturalım (Create server role with Required Privileges:). Biz sadece SELECT atabilmesini istediğimiz için aşağıdaki şekilde oluşturduk
CREATE SERVER ROLE Readonly
GO GRANT CONNECT ANY DATABASE TO Readonly GO GRANT SELECT ALL USER SECURABLES TO Readonly GO
Adım 2: read_only_user isimli bir kullanıcı oluşturup, oluşturduğumuz server role bu kullanıcıyı ekleyelim( Create login and add to the above role)
USE master
GO CREATE LOGIN [read_only_user] WITH PASSWORD=N'111' GO ALTER SERVER ROLE Readonly ADD MEMBER [read_only_user]
Evet gördüğünüz gibi server rolümüz ve kullanıcımız başarılı şekilde oluştu
Adım 3: Bağlantı sağlayalım
Adım 5: Oluşturduğumuz kullanıcı ile tablo oluşturmaya çalıştığımızda aşağıdaki gibi “CREATE TABLE permission denied in database ‘DENEME’.” hatası aldık
Bu yazıda sizlere veritabanı bazında ve instance bazında read-only kullanıcı oluşturma adımlarını gösterdim diğer yazılarımda görüşmek dileğiyle..
Bir cevap yazın