我正在安装使用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之后更改了此行为?
答案 0 :(得分:2)
这里的问题是NServiceBus.Host.exe
是使用您所说的Octopus Deploy和/install
运行NServiceBus安装程序的凭据执行的。
一些替代方案:
运行Octopus Deploy Agent,其权限也允许在此部署阶段对数据库进行架构更改。
不是直接执行主机,而是启动具有不同凭据的shell,以便使用具有适当权限的凭据运行主机。
请勿使用主机,但请使用自托管。通过sc.exe
注册该服务以使用正确的凭据注册Windows服务,并使用endpointConfiguration.EnableInstallers()
来控制是否必须运行安装程序。
使用(3)中的自托管,不要使用endpointConfiguration.EnableInstallers()
,而是编写所有任务的脚本,让它们独立于“Windows服务”注册任务运行。或者,您也可以使用sc.exe
注册NServiceBus.Host.exe
,以便不会运行/install
。
我建议不要总是在端点上运行endpointConfiguration.EnableInstallers()
。您应该区分部署和运行时。在部署期间,您将创建表,模式等,但在运行时,该帐户不应具有创建或删除表并运行最小权限的权限。