SQL Server Login ve User İşlemleri
Merhaba, bu yazımda SQL Server Login ve User işlemlerini adım adım sizlerle paylaşıyor olacağım. Domain kullanıcısı ile ve kullanıcı adı ile login oluşturma, veri tabanı owner kullanıcısını silme ve veri tabanları üzerinde user açma gibi birçok konuyu inceleyeceğiz. Yazının devamında silemediğimiz bazı kullanıcıların nerelerde owner olduğuna ve ne yapmamız gerektiğine dair scriptleri de sizlerle paylaşacağım.
Sql Server da Login ve User oluşturma işlemlerine geçmeden önce Login ile User arasındaki farkı incelemek gerekir. User açma işlemleri veri tabanı düzeyinde çalışırken, Login işlemleri Instance düzeyinde çalışmaktadır. Login ile işlem yapıldığında kullanıcı, Instance da bulunan veri tabanlarını görebilir ve bunlara erişebilir. Veri tabanı üzerinde yapılan User işlemi ise sadece kullanıcının oluşturulduğu veri tabanı üzerinde işlemler yapabilir. Elbette yapılabilecek işlemler verilen yetkiye göre değişir.
Login İşlemleri ile Kullanıcı Oluşturma
Kullanıcı oluşturma ekranına gelmek için: Object Explorer>Security>Logins>Sağ tık>New Login diyoruz. Gelen ekranda kullanıcı açabilmek için iki seçenek mevcuttur.
- Windows authentication: Bu seçenek sadece domainde bulunan kullanıcılar içindir. Eğer domain kullanıcısı isteniyorsa bu şekilde herhangi bir şifre girmeden kullanıcı tanımlanabilir.
- SQL Server authentication: Bu seçenekteyse bir şifre girerek kullanıcı oluşturulabilir. İki farklı kullanımı da aşağıda görebilirsiniz.
Windows authentication: Domainde bulunan kullanıcı ile user oluşturulacaksa bu seçenek seçilmelidir. Login name yazan yerin yanında bulunan search butonuna basarak kullanıcı domain de aranır. Search yazdıktan sonra gelen ekran Resim-3 teki gibidir. Burada Locationsdan kullanıcı bulunabilir. Eğer kullanıcı adı biliniyorsa Resim-4 teki ismi yazılıp check names butonuna basılarak kullanıcı seçilip OK diyerek domainde bulunan kullanıcı eklenebilir. (Resim-5)
SQL Server authentication: Bu seçenekte Resim-2 de bulunan SQL Server authentication seçilir.Kullanıcı için bir parola belirlenir. Bu parola doğrulanır. Enforce Password Policy, koyulacak şifrenin sql de şifre oluşturma kurallarına uygun olup olmadığını kontrol eder. Enforce password expired belirli bir süre sonrasında şifrenizin değiştirilmesi için bulunur. Şifresi değiştirilmeyen kullanıcılar disable olur. User must change password at next login ise kullanıcı ilk giriş yaptığında şifresini değiştirmesini ister. Benim Resim-6 da yaptığım gibi tikleri işaretlememeniz durumunda kullanıcıdan ilk girişte şifre istenmez, şifrenin süresi dolmaz ve istediğiniz şifreyi belirleyebilirsiniz. Burada açılacak olan hesaba verilecek yetkiler için ilgili yazıya buradan ulaşabilirsiniz.
OK dediğiniz anda kullanıcı tanımlanmış olur. Aşağıdaki gibi kullanıcı adı ve şifreyle giriş yapılabilir.
User İşlemleri
Yukarıda yazdığım üzere bir de veri tabanı üzerinde açabileceğimiz user işlemi bulunmaktadır. Hangi veri tabanı üzerinde user açılmak isteniyorsa o veri tabanı seçilir. Database>Security>Users>New User seçilir. Aşağıdaki ekran karşımıza gelir.
New User seçilir ve aşağıdaki ekran karşımıza gelir.
Burada daha önceden Login işlemi yapıldıysa Login name ve bizim belirleyeceğimiz User name girilir. Kullanıcının erişmek istediği şema adı belirtilir, eğer belirtilmezse default olarak dbo verilir. Yukarıda Login name’i sqlekibi verdiğimiz bu kullanıcı için User name olarak sqlekibiuser girerek, Default şemayı dbo verdim. OK diyerek işlemi tamamladım. Logine verilen yetkiler user içinde geçerli olur.
Burada istenirse User type ile loginsiz user oluşturulabilir. Ama bu şekilde sql server da login olunamaz ve veri tabanlarına erişilemez. Owned Schemas ve MemberShip de yer alan Database Rollerinin ilgili yazısına buradan ulaşabilirsiniz.
Aşağıda açtığımız kullanıcı sqlekibiuser olarak Users’ın altına geldi.
Yukarıda Operations veri tabanı için user açtık. Şimdi diğer veri tabanlarına erişebiliyor muyuz bir bakalım.
TestDB’ye erişemiyoruz. User işlemi Operations veri tabanı üzerinde gerçekleştirildiği için diğer veri tabanlarına Login’den veya User ile yetki verilmezse erişilemez.
Kullanıcı (User) Silme
Kullanıcıyı oluşturduk ve kullanıcı sql de farklı işlemler yaptı. Örneğin database oluşturdu veya job kurdu. DDL ve DML komutlarını kullanarak bir dizi işlem gerçekleştirdi ve hala gerçekleştiriyor. Bu kullanıcının silinmesinin istendiği durumda kullanıcıya sağ tıkladınız ve delete dediniz. O da ne silinmiyor 😊
Bu işlemler yerine aşağıdaki scripti kullanarak da userı silebilirsiniz. Script ile denediğinizde zaten database üzerinde owner olduğu görülüyor. Ama hangi database üzerinde olduğu gözükmüyor.
USE [master]
GO
DROP LOGIN [sqlekibi]
GO
Kullanıcının bazı yerlerde owner olması veya connectionları olması sebebiyle user silinmeyebilir. Normal şartlarda bu işlemi yaptığınız da kullanıcının silinmesi gerekir. Kullanıcının owner olduğu veri tabanlarını bulmak için aşağıdaki scripti kullanabilirsiniz.
SELECT name, suser_sname(owner_sid) AS DBOwner FROM sys.databases
Bu sorgu sonucunda silmek istediğiniz kullanıcının veri tabanları üzerinde owner olup olmadığını görebilirsiniz. Burada Operations veri tabanı üzerinde owner olan sqlekibi kullanıcısı bu sebeple silinmemektedir.
Bu veri tabanının, owner ını değiştirmek içi aşağıdaki script kullanılabilir.
use master
GO
use Operations
GO
sp_changedbowner 'sa' //başka bir kullanıcı ile değiştirmek isterseniz onun adı yazılmalıdır.
GO
Yeniden silmeye çalıştığımda ise şu hatayı aldım.
Burada bir jobta kullanıcının owner olması sebebiyle kullanıcıyı silemiyoruz.Tüm jobların ownerlarını görmek için şu scripti kullanabilirsiniz.
SELECT s.name AS JobName, l.name AS JobOwner
FROM msdb..sysjobs s
LEFT JOIN master.sys.syslogins l ON s.owner_sid = l.sid
WHERE l.name IS NOT NULL
ORDER by l.name
Customer Update Jobının ownerı, silmeye çalıştığımız kullanıcı olması sebebiyle kullanıcıyı silemedim. Job ownerı değiştirmek için Job Properties den Owner yazan yeri istediğimiz bir kullanıcı ile değiştiriyoruz.
Resim-19 Resim-20
Son olarak active transaction varsa kullanıcıya ait şu script ile bulabiliriz.
SELECT session_id
FROM sys.dm_exec_sessions
WHERE login_name = 'sqlekibi'
Eğer active transaction varsa session_id sini alarak KILL session_id (örn: KILL 122) ile bu işlemi sonlandırabilirsiniz. İşlemin update, insert veya alter gibi önemli bir işlem olması durumunda killemeden önce 2 kez düşünün 😊
Ve nihayet silindi 😊
Bu yazımda kullanıcı ekleme ve silme işlemleri ile ilgili birkaç bilgi aktarmaya çalıştım. Genellikle bir problemime çözüm ararken, adım adım ve ekran görüntüleriyle tek tek anlatan sayfaları tercih ettiğim için kendim de böyle anlatmayı tercih ediyorum. Beğendiyseniz yorumlarda belirtmeyi unutmayın 😊
Yeni yazılarda görüşmek üzere…
Sqlekibi’nin önceki yazıları için;