Read Only Kullanıcı Oluşturma

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.

  1. Veritabanı bazında read-only kullanıcı oluşturma
  2. 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

Adım 2: New Login ekranında kullanıcı ile ilgili ayarlamalarımızı yapalım.
  • 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 4: Oluşturmuş olduğumuz kullanıcı ile veritabanları üzerinde select atmaya çalışalı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

Kişisel Web sayfama hoş geldiniz..