我正在安装一个使用 SQL Server 传输的 NServiceBus 4.x 端点。 在运行安装程序时(通过八达通部署,默认情况下以本地系统运行(...
.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 'DOMAINMACHINENAME$'.
如果安装程序在运行时连接到 SQL Server,则这是预期行为:本地系统在离开框时成为计算机帐户,并且计算机帐户无权访问传输数据库。
但是,我不打算将端点作为本地系统运行。 相反,我打算使用有权访问传输数据库的域服务帐户,因此...
是否可以以无权访问传输数据库的用户身份使用 SQL Server 传输安装 NServiceBus 端点?
额外问题:此行为是否在 4.x 之后的 NServiceBus 版本中发生了更改?
这里的问题是,NServiceBus.Host.exe
是使用您所说的八达通部署的凭据执行的,并且/install
运行NServiceBus安装程序。
一些替代方案:
-
运行八达通部署代理的权限,该权限还允许在此部署阶段对数据库进行架构更改。
-
不要直接执行主机,而是使用不同的凭据启动 shell,以便使用具有适当权限的凭据运行主机。
-
不要使用主机,而是使用自托管。通过
sc.exe
注册该服务,以使用正确的凭据注册 Windows 服务,并使用endpointConfiguration.EnableInstallers()
来控制是否必须运行安装程序。- https://docs.particular.net/nservicebus/operations/installers
- https://docs.particular.net/samples/hosting/windows-service/
- https://docs.particular.net/nservicebus/hosting/windows-service#installation
-
使用自托管,如 (3( 中所示,不要使用
endpointConfiguration.EnableInstallers()
而是编写所有任务的脚本,并让这些任务独立于"Windows 服务"注册任务运行。或者,可以改为使用sc.exe
注册NServiceBus.Host.exe
,以便不运行/install
。- 这意味着自己生成大多数脚本。有些组件有脚本生成器,但我们的文档有很多关于脚本的指导
- https://docs.particular.net/search?q=script
- 这意味着自己生成大多数脚本。有些组件有脚本生成器,但我们的文档有很多关于脚本的指导
我建议不要总是在端点上运行endpointConfiguration.EnableInstallers()
。应区分部署和运行时。在部署期间,您将创建表、架构等,但在运行时,该帐户不应具有创建或删除表以及运行最低权限的权限。