Логин уже имеет учетную запись под другим именем пользователя

29

Когда я выполняю этот SQL:

USE ASPState
GO
IF NOT EXISTS(SELECT * FROM sys.sysusers WHERE NAME = 'R2Server\AAOUser')
CREATE USER [R2Server\AAOUser] FOR LOGIN [R2Server\AAOUser];
GO

Я получаю следующую ошибку:

Логин уже имеет учетную запись под другим именем пользователя.

Как я узнаю, что это другое имя пользователя для моей учетной записи?

Джек
источник

Ответы:

31

Это означает, что имя входа [R2Server \ AAOUser] уже сопоставлено с пользователем в этой базе данных. Или, другими словами, другой пользователь базы данных использует этот логин. Вы можете увидеть, какой пользователь базы данных использует ваш логин, с помощью следующего запроса:

use YourDB
go
SELECT su.name as DatabaseUser
FROM sys.sysusers su
join sys.syslogins sl on sl.sid = su.sid
where sl.name = 'test' -- login

PS: версия скрипта, которая не использует представления совместимости:

Select sp.name as LoginName, sp.type_desc as LoginType,
    dp.name as DBUser, dp.type_desc as UserType
from sys.server_principals sp
join sys.database_principals dp on dp.sid = sp.sid
where sp.name = 'test' -- your login
Мэриан
источник
Хорошо, я вижу dboотображаемое значение . Странно, я не помню, чтобы я использовал dboдля своей учетной записи R2Server\AAOUser. Интересно, что мне делать дальше.
Джек,
4
Вы создали базу данных, используя этот логин для подключения к серверу? Если да, то вы владелец БД и вам не нужно создавать другого пользователя. Вы уже настроены.
Мариан
На самом деле, я использовал команду aspnet_regsql -E -S .\MSSQLSERVER_R2 -ssaddдля создания ASPStateбазы данных. Я думаю, наверное, я уже настроен, хотя я даже не осознаю этого.
Джек,
Угадайте, что: "-E -> Аутентификация с текущими учетными данными Windows." :-)
Marian
4
Я бы использовал sys.server_principalsи sys.database_principals. sysusersи sysloginsтолько для обратной совместимости.
Аарон Бертран
4

Это «вещь метаданных» ...

Иногда пользователь базы данных «повреждается» во время всего, что происходит в этой БД. (Я видел похожее поведение, если БД восстанавливается, а роли в восстановленной копии отличаются от ролей, содержащихся в той, которую вы наложили. Вот почему я попробовал ниже, что решило проблему для меня.)

  1. Откройте Свойства входа в систему SSMS -> (Безопасность | Входы в систему | Сбой UserID | Свойства | Отображение пользователя). Вы, вероятно, увидите, что БД уже проверена и ей назначены роли (как в обычном порядке).

  2. Обратите внимание на разрешения для БД, дающей ошибку, просто для справки.

  3. Снимите эту БД и сохраните логин.
  4. Теперь повторите запрос, чтобы добавить логин / роль в целевую БД. Это должно работать просто отлично.
CK в CLE
источник
2
когда я добираюсь до шага 3, я получаю:Cannot drop the user 'dbo'. (Microsoft SQL Server, Error: 15150)
bkwdesign
Я также получил Cannot drop the user 'dbo'.сообщение об ошибке. Я побежал этот сценарий, который удаляется проблемное отображением пользователей и неподвижным вопрос: USE DATABASE_NAME; ALTER AUTHORIZATION ON DATABASE::DATABASE_NAME TO [sa]. Для получения дополнительной информации это источник, который я использовал: blog.sql-assistance.com/index.php/cannot-drop-the-user-dbo
SherlockSpreadsheets