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



我正在安装一个使用 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安装程序。

一些替代方案:

  1. 运行八达通部署代理的权限,该权限还允许在此部署阶段对数据库进行架构更改。

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

  3. 不要使用主机,而是使用自托管。通过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
  4. 使用自托管,如 (3( 中所示,不要使用endpointConfiguration.EnableInstallers()而是编写所有任务的脚本,并让这些任务独立于"Windows 服务"注册任务运行。或者,可以改为使用sc.exe注册NServiceBus.Host.exe,以便不运行/install

    • 这意味着自己生成大多数脚本。有些组件有脚本生成器,但我们的文档有很多关于脚本的指导
      • https://docs.particular.net/search?q=script

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

相关内容

最新更新