从安装程序类连接到LocalDB

时间:2014-05-10 03:39:59

标签: c# installer localdb managedinstallerclass

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

Login failed for user 'NT AUTHORITY\SYSTEM'

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

  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 utility连接到实例,并将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文件,该文件在运行安装程序类之前直接从安装程序运行。

    < / LI>