Это очень похоже на " Проблема входа в SQL Server 2008 с приложением ASP.NET: не удалось открыть явно указанную базу данных "который, к сожалению, так и остался нерешенным.
Моя проблема здесь тонко разные. Во-первых, не удалось войти в учетную запись NT AUTHORITY \ NETWORK SERVICE - это настоящая учетная запись домена. Во-вторых, задействованы две машины - из первого вопроса я понял, что это была одна машина, на которой выполнялись экземпляры IIS и SQL.
Приложение, которое пытается подключиться к базе данных, является приложением ASP.NET, работающим на другом сервере (если это что-то другое, я не уверен, что это так). ConnectionString, используемое в web.config для приложения:
источник данных = MySQLServer; исходный каталог = MyDatabase; интегрированная безопасность = sspi;
А для пула приложений установлено значение NetworkService for Identity.
Итак - в веб-приложении я получаю следующую ошибку:
Невозможно открыть базу данных MyDatabase, запрошенную логином. Не удалось войти в систему. Ошибка входа для пользователя MyDomain \ WebServerMachineName $
В журналах SQL Server я вижу:
Ошибка входа для пользователя MyDomain \ WebServerMachineName $. Причина: не удалось открыть явно указанную базу данных. [КЛИЕНТ: Web.Server.IP.Address]
Запуск этого бита SQL для рассматриваемой базы данных:
USE [MyDatabase]
GO
SELECT
SDP.name AS [User Name],
SDP.type_desc AS [User Type],
UPPER(SDPS.name) AS [Database Role]
FROM sys.database_principals SDP
INNER JOIN sys.database_role_members SDRM
ON SDP.principal_id=SDRM.member_principal_id
INNER JOIN sys.database_principals SDPS
ON SDRM.role_principal_id = SDPS.principal_id
Получает мне такой результат:
MyDomain\WebServerMachineName$ WINDOWS_USER DB_DDLADMIN
MyDomain\WebServerMachineName$ WINDOWS_USER DB_DATAREADER
MyDomain\WebServerMachineName$ WINDOWS_USER DB_DATAWRITER
Мне кажется, что это означает, что у меня есть права.
Кто-нибудь знает, почему это не работает, или как я могу еще немного сузить проблему?
Я в основном отказался от этого сейчас и прибег к использованию вместо этого входа в систему SQL Server. Гораздо проще, хотя я обычно не люблю использовать их вместо идентификаторов Windows.
Вы проверили сопоставления пользователей? Щелкните правой кнопкой мыши имя пользователя в разделе «Безопасность / логины», показанном в предыдущем сообщении, и выберите свойства, чтобы проверить раздел «Сопоставление пользователей», чтобы убедиться, что пользователь в конкретном экземпляре базы данных сопоставлен с пользователем в разделе «Безопасность».
Просто потому, что у вас есть доступ DDLADMIN, DATAREADER и DATAWRITER к база данных делает не означают, что у пользователя действительно есть доступ для входа в сервер.
Не могли бы вы убедиться, что учетная запись, под которой вы работаете (в вашем случае WebServerMachineName), указана в списке для входа в систему безопасности (на фото ниже).
Кроме того, я бы порекомендовал создать учетную запись службы, а затем олицетворять ее в своем приложении ASP.NET. Затем вы можете предоставить доступ к базе данных этой учетной записи службы.