0

我正在尝试从安装程序类将数据库安装到 LocalDB。尝试打开 SQLConnection 时,出现错误:

Login failed for user 'NT AUTHORITY\SYSTEM'

似乎安装程序类是从系统帐户运行的,LocalDB 不能被它使用。

有没有办法从安装程序连接 LocalDB?

也许可以从用户帐户运行安装程序类(或其中的部分代码)(但安装程序的其余操作仍需要管理权限)?

安装程序可以在不同的机器上使用,所以我不能事先知道用户的凭据,也不能手动对系统进行任何更改,只能从​​安装程序类代码(C#)。

4

1 回答 1

0

我还没有解决这个问题并放弃了 LocalDB。但是一段时间后我遇到了类似的问题 - 从 Windows 服务连接到 LocalDB。Windows 服务从同一NT AUTHORITY\SYSTEM帐户运行,因此在这种情况下,相同的解决方案可能会有所帮助。

解决方案是使用 LocalDB 共享实例。实例通过SqlLocalDB 实用程序进行管理。

  1. 创建一个新的 LocalDB 实例:

    SqlLocalDB.exe create "InstanceName"
    
  2. 共享实例:

    SqlLocalDB.exe share "InstanceName" "SharedInstanceName"
    
  3. 启动实例:

    SqlLocalDB.exe start "InstanceName"
    
  4. 共享实例被命名.\SharedInstanceName,因此在您的连接字符串中它看起来像(localdb)\.\SharedInstanceName。您可以使用以下方法找到您的实例名称:

    SqlLocalDB.exe info
    
  5. 使用sqlcmd 实用程序连接到实例,并将NT AUTHORITY\SYSTEM用户添加到 SQL 用户并为其设置适当的权限:

    sqlcmd.exe -S (localdb)\.\SharedInstanceName -i "<path-to-SQL-file>"
    

    SQL 文件内容:

    CREATE LOGIN [NT AUTHORITY\SYSTEM] FROM WINDOWS WITH DEFAULT_DATABASE=[master]
    GO
    ALTER SERVER ROLE [sysadmin] ADD MEMBER [NT AUTHORITY\SYSTEM]
    GO
    


    一个假设(我没有检查过):由于某种原因,SQL 安装程序类似乎是从NT AUTHORITY\SYSTEM帐户运行的,所以如果您尝试从安装程序类执行上述步骤,在尝试连接时,它很可能会在第 5 步失败到实例。所以这些步骤需要以其他方式完成,例如在运行安装程序类之前.bat直接从安装程序运行的文件。

于 2015-02-02T07:18:50.697 回答