C# - 使用Windows模拟访问SQL Server

时间:2018-06-01 15:55:57

标签: c# sql-server windows windows-server-2012 windows-server

我写了一个小程序来访问SQLSERVER1中的SQL Server数据库,并将一些数据复制到SQLSERVER2上的另一个数据库。此程序必须在APPSERV1(Windows Server 2012)中运行,并且我在此服务器中有登录的服务帐户:appuser1

appuser1无法访问SQLSERV1

要访问SQLSERV1我有另一个服务帐户svc_to_sqlserv1;此帐户无法登录任何PC,只有SQLSERV1"才能访问数据库。它有效。在此方案和svc_to_sqlserv之前,我在ASP应用程序中使用了模拟,它可以正常工作(web.config上的简单更改)。

但是现在,这个应用程序是"桌面APP"我知道在这种情况下假冒是不同的,我写了这段代码:

SafeTokenHandle safeTokenHandle;
const int LOGON32_PROVIDER_DEFAULT = 0;
const int LOGON32_LOGON_INTERACTIVE = 2;

// service account actual :   appuser1
bool returnValue = LogonUser(svc_to_sqlserv1, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, out safeTokenHandle);

// error! svc_to_sqlserv1 has not permission to log on in this server, but have permission to access SQL SERVER in SQLSERV1
try
{
    using (WindowsIdentity newId = new WindowsIdentity (safeTokenHandle.DangerousGetHandle()))
    {
        using (WindowsImpersonationContext impersonatedUser = newId.Impersonate())
        {
             using (SqlConnection connection = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["sctrin_conn_to_SQLSERV1"].ConnectionString))
             {
                 ....
             }
        }
    }
}
catch...

注意:

  • 我无权在SQLSERV1
  • 中运行此程序
  • 如果srv_to_sqlserv1无权在任何桌面登录,我该如何测试?我"作为另一个用户运行"某台PC上的SQL Server Management Studio。 appuser1无权以"另一个用户身份运行"在APPSERV1

我希望有人可以帮助我或提出任何替代方案?非常感谢你。

0 个答案:

没有答案