Сегодня я столкнулся с проблемой, с которой никогда не сталкивался.
Я разработал приложение, которое использует базу данных 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 на испанском языке.Установщик отправил сообщение об ошибке, сообщив, что пользователь «NT AUTHORITY \ NETWORK SERVICE» не существует.
Глядя на проблему, я обнаружил, что на этом ПК этот пользователь называется «NT AUTHORITY \ Servicio de Red»,то есть «NETWORK SERVICE» на испанском языке.
Это странно, потому что у меня есть другие ПК с Windows 10 на испанском языке, но в этой ОС пользователь также называется «NT AUTHORITY \ NETWORK SERVICE».
Чтобы решить проблему на этом компьютере, мне пришлось установить SQL Server Management Studio только для назначения пользователя «NT AUTHORITY \ Servicio de Red» для базы данных.
Поскольку я не знаю пользователязаранее, возможно ли добавить в SQL универсального пользователя, который будет работать везде?