【问题标题】:Impersonate remote user in vb.net to access MS SQL Server在 vb.net 中模拟远程用户访问 MS SQL Server
【发布时间】:2012-10-27 17:17:18
【问题描述】:

我正在尝试通过 vpn 模拟域用户。我可以使用 RUNAS 命令从命令提示符运行管理工作室。但是,在调试模式或已发布的应用程序中,我无法对我的 vb 应用程序(.net 4.5、winforms、使用 VS 2012 Express)做同样的事情。这是我尝试过的:

  • 我的应用程序的runas命令(从开始菜单程序中的快捷方式位置,以及可执行文件);在这些情况下,在命令提示符中输入密码后,我会收到“未知用户或密码错误”错误。
  • 我已尝试在代码中模拟用户,如 [http://williamfaulkner.co.uk/2009/04/vbnet-run-as-administrator-impersonate-a-user-2008 /][1],这似乎是 MSDN 上列出的使用调用 advapi.dll 的变体(我不太确定它是如何工作的)。在这种情况下,当代码尝试查询 SQL 服务器时,我还会收到“未知用户或密码错误”错误。

是否有人对这些错误和/或我如何解决这个问题有任何解释。我假设如果我可以模拟和运行 ssms,我应该能够在我的 vb 应用程序中做到这一点。

提前致谢!

【问题讨论】:

标签: sql-server vb.net impersonation runas


【解决方案1】:

这有点飞跃,但是 - Windows 的特定部分只能运行一次,并且不允许有来自不同用户的多个实例。我想知道这是否是这里的问题。 我特别想explorer.exe。 如果这听起来可能是导致 RUNAS 方法出错的原因,请尝试:

  1. 通过运行以下命令以用户身份启动新的 cmd 窗口:runas /noprofile /user:domain\user cmd
  2. 打开 taskmanager 并终止 explorer.exe 进程(执行此操作时您会失去启动栏)
  3. 在cmd窗口中输入:explorer.exe
  4. 开始栏和窗口将恢复并以其他用户身份运行

现在试试您的应用程序。 完成后请务必通过以下方式切换回来:

  1. 打开任务管理器(这将以其他用户身份运行)
  2. 杀死 explorer.exe 进程
  3. 按 ctrl alt del 然后点击任务管理器(这应该让它像你一样运行)
  4. 在任务管理器中,单击文件 - 新任务
  5. 类型:explorer.exe
  6. 现在一切都应该恢复正常了。

【讨论】:

  • 这太棒了,谢谢!!我能够查询数据库。 然而,真正奇怪的是,在我的数据库中,我根据运行应用程序的(假定的)人的 environment.username 列出了不同的访问类型,在这种情况下,应用程序正在获取我的来自本地计算机的用户名,而不是域\用户。
  • 其实是一个更新。我按照你的建议做了一个 RUNAS cmd,但是这次我从那个 cmd 提示符中打开了文件,它工作了!所以无需停止和启动 explorer.exe。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多