我今天遇到了一个我以前从未遇到过的问题。
我开发了一个使用 SQL Server 数据库的应用程序。该应用程序具有访问数据库的 Windows 服务。
由于 Windows 服务使用网络服务作为用户,我需要将该用户添加到数据库中,以便它可以访问它。
该任务由我也开发的安装程序自动完成。
在那个安装程序中,我有这个脚本片段:
USE [MyDB]
GO
IF NOT EXISTS(SELECT principal_id FROM sys.database_principals WHERE name = 'NT AUTHORITY\NETWORK SERVICE')
BEGIN
/****** Object: User [NT AUTHORITY\NETWORK SERVICE] Script Date: 26-10-2018 13:42:57 ******/
CREATE USER [NT AUTHORITY\NETWORK SERVICE] FOR LOGIN [NT AUTHORITY\NETWORK SERVICE] WITH DEFAULT_SCHEMA=[dbo]
ALTER ROLE [db_owner] ADD MEMBER [NT AUTHORITY\NETWORK SERVICE]
END
该脚本几乎总是有效,但今天安装。
今天的安装是在一台 Windows 7 PC 上进行的,它是西班牙语的。安装程序发送错误消息,告知“NT AUTHORITY\NETWORK SERVICE”用户不存在。
查看问题,我发现在那台 PC 中,该用户名为“NT AUTHORITY\Servicio de Red”,即西班牙语中的“NETWORK SERVICE”。
这很奇怪,因为我有其他 PC 的 Windows 10 西班牙语,但在那个操作系统中,用户也被称为“NT AUTHORITY\NETWORK SERVICE”。
为了解决那台 PC 中的问题,我必须安装 SQL Server Management Studio 才能将“NT AUTHORITY\Servicio de Red”用户分配给数据库。
由于我事先不知道用户名,是否可以向 SQL 添加一个通用用户,该用户在任何地方都可以使用?