SQL Server ve T-SQL yetenekleri ile her zaman dikkatimi ve ilgimi çekmiştir. Okul yıllarımızda sadece “SELECT * FROM table1” cümlesi ile girdiğimiz SQL Server dünyasında bugün T-SQL kodları ile Active Directory sunucumuza bağlanıp sistemimize kayıtlı kullanıcı hesapları ve bilgisayarların bilgilerini sorguluyor olacağız.
SQL Server üzerinden AD’ye ulaşmak için öncelikle SQL Server’a “Linked Server (Bağlı Sunucu)” eklenmesi gerekmektedir. Linked Server eklenebilmesi için gerekli olan yetkiler;
- T-SQL kullanılarak bu işlem yapılacaksa ALTER ANY LINKED SERVER yetkisine sahip olmak veya setupadmin rolünün bir üyesi olmak gerekmektedir.
- Linked Server ekleme işlemi SSMS yapılacaksa da CONTROL SERVER yetkisine sahip olmak veya sysadmin rolünün bir üyesi olmak gerekmektedir.
SSMS İle Linked Server Ekleme
Açılan “New Linked Server” ekranına aşağıdaki bilgileri giriyoruz.
- Linked Server: Eklenen sunucuya verilen isimdir, istenen değer verilebilir.
- Server Type: Linked Server yapısı varsayılan olarak SQL Server’ları birbirine bağlamaya çalışır şekilde ayarlıdır, SQL Server dışında bir sunucuya bağlanılacak ise “Other data source” seçeneği seçilir.
- Provider: Bağlanılacak servise bağlantıyı sağlayacak Provider’ın seçildiği alandır. Burada AD sunucusuna bağlanılmaya çalışıldığından dolayı “OLE DB Provider for Microsoft Directory Services” seçeneği seçilir.
- Product name: “Active Directory Services 2.5”
- Data source: “adsdatasource”
- Provider string: “ADSDSOObject”
Bağlantı ile ilgili bilgiler girildikten sonra “Security” tabına geçiş yapılarak aşağıdaki gibi seçim yapılır.
- Be made without using a security context: Her hangi bir güvenlik ayarı olmadan sisteme bağlanmaya çalışır.
- Be made using the login’s current security context: SQL Server bağlantısı Windows Authentication kullanılarak yapıldı ise bağlanan hesabın yetkilerini kullanarak AD servisinden veri çekmeye çalışır.
- Be made using this security context: Girilecek kullanıcı adı şifre ile AD servisine bağlanıp veri çekmeye çalışır.
AD Servisinden Kullanıcı Listesi Sorgulama
select *
from openquery([ADSERVER], '
select givenName,
sn,
sAMAccountName,
displayName,
mail,
telephoneNumber,
mobile,
physicalDeliveryOfficeName,
department,
division
from ''LDAP://dc=mydomain,dc=local''
where objectCategory = ''Person''
and
objectClass = ''user'' ')
Sadece aktif kullanıcıları sistemden sorgulamak için de sorguya ”userAccountControl:1.2.840.113556.1.4.803:”<>2 şartı eklenir. Tek bir kullanıcı bilgilerini sorgulamak için de sAMAccountName = ”kullaniciAd”
AD Servisinden Bilgisayar Listesi Sorgulama
select *
from openquery([ADSERVER], '
select
sAMAccountName,
displayName
from ''LDAP://dc=myDomain,dc=local''
where objectCategory = ''Computer''
and
objectClass = ''computer''
')
Sadece belli bir OU altındaki kullanıcı veya bilgisayarların sorgulanması gerektiği durumda sorguda yer alan from alanındaki LDAP yoluna ilgili OU adresi verilir. Örneğin aşağıdaki kod sadece bir OU altındaki kullanıcıları sorgulamaktadır.
select *
from openquery([ADSERVER], '
select givenName,
sn,
sAMAccountName,
displayName,
mail,
telephoneNumber,
mobile,
physicalDeliveryOfficeName,
department,
division
from ''LDAP://ou=bakim,ou=MyFabric,ou=Users,ou=MyCompany,dc=myDomain,dc=local''
where objectCategory = ''Person''
and
objectClass = ''user''
')
LDAP yolunu oluşturmak için bir örnek verecek olursak da;
Normal Yol | LDAP Yolu |
myDomain.com/Users/Office1/User1 | LDAP://CN=User1,OU=Office1,OU=Users,DC=myDomain,DC=com |
Peki bu konuyu nerede kullanacağız diye bir soru gelecek olursa da örnek bir iki senaryo ile sizleri SQL Server’ın derya deniz dünyası ile baş başa bırakalım.
İlk senaryomuz: Kullanıcı ve bilgisayar verilerini günlük bir job ile AD sunucusundan sorgulayıp bir veri tabanına kaydederek sistemimizde oluşan değişiklikleri takip edebileceğimiz güzel bir veri tabanına sahip olabiliriz.
İkinci senaryomuz da: Kurum içerisinde geliştirilen yazılımlar da kullanıcı oluşturulurken ilgili kişinin bilgileri sistemden sorgulanarak kurum içerisinde kullanılan yazılımlarda veri tutarlılığı sağlanabilir.