2016-10-26 4 views
9

Я пытаюсь сопоставить свою другую БД с пользователем, перейдя на страницу
Безопасность> Логины> щелкните правой кнопкой мыши someuser> Свойства> Пользовательское сопоставление> Выберите DB> установить как db_owner, а затем ok, но я продолжаю получив сообщение об ошибкеОшибка сопоставления пользователей SQL Server 15023

User, group, or role 'someuser' already exists in the current database. (Microsoft SQL Server, Error: 15023)

Что вызывает ошибку и как мне сопоставить этого пользователя в базе данных?

+1

Это в восстановленной базе данных? – DenStudent

+0

Я восстановил базу данных, но как я могу определить, восстановлен ли она или нет? извините, не знакомы с этими вещами –

ответ

3

Если вы назначаете разрешения пользователю базы данных, не сопоставляя его сначала с базой данных, он выдает указанную вами ошибку.

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

+1

На самом деле, я не работал, это просто, что пользователь существовал в указанной/выбранной базе данных, где я собираюсь отображать пользователя, нужно удалить его из конкретной БД, но нет необходимо удалить и воссоздать пользователя. Но спасибо за помощь mr knockout –

+0

Правильно - я использовал терминологию входа (уровень сервера) и пользователя (уровень базы данных). – knockout

2

Если это всего лишь один или два пользователя, то самым простым способом является удаление пользователя базы данных из восстановленной базы данных, переназначение пользователя базы данных на вход в систему с помощью SSMS. Если логин сервера не существует, просто создайте его, сопоставьте пользователя.

Вариант 2: Если вы переносите большое количество пользователей, используйте sp_help_revlogin. sp_help_revlogin - это хранимая процедура, предоставленная Microsoft, которая поможет переносить логины с одного сервера на другой, включая пароли и SID. Вот хорошая статья об этом SP_HELP_REVLOGIN: http://www.databasejournal.com/features/mssql/article.php/2228611/Migrating-Logins-from-One-SQL-Server-to-Another.htm

Патч-код, который поможет ему: выполнить следующий запрос T-SQL в Query Analyzer. Это вернет всех существующих пользователей в базу данных в панели результатов.

USE YourDB 
GO 
EXEC sp_change_users_login 'Report' 
GO 

Запустить следующий запрос T-SQL в Query Analyzer, чтобы связать логин с именем пользователя. Атрибут «Auto_Fix» создаст пользователя в экземпляре SQL Server, если он не существует. В следующем примере «ColdFusion» - это UserName, «cf» - пароль. Auto-Fix связывает запись пользователя в таблице sysusers в текущей базе данных с логином с тем же именем в sysxlogins.

USE YourDB 
GO 
EXEC sp_change_users_login 'Auto_Fix', 'ColdFusion', NULL, 'cf' 
GO 

Запустить следующий запрос T-SQL в Query Analyzer, чтобы связать логин с именем пользователя. 'Update_One' связывает указанного пользователя в текущей базе данных для входа в систему. логин должен уже существовать. пользователь и логин должны быть указаны. Пароль должен быть NULL или не указан

USE YourDB 
GO 
EXEC sp_change_users_login 'update_one', 'ColdFusion', 'ColdFusion' 
GO 

2) Если Войти учетная запись имеет разрешение на падение других пользователей, выполнять следующие T-SQL в Query Analyzer. Это приведет к потере пользователя.

USE YourDB 
GO 
EXEC sp_dropuser 'ColdFusion' 
GO 

Создайте тот же самый пользователь снова в базе данных без ошибок.

13

Чтобы исправить отображение пользователя и входа в систему, вам нужно открыть окно запроса в SQL Server Management Studio. Введите следующие две строки и замените MyDB с именем базы данных и MyUser с правильным именем пользователя:

USE myDB 

EXEC sp_change_users_login 'Auto_Fix', 'myUser' 

Если выполняется успешно, вы должны получить выход, как этот:

The row for user '****' will be fixed by updating its login link to a login already in existence. 

The number of orphaned users fixed by updating users was 1. 

The number of orphaned users fixed by adding new logins and then updating users was 0.** 

Ваш пользователь должен теперь правильно отображаться.

Edit:

Новый способ Resolve/Фикс осиротевший Пользователь:

В основной базе данных, с помощью оператора CREATE LOGIN с опцией SID воссоздать отсутствующий логин, обеспечивая SID пользователя базы данных.

CREATE LOGIN <login_name> 
WITH PASSWORD = '<use_a_strong_password_here>', 
SID = <SID>; 

Чтобы отобразить сирота пользователя логина, который уже существует в мастере, выполнить инструкцию ALTER USER в базе данных пользователя, указав имя пользователя.

ALTER USER <user_name> WITH Login = <login_name>; 

Когда вы воссоздаете недостающий логин, пользователь может получить доступ к базе данных, используя предоставленный пароль. Затем пользователь может изменить пароль учетной записи входа, используя инструкцию ALTER LOGIN.

ALTER LOGIN <login_name> WITH PASSWORD = '<enterStrongPasswordHere>'; 
+0

'sp_change_users_login' теперь устарел/удален. Новый способ исправить это описан [здесь] (https://docs.microsoft.com/en-us/sql/sql-server/failover-clusters/troubleshoot-orphaned-users-sql-server) tl; Dr: 'ALTER USER WITH Login = ; ' – Liam

Смежные вопросы