【问题标题】:Problems persisting mapped drive in Azure VM to Azure file storage将 Azure VM 中的映射驱动器持久保存到 Azure 文件存储的问题
【发布时间】:2016-05-20 14:15:00
【问题描述】:

我有一个创建共享的 Azure 文件存储帐户。我有 2 个 Azure VM,一个运行 SQL 服务器,一个运行 IIS 和一个 Windows 服务(用 c# .net 4.5.1 编写)。我需要他们都访问共享以共享文件。我已经阅读了几篇文章,并尝试使用 cmdkey 保存凭据并使用网络使用映射驱动器。我遇到了 2 个问题。

在 SQL VM 上,一切似乎都运行良好。它正在将文件写入共享,我在那里没有遇到太多麻烦。在另一个虚拟机上,我遇到了问题。首先,persist 位似乎并没有真正起作用。我运行它,验证它是否已存储(在执行 cmdkey /list 时显示,并在凭据管理器中显示),然后我可以使用 net use 映射驱动器。它似乎可以工作。我可以在资源管理器中浏览到驱动器,但是如果我注销机器,当我重新登录时它不会重新连接。一旦我注销 VM,连接似乎就会丢失,直到我再次运行 net use。其次,即使我可以浏览到该文件夹​​,Windows 服务也根本找不到它。我已经验证了它正在寻找的路径是正确的。我将它复制并粘贴到资源管理器窗口中,它直接进入文件夹。我尝试将服务作为本地系统运行,因为我使用登录 VM 的帐户... 所有这些都给出了找不到路径的错误。据我所知,我唯一需要的两件事是 cmdkey 命令和 net use 命令,并且驱动器应该可以使用并自动重新连接。我错过了什么吗?

编辑:我忘了提一下,如果我在同一台机器上将服务作为控制台应用程序运行,它确实会找到文件夹并正常运行。作为服务运行,它没有。它被配置为能够使用http://www.dontpaniclabs.com/blog/post/2011/10/20/running-a-service-as-an-application/中找到的方法以任一方式运行

【问题讨论】:

    标签: c# file azure virtual-machine storage


    【解决方案1】:

    我自己也遇到过同样的问题,我在 Stack Exchange 上发帖但没有得到答案。

    问题在于映射网络驱动器或网络共享 UNC 仅对创建它的用户具有持久性,而 cmdkey 存储的凭据也仅对创建它的用户具有持久性。

    这就是为什么当您登录 VM 并访问持久化凭据时,您可以导航到共享或将其用作映射的网络驱动器。但是,作为 Windows 服务安装的应用程序将无法使用共享,因为它没有能够执行此操作的凭据。

    我解决此问题的方法是,我在我的 VM 上创建了一个本地用户,其用户名设置为访问我的 StorageAccount FileShare 所需的用户名,并将密码设置为 StorageAccount 访问密钥。然后,我将我的 Windows 服务设置为作为该用户而不是作为本地系统帐户运行。

    我想这对于您的 IIS 实例来说也是同样的问题。因为默认情况下您的 IIS 将使用具有默认“ApplicationPoolIdentity”用户的 ApplicationPool。您可以将此用户更改为也以新创建的本地用户身份运行。

    编辑: 仅当您的 StorageAccount 名称长度小于 20 个字符时,上述 Windows 用户解决方案才有效,因为这是 Windows 用户名的限制

    还有另一种解决方法。您可以更改您的代码,以便在调用 UNC 或映射网络驱动器时,它可以通过身份验证所需的凭据。

    我刚刚尝试了下面链接中的示例,效果很好。

    How do you do Impersonation in .NET?

    【讨论】:

    • 我去试试这个。存储帐户名称超过 20 个字符,这是 Windows 对用户名的限制。它只是截断它。
    • 啊!这确实比较烦人。那时我显然很幸运,因为我只有 7 个字符。不过,是否值得尝试模拟方法?
    猜你喜欢
    • 1970-01-01
    • 2022-09-29
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 2020-05-06
    • 1970-01-01
    • 2019-11-21
    相关资源
    最近更新 更多