Назад | Перейти на главную страницу

SQL Server 2008: не удалось получить вход в систему для пользователя «Домен \ Пользователь». Не удалось открыть явно указанную базу данных [CLIENT: IP.ADD.RR.ESS]

Это очень похоже на " Проблема входа в 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. Затем вы можете предоставить доступ к базе данных этой учетной записи службы.