【问题标题】:How do I connect to a remote directory without impersonation privileges?如何在没有模拟权限的情况下连接到远程目录?
【发布时间】:2010-12-29 01:02:01
【问题描述】:

我有一个需要与远程机器上的文件交互的 .NET 服务。在配置中,用户指定他们需要访问的本地或远程 (UNC) 路径。用户还为有权访问这些目录的用户指定用户名和密码。当服务运行时,它会连接到这些路径中的每一个并在那里处理文件。

我尝试过模拟,但客户对授予服务(通常作为本地系统运行)的权限持怀疑态度。

我还发现了将远程目录映射为映射驱动器并以这种方式访问​​它们的代码 (http://www.aejw.com/)。但是,这会导致某些版本的 Windows 抱怨多个连接。

任何建议将不胜感激。

【问题讨论】:

    标签: .net windows-services path


    【解决方案1】:

    你有两个选择:

    要么让您的服务访问它自己帐户下所需的文件.....

    或者允许冒充您的服务来执行此操作。我相信您可以理解为什么远程系统可以对不允许执行的操作执行操作会很糟糕。

    我相信您也可以理解为什么人们不想将假冒特权全权授予所有服务。

    我会认真研究您的服务的设计以及它正在尝试做的事情。如果您可以将服务移动到文件所在的位置或从客户端计算机执行代码,那么在这种情况下这可能会更好。

    我正在尝试了解您的应用,但如果您只有一个用户名和密码,是否可以以该用户身份登录服务?

    【讨论】:

    • 与不同的系统交互,不可能总是在同一台机器上拥有这些系统。因此有必要访问远程盒子上的文件和目录。我想让服务在安装它的机器上作为本地系统运行,并且仍然能够使用提供的用户名和密码访问远程共享。我只是希望有一种方法可以让服务以用户身份运行,但以不同用户身份连接到远程计算机。
    【解决方案2】:

    你看过这个博客吗? http://blogs.msdn.com/b/joncole/archive/2009/09/21/impersonation-code-in-c.aspx

    使用此类,您应该能够使用需要模拟的 using() 块执行代码,并且在将块留给普通用户时。

    【讨论】:

    • 我见过这个。但是,要进行 Windows.Impersonate 调用意味着您必须拥有提升的权限,这是我试图避免的一件事。但是,正如我上面所说,这是我最有可能必须解决的问题。这个链接确实很好地总结了一些事情。
    猜你喜欢
    • 2022-11-02
    • 2012-07-11
    • 1970-01-01
    • 2016-07-26
    • 2021-01-05
    • 2013-02-28
    • 2022-01-18
    • 2018-12-02
    • 1970-01-01
    相关资源
    最近更新 更多