Login ve User Farkı Nedir?

19 Nis by NURULLAH ÇAKIR

Login ve User Farkı Nedir?

SQL Server ile yeni ilgilenmeye başlayan arkadaşların genelde merak ettiği bir konu olduğu için bu makaleyi yazmak istedim. Bu makaleyi okumadan önce “Login oluşturmak ve yetkilendirmek” isimli makalemi okumanızı tavsiye ederim.

 

SQL Server’da default olarak kullanıcı oluşturduğumuzda aşağıdaki gibi instance seviyesinde login oluştururuz.

Oluşturduğumuz bu login’e aşağıdaki hakları verebiliriz.

 

  1. Instance seviyesinde sistem objelerini select etme hakkı(dmw,dmf)
  2. Instance üzerindeki herhangi bir veritabanında istediğimiz hakkı
  3. Intance seviyesinde istediğimiz bir server role yetkisi(“Server Level Role Kavramı” isimli makalemi okuyabilirsiniz)

 

Peki User nedir?

 

Bir login’in bir instance üzerinde birden fazla veritabanında yetkisi olabilir. “Login oluşturmak ve yetkilendirmek” isimli makalemde bir login’e veritabanı üzerinde nasıl yetki vereceğimizden bahsettim. Login’e veritabanı seviyesinde yetki verildiği anda sql server veritabanının altında bu login ile aynı SID(login’in kimlik bilgisi)’ye sahip bir user oluşturuyor. Ve veritabanındaki yetki işlemlerini bu user-login ilişkisi üzerinden yürütüyor.

 

Bazen login’i veritabanında yetkilendirmek istediğimizde aşağıdaki gibi bir hata alırız.

 

User, group, or role ” already exists in the current database.

Bu hatanın sebebi şudur;

 

Login veritabanı üzerinde gerekli yetkiyi vermek için veritabanının altında aynı isimde bir user oluşturmak ister. Bu hatayı da veritabanında böyle bir user zaten var olduğunda alırız. Böyle bir durumda veritabanının security sekmesinden ilgili user’ı aşağıdaki gibi silip yetkilendirme işlemini tekrar yaparak sorunu çözebiliriz.

Ya da sql server 2008 ve sonrası için aşağıdaki script yardımıyla bu işlemi gerçekleştirebiliriz. Bu script’te login’in ve user’ın SID’lerini aynı hale getiriyor.

 

ALTER USER test WITH LOGIN = test

 

SQL Server 2008’den öncesinde ise bu işlemi aşağıdaki script ile yapıyorduk.

 

EXEC sp_change_users_login 'Auto_Fix', 'test'

 

Bazen login olmadan sadece user oluşturarak da direk veritabanına bağlanabilirsiniz. Bu işlem’i Contained yapıdaki veritabanları ile yapmak mümkündür. Mevcut veritabanlarını hiçbir kesinti olmadan Contained hale getirmek mümkündür. Ben production ortamındaki veritabanlarının(özellikle bir instance üzerinde birden fazla veritabanı varsa) contained yapıda olmasını tavsiye ederim. “Contained Database Nedir” isimli makalemde detayları bulabilirsiniz.

 

Mevcut Login’lerinizi uygulamada kesinti olmadan Contained User’a dönüştürmek için “Login’leri Contained Database Üzerine Taşımak” isimli makaleyi okumanızı tavsiye ederim.

Login olmadan ve şifresiz bir şekilde user oluşturmak için “SQL User Without Login Nedir” isimli makalemi okumanızı tavsiye ederim.

Loading

3 Comments

  1. Merhaba Nurullah Bey,

    Makaleniz için teşekkür ederim. Fakat merak ettiğim, bir logine birden fazla user atanabilmesi nedir? Makalenize dayanarak yapmış olduğum denemede instance seviyesinde bir login oluşturdum ve bir veritabanında ilgili logine bağlı olarak user oluşturdum. User oluşturuken herhangi bir parola sormadı bana. BU bağlamda oluşturduğum user bilgisi ile veritabanına nasıl bağlantı sağlanacaktır. Bağlanırken login ile bağlanabiliyorum ama user ile bağlanamıyorum. Bu sorularımı cevaplarsanız çok memnun olurum. Başarılar dilerim.

    1. Merhaba,

      Rica ederim Hasan Bey,
      Öncelikle user’ı oluştururken bir login’e bağlı olarak ya da bir login’den bağımsız şekilde oluşturabiliyorsunuz.
      Aynı login’e bağlı olarak aynı veritabanı üzerinde birden fazla user oluşturamazsınız. Oluşturmak istediğinizde aşağıdaki gibi hata alırsınız.
      “The login already has an account under a different user name”

      Ama bir login’e farklı veritabanlarındaki user’ları bağlayabilirsiniz.

      Bir login’den bağımsız olarak sql user without login seçeneğini seçerek login oluşturabilirsiniz. Bu konuya başka bir makalede değineyim.
      Eğer veritabanına login olmadan sadece user ile bağlanmak istiyorsanız size önereceğim çözüm Contained Database olur. Bu konuyla ilgili detaylı bilgiyi aşağıdaki makalede bulabilirsiniz.
      http://www.veritabani.gen.tr/2016/09/02/contained-database-nedir/

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir