통합 보안 로그인에 사용되는 Windows 사용자의 사용자 ID/암호를 알고있는 경우 다음 방법을 시도해 볼 수 있습니다.
먼저 선언은 Windows API 함수 호출 :
Dim impersonatedUser As WindowsImpersonationContext = Nothing
Dim token As IntPtr = IntPtr.Zero
BeginImpersonate(i_sUserID, i_sPassword, impersonatedUser, token)
'Do your DB stufff here, open connection etc.
EndImpersonate(impersonatedUser, token)
이를 :
이
Private Enum LogonSessionType As Integer
Interactive = 2
Network
Batch
Service
NetworkCleartext = 8
NewCredentials
End Enum
Private Enum LogonProvider As Integer
WinDefault = 0
WinNT35
WinNT40
WinNT50
End Enum
<DllImport("advapi32.dll", SetLastError:=True)> _
Private Shared Function LogonUser(ByVal userID As String, _
ByVal domain As String, _
ByVal password As String, _
ByVal logonType As LogonSessionType, _
ByVal LogonProv As LogonProvider, _
ByRef token As IntPtr) As Boolean
End Function
<DllImport("kernel32.dll", SetLastError:=True)> _
Private Shared Function CloseHandle(ByVal handle As IntPtr) As Boolean
End Function
그런 다음이 개 도우미 기능이 같은 통화를 할 수 있습니다 만든이 준비와
Sub BeginImpersonate(ByVal i_sUserID As String, ByVal i_sPassword As String, ByRef o_impersonatedUser As WindowsImpersonationContext, ByRef o_token As IntPtr)
o_token = IntPtr.Zero
o_impersonatedUser = Nothing
Dim bLoginSuccessful As Boolean = LogonUser(i_sUserID, Nothing, i_sPassword, LogonSessionType.Interactive, LogonProvider.WinDefault, o_token)
If bLoginSuccessful Then
Dim id As New WindowsIdentity(o_token)
o_impersonatedUser = id.Impersonate()
Else
Throw New Exception ("Logon failed: Error " & Marshal.GetLastWin32Error.ToString)
End If
End Sub
Sub EndImpersonate(ByVal i_impersonatedUser As WindowsImpersonationContext, ByVal i_token As IntPtr)
If i_impersonatedUser IsNot Nothing Then i_impersonatedUser.Undo()
If i_token <> IntPtr.Zero Then CloseHandle(i_token)
End Sub
선언 코드는 일종의 원시이지만 작동합니다. 프로덕션 코드로 만들려면 적절한 오류 처리 등을 추가해야합니다. "i_sUserID"매개 변수의 "user @ domain"형식과 "i_sPassword"매개 변수의 사용자 암호를 전달하십시오.
가장은 가능하지만 실제로 권장하지는 않습니다. DB가 SQL Server 로그인을 허용 할 수 있다면 훨씬 좋을 것입니다 (SQL Server를 사용하고 있다고 가정합니다) –
@YuriyGalanter .. 의견을 보내 주셔서 감사합니다. 가장을 시작할 때 조금만 설명해 주시겠습니까? – lawphotog
ASP.NET 계정 –