Помилка SQL Server 2008 R2: 15023, користувач, група або роль вже існує


16

У мене є тестова база даних, з якою у мене виникли проблеми з дозволами.
Я не можу отримати доступ до бази даних звітів, а довідкова документація програми говорить про наступне:

Resolution: 

1. Launch the SQL Server Management Studio and connect to the database server(s) hosting   the Vision and Reporting Server databases. 
2. Expand the security folder. 
3. Select logins and right click on the <username> user and choose properties. 
4. Click the User Mapping tab 
5.Make sure the following databases are selected in the Users mapped to this Login:

    ReportServer
    ReportServerTempDB
    Your Vision databases
    This maps the login/user to the respective databases.
6. As you select each database (including your Vision database), select the db_owner role in the Database role membership for: section. You must select this option for each database.

Коли я це роблю, я отримую таку помилку:

"Create failed for user '<servername>\<username>'.  User, group, or role '<servername>\<username>' already exists in the current database. (Microsoft SQL Server, Error: 15023)"

Я перевірив цю помилку в Google і спробував виконати наступну команду для кожної бази даних:

 ALTER USER [<username>] WITH LOGIN = [<username>] 

Повідомлення вказувало на те, що команди успішно виконані, але я все одно отримую вищезгадану помилку, коли намагаюся скласти карту кожної бази даних, як зазначено вище.

Що я пропускаю?

За коментарем Кіна (спасибі) Я спробував це: - Я правою кнопкою миші клацнув на користувача та вибрав: Вхід у сценарій як> Видалити та створити> Нове вікно запиту. - Я запустив отриманий запит і спробував зіставити ролі користувача, вибравши ще дві інші бази даних і db_owner, але я все одно отримую те саме повідомлення про помилку, як вище.

Думки ??

Відповіді:


12

Ви можете спробувати декілька речей, і успіх кожного, ймовірно, залежатиме від того, яку роль у вас має сервер.

Для початківців, якщо це лише один або два користувачі, то чесно, найпростіший спосіб - скинути користувача бази даних із відновленої бази даних, і, якщо вже є логін існуючого сервера, перезавантажте користувача бази даних до входу на сервер за допомогою SSMS. Якщо логін для сервера не існує, просто створіть його, картографуйте користувача та presto! Далеко ми йдемо.

Наступний варіант: Якщо ви мігруєте велику кількість користувачів, використовуйте sp_help_revlogin. sp_help_revlogin - це збережена в Microsoft процедура, яка допоможе перенести входи з одного сервера на інший, включаючи паролі та SID. Ось хороша стаття про це SP_HELP_REVLOGIN


Див. Support.microsoft.com/en-us/kb/918992 Як передавати логіни та паролі між екземплярами SQL Server
James Jenkins

3

Я використовую Auto_Fix з sp_change_users_loginмоїм середовищем розробників, щоб виправити такі проблеми (Помилка 15023). Уникайте використання функції Auto_Fix у ситуаціях, що залежать від безпеки.

Auto_Fix: пов'язує запис користувача в режимі перегляду каталогів системи sys.database_principals у поточній базі даних з тим самим іменем входу на SQL Server. Якщо логін з таким іменем не існує, він буде створений. Вивчіть результат з заяви Auto_Fix, щоб підтвердити, що правильне посилання насправді зроблено. Уникайте використання функції Auto_Fix у ситуаціях, що залежать від безпеки.

sp_change_users_login 'AUTO_FIX', 'myuser'

Також зауважте, що ця функція може бути видалена в майбутній версії Microsoft SQL Server.

Інші посилання:

  1. Користувач, група або роль SQL Server 2008 вже існує в поточній базі даних
  2. Виправлення: Помилка 15023: Користувач вже існує в поточних базах даних
  3. SQL відображає вхід для вже наявного користувача

0
ALTER USER [<username>] WITH LOGIN=[<username>]

Правильний підхід.

В іншому випадку перейдіть до:

Безпека> Вхідні дані> (ваше ім’я користувача)> Властивості> Картографування користувачів

введіть тут опис зображення

і перезавантажте цього користувача до потрібної бази даних.

Ви можете використовувати наступний запит у контексті вашої бази даних, щоб перевірити на дітей-сиріт:

select
    dp.name [user_name]
    ,dp.type_desc [user_type]
    ,isnull(sp.name,'Orhphaned!') [login_name]
    ,sp.type_desc [login_type]
from   
    sys.database_principals dp
    left join sys.server_principals sp on (dp.sid = sp.sid)
where
    dp.type in ('S','U','G')
    and dp.principal_id >4
order by sp.name

-4

перейдіть до основної бази даних та видаліть користувача

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