У вході вже є обліковий запис під іншим іменем користувача


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
Чи створили ви базу даних за допомогою цього входу для підключення до сервера? Якщо так, то ви його власник db і не потрібно створювати іншого користувача. Ви вже налаштовані.
Маріан

Власне, я використовував команду aspnet_regsql -E -S .\MSSQLSERVER_R2 -ssaddдля створення ASPStateбази даних. Я думаю, напевно, я вже налаштований, хоча навіть не усвідомлюю цього в першу чергу.
Джек

Здогадайтеся, що: "-E -> Аутентифікувати поточні облікові дані Windows." :-)
Мар’ян

4
Я б використав sys.server_principalsі sys.database_principals. sysusersі sysloginsіснують лише для зворотної сумісності.
Аарон Бертран

4

Це "метадані" ...

Іноді користувач бази даних "пошкоджується" протягом усього, що відбувається в цій БД. (Я бачив подібну поведінку, якщо БД відновлюється, а ролі у відновленій копії відрізняються від тієї, яку містив накладений. Тому я спробував нижче, що вирішив проблему для мене.)

  1. Відкрийте властивості входу в SSMS -> (Безпека | Вхід | Невдалий UserID | Властивості | Картографування користувача). Ви, ймовірно, побачите вже перевірену БД і їй присвоєні ролі (як абсолютно нормально).

  2. Зверніть увагу на дозволи на БД, що дають помилку, лише для довідки.

  3. Зніміть цей прапорець і збережіть логін.
  4. Тепер знову запустіть свій запит, щоб додати вхід / роль в цільову БД. Це повинно працювати просто чудово.

2
коли я Cannot drop the user 'dbo'. (Microsoft SQL Server, Error: 15150)
переходжу

Я також отримав 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.