Bu makalede mssql serverda login kavramıyla ilgili detaylı bilgilendirme yapmış olacağız..
1. Securables alanı, SQL Server Engine ile doğrudan alakalı yetkilendirmelerin gerçekleştirildiği alandır. SQL Server AlwaysOn, Endpoint ve Instance seviyesindeki detay yetkilendirmeler için kullanılmaktadır. İnstance altındaki security bölümünden herhangi bir login’in securables kısmı aşağıda gözükmektedir.

Herhangi bir database altındaki user’ın securables kısmında ise database bazlı işlemler yapılmaktadır. Aşağıdaki bölümlerde örnek verirsek stored procedure bölümünü seçtikten sonra database üzerinde kayıtlı tüm procedured yapıları seçim yapmak için görürüz. Burada ilgili procedure yapısını seçtikten sonra execute-alter-control gibi yetkiler tanımlarız. Ama bazen kullanıcılar tüm stored procedure yapılarına execute yetkisi vermek isterler ilgili komutla grant execute to kullanici_adi
bu yapı aslında ilgili stored procedure yapısının kullanıcı tarafında görülmemesine sebebiyet vermektedir. Normalde bu yapının grant execute on nesne_adı to kullanıcı_adı
şeklinde olması gerekmektedir.

2. Yeni bir veritabanı oluştururken owner kısmına hangi login’i girersek default yetkilisi o olur. Owner’a herhangi bir Login atarsak daha sonra bu logini silmek istediğimizde hata mesajıyla karşılaşırız. Çünkü login herhangi bir Db üzerinde yetkili.


Default kullanıcısını LOGIN1 yaptığımda bu db üzerinde db_owner yetkisi verdiğini görmüş oluyorum.

3. Herhangi bir login oluşturma ve şifre değişikliği için aşağıdaki komutlar kullanılır.
CREATE LOGIN LOG1 WITH PASSWORD = 'Asdfghj123';
Burada şifremizi account policy kurallarına uygun vermek gerekiyor.
Login’e bağlı bir user oluşturma komutu.
CREATE USER LOG1_user FROM LOGIN LOG1;
Hangi veritabanı üzerinde bu user’ın çalışmasını istiyorsak create user script’ini o veritabanı altında çalıştırmanız gerekiyor.

Şifre değişikliği için aşağıdaki komut ile yapılmaktadır.
alter login KARSILAMA with password='2'

Şifre değişikliği aşağıdaki bölümden de yapılabilir. Kullanıcı yetkilerinde herhangi bir değişikliğe sebebiyet vermemektedir.

Şifre değişimine aşağıdaki komutlada zorlayabiliriz.
ALTER LOGIN KARSILAMA
WITH PASSWORD = '2' MUST_CHANGE,
CHECK_EXPIRATION = ON;
Bir Login’de aşağıdaki script ile şifre değişikliği yapabilirim.
ALTER LOGIN [DBLOGIN] WITH PASSWORD='23' OLD_PASSWORD='1'

Tek bir kullanıcı için şifre değişme yetkisini verebiliriz.
GRANT ALTER ON LOGIN:: LOGIN1 to LOGIN1
GRANT ALTER ON LOGIN:: S1\Administrator to S1\Administrator
Deny deyip bu yetkiyi elinden de alabiliriz.
4. Aşağıdaki komutlar login üzerinde ne gibi yetkiler veya kısıtlamalar vereceğimiz görelim.
deny execute on schema::dbo to LOGIN1
Yukarıdaki komut ile scheme yapısı dbo olanları çalıştırma yetkisi veriyoruz. Arayüzden ilgili veritabanı altında security bölümünde schema kısmından istediğimiz şemayı seçip istediğimiz ayarları yaparız.
Şemaların hepsi dbo olarak oluşur biz bir şey vermezsek arka planda onu dbo şeklinde arar.

Aşağıdaki komut ile LOGIN1 kullanıcısına sadece dbo tabloları çalıştırma yetkisi veriyoruz.
grant execute on schema::dbo to LOGIN1
Aşağıdaki komutlar ile kullanıcı üzerinde ilgili şemaya yetki verip daha sonra ilgili yetkiyi kaldırabiliriz.
grant select,insert,delete,update on schema::dbo to LOGIN1
deny execute on schema::dbo to public
Bu şekilde o veritabanı altında bulunan herkes dbo şemasına execute yetkisi veremez.
Kullanıcıya veritabanı bazında stored procedure oluşturma yetkisi vermek istersek. İlgili veritabanı üzerine sağ tıklanır properties’dan permissions bölümünde ilgili kısıtlama veya yetki seçilerek işlemler yapılır. Bu işlem veritabanı altında bulunan security tabında ilgili user seçilerekte yapılabilir.
grant create procedure to LOGIN1--bu kullanıcıya procedure oluşturma yetkisi veriyoruz.
deny create procedure to LOGIN1--buda procedure yetkisini engellemiş oluyoruz.

Oluşturduğumuz user’a veritabanı seviyesinde role tanımlayabiliriz.
EXEC [sys].[sp_addrolemember] 'db_owner', 'LOG1_user';

Yukarıda user’a vermiş olduğum db_owner yetkisini tekrardan almak için bir stored procedure veya arayüzden yapabiliriz.
EXEC [sys].[sp_droprolemember] 'db_owner', 'LOG1_user';
Not: AlwaysOn yapısında login cluster içerisindeki sunucularda ortaksa primary sunucusunda veritabanı altındaki login’e ne yetki verirsek aynı yetki secondary makinalarında da olmaktadır. ekstradan secondary sunucularına girip yetki vermemiz gerekmiyor. Login’e instance bazında yetki verilirse bu yetki secondary sunucusuna gitmez.
Not: MSSQL default olarak case insensitive’dir. Yani aynı cümleyi büyükte yazsak küçükte yazsak aynı ifade olarak kabul eder. PostgreSQL ise case sensitive’dir.
Başka bir makalede görüşmek dileğiyle..
“Yaptığın iyiliği çok görerek başa kakma.Rabbinin rızâsına ermek için sabret.”Müddessir-6-7
Emeğinize sağlık..