Google Mobile Ads

Friday, September 9, 2016

ASP.NET Web Service ile NT Domain Hesabı Kullanarak SQL Server'a Bağlanmak (Impersonation Yöntemi ile)

Kurumsal projelerde kullanılan sql generic user, şifre gereksinimi ve şifrenin belirli aralıklarla değiştirilmek istenmesi nedeniyle sorunlara neden olmaktadır. Bu nedenle sql user yerine bir domain üzerinde tanımlı nt user kullanarak şifre ihtiyacını ortadan kaldırmak mümkün.


1) Öncelikle web service’in kurulacağı app server üzerinde svctest adında bir domain user’ı oluşturulup ardından aynı user için SQL Server’daki ilgili database’ e db_owner hakkı verilmelidir.

2) IIS üzerine web service eklenmeden önce Application Pool oluşturulması gerekmektedir. Aşağıdaki şekilde oluşturulmalıdır.

TLS1.2 desteği isteniyorsa .NET CLR sürümü v4.5 ve üzeri olmalıdır.






3) Oluşturulan Application Pool’un Advanced Settings’inde Identity bilgisi LocalSystem olarak seçilmeli.




4) Application Pool gelişmiş ayarlar ekranında yapılacak ek değişiklikler :

İşlem Modeli altındaki 
Boşta Zaman Aşımı : 5
En fazla çalışan işlem adımı : 100 olarak günellenmeli.
Hızlı Çökme Koruması altındaki
En fazla Hata sayısı : 10
Hata Aralığı :10 olarak güncellenmeli.


5) Web service ‘in eklenmesi. 

Fiziksel Yol: Web Service’e ait dosyaların bulunduğu lokasyon. 
SSL sertifikası olması durumunda Bağlama türü https ve Bağlantı Noktası 443 olarak set edildikten sonra Seç butonuna basılarak sunucuya yüklenmiş SSL sertifikalarından biri seçilir.



6) Eklenen web service e ait Authentication ekranında sadece Anonymous Authentication enabled olmalı.




7) Anonymous Authentication üzerinde Edit butonuna basılarak user identity olararak Application Pool Identity seçilmeli.


8) Web Service klasör yetkileri
Web service klasörüne IUSR kullanıcısı için izin (read-write-modify hakkı) verilmeli. 



9) Administrative Tools’dan Local Security Policies ekranı açılır. Local Policies altında User Rights Assignment sekmesine tıklanır ve sağ tarafta çıkan policy lerden Impersonate a client after authentication seçeneğine tıklanır.
Türkçesi: Kimlik doğrulamasından sonra istemcinin özelliklerini al.


10) İlk başta oluşturulan domain user’ı bu listeye eklenerek Apply butonuna tıklanır (İşlemin server tarafında aktif hale gelmesi yaklaşık 90 sn sürüyor). 

Böylelikle web service'e erişim sağlayacak kullanıcıların impersonation kullanılarak svctest hesabı üzerinden sql server'a erişimi sağlanmış olacak.




Örnek Web.Config içeriği

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <connectionStrings>
    <add connectionString="Data Source=SERVER_NAME_OR_IP;Initial Catalog=DATABASE_NAME;Integrated Security=SSPI;Connection Timeout=10;" name="MyConnectionString" providerName="System.Data.SqlClient" />
  </connectionStrings>
  <system.web>
    <authentication mode="Windows" />
    <compilation debug="true" />
  </system.web>
</configuration>


Örnek Impersonation (kimliğe bürünme :) ) kodu

    <WebMethod()> _
    Public Function GetCurrentName() As String
        Dim userMessage As String = ""
        Try
            Dim impersonationUser As WindowsImpersonationContext = Nothing
            Try
                Dim ws As New WindowsIdentity("svctest@DOMAIN")
                   impersonationUser = ws.Impersonate()
 ‘Impersonation işlemi başarılı ise burada veritabanı işlemleri gerçekleştirilebilir.

            Catch ex As Exception
                userMessage = "Hata1: " & ex.Message & " "
            End Try

            Try
                If Not impersonationUser Is Nothing Then
                    impersonationUser.Undo()
                End If
            Catch ex As Exception
                userMessage = userMessage & "Hata2:" & ex.Message & " "
            End Try

        Catch ex As Exception
            userMessage = userMessage & "Hata3: " & ex.Message
        End Try

        Return userMessage
    End Function

Connecting to SQL Server Using NT Domain Account With ASP.NET Web Service In IIS


No comments:

Post a Comment

LinkWithin

Related Posts Plugin for WordPress, Blogger...