SQL Server’dan Oracle’a Linked server tanımlamayı ve tanımladığımız bu linked server’a yeni bir SQL Login’i yetkilendirmeyi önceki makalelerimizde anlatmıştık. Bu makalede SQL Serverdan SQL Server’a bağlanmak için Linked Server tanımlayacağız.
SSMS üzerinden Server Objects->Linked Server’a sağ tıklıyoruz ve new Linked Server diyoruz. Linked Server yazan yere hedef instance’ımızın adını yazıyoruz. Server Type kısmında SQL Server’ı seçiyoruz. Security tab’ına geçip Be made using the login’s current security context’i seçiyoruz. Bu seçeneği seçmemiz çok önemli. Çünkü bu seçeneği seçerek hedefte yetkili olmayan hiçbir kullanıcının bu linked server’ı kullanamamasını garantilemiş oluyoruz. Ve Ardından ok’e basarak linked server’ı oluşturmuş oluyoruz.
Ama unutmayalım ki bu linked server’ı sadece kaynak ve hedefte aynı login varsa kullanabilirsiniz. Aynı Login’den kastımız sadece isimlerinin ve şifrelerinin aynı olması değildir. Kaynaktaki ve Hedefteki Login’lerin SID leri aynı olmalıdır. Loginleri başka bir instance’a taşımak isimli makalemde SID’leri aynı olmak kavramının ne anlam ifade ettiğini görebilirsiniz.
Be made using this security context seçip remote login kısmına hedefteki sql server’da tanımlı bir login’i ve With password kısmına bu login’in şifresini girerseniz kaynaktaki tüm loginler hedefteki login’in hedef üzerinde ne yetkisi varsa erişebilir olacaktır. Yetkiler ayrılığı ilkesine aykırı olduğu için ben hiçbir linked server’ı bu şekilde tanımlamıyorum.
Örneğin TESTSUNUCU01\INSTANCE01 isimli bir instance’ımız olsun. Bu instance üzerinde xUser ve yUser isimlerinde iki adet login’imiz olsun. Bu instance üzerinden TESTSUNUCU02\Instance01 instance’ına linked server tanımlayalım.
TESTSUNUCU02\Instance01 Instance’ına da sadece xUser isimli login’imizi taşıyalım. Loginleri başka bir instance’a taşımak ile ilgili makalemi okuyabilirsiniz. TESTSUNUCU02\Instance01 Instance’ında deneme isimli bir veritabanı oluşturalım ve içinde Table1 isimli bir tablo oluşturup birkaç test verisi girelim. Veritabanı oluşturmak ile ilgili makalemden faydalanabilirsiniz. xUser’a bu veritabanında select hakkı verelim. Yukarıda anlattığım şekilde linked server’ı TESTSUNUCU01\INSTANCE01 Instace’ı üzerinde tanımlayalım. Tanımlarken de be made using the login’s current security context’i seçelim. Bu şekilde tanımlamaları yaptıktan sonra eğer xUser ile TESTSUNUCU01\INSTANCE01 connect olursanız aşağıdaki şekilde linked server’ı çalıştımak istediğinizde veriler gelecektir.
Select * From Openquery ([TESTSUNUCU02\Instance01],'select * From deneme.dbo.Table1')
Ama TESTSUNUCU01\INSTANCE01 Instance’ına yUser ile bağlandığınız takdirde linked server’ı kullanamayacaksınız. Çünkü hedefte yUser isimli bir kullanıcı tanımlamadık.
Eğer linked server’ı tanımlarken Be made using this security context seçip remote login kısmına hedefte tanımladığımız xUser’ı ve With password kısmına xUser’ın şifresini girerek tanımlasaydık TESTSUNUCU01\INSTANCE01 Instance’ına yUser ile bağlandığımız da linked server’ı kullanabilecektik. Çok güvenli bir yöntem olmasada böyle bir duruma ihtiyaç olabilecek durumlar da olabilir.