是否需要以运行服务的用户身份安装具有SQL Server传输和Windows身份验证的NServiceBus端点?

时间:2017-07-05 13:14:54

标签: nservicebus

我正在安装使用SQL Server传输的NServiceBus 4.x端点。运行安装程序时(通过Octopus Deploy,默认情况下作为本地系统运行)...

.\NServiceBus.Host.exe /install NServiceBus.Production /serviceName=$name /username:"$username" /password:"$password

...我收到错误:

Failed to execute installers: System.Data.SqlClient.SqlException (0x80131904): Login failed for user 'DOMAIN\MACHINENAME$'.

如果安装程序在运行时连接到SQL Server,则这是预期的行为:本地系统在离开框时成为计算机帐户,并且计算机帐户无权访问传输数据库。

但是,我不打算将端点作为本地系统运行。相反,我打算使用一个可以访问传输数据库的域服务帐户,所以......

是否可以使用SQL Server传输将NServiceBus端点安装为无权访问传输数据库的用户?

额外问题:NServiceBus的版本是否在4.x之后更改了此行为?

1 个答案:

答案 0 :(得分:2)

这里的问题是NServiceBus.Host.exe是使用您所说的Octopus Deploy和/install运行NServiceBus安装程序的凭据执行的。

一些替代方案:

  1. 运行Octopus Deploy Agent,其权限也允许在此部署阶段对数据库进行架构更改。

  2. 不是直接执行主机,而是启动具有不同凭据的shell,以便使用具有适当权限的凭据运行主机。

  3. 请勿使用主机,但请使用自托管。通过sc.exe注册该服务以使用正确的凭据注册Windows服务,并使用endpointConfiguration.EnableInstallers()来控制是否必须运行安装程序。

  4. 使用(3)中的自托管,不要使用endpointConfiguration.EnableInstallers(),而是编写所有任务的脚本,让它们独立于“Windows服务”注册任务运行。或者,您也可以使用sc.exe注册NServiceBus.Host.exe,以便不会运行/install

  5. 我建议不要总是在端点上运行endpointConfiguration.EnableInstallers()。您应该区分部署和运行时。在部署期间,您将创建表,模式等,但在运行时,该帐户不应具有创建或删除表并运行最小权限的权限。