Пользователи базы данных и логины сервера и сопоставление между ними

9

У меня есть экземпляр SQL Server 2008 R2 Express Edition дома, а другой - на сервере в помещении клиента, который я использую для разработки приложения с использованием Access в качестве внешнего интерфейса. Это приложение имеет 5 отдельных имен входа, которые я могу использовать в строке подключения (в зависимости от группы доступа, в которой находится пользователь). Домашний экземпляр имеет несколько баз данных, некоторые из которых не имеют ничего общего с этими приложениями.

Я вручную создал логины в каждом экземпляре с течением времени (и, вероятно, в другом порядке).

Я надеюсь, что смогу (более одного раза) взять резервную копию с моего домашнего компьютера базы данных, над которой я работаю, и загрузить ее на экземпляр в клиентских помещениях с помощью восстановления, просто переместив файлы в наборе резервных копий на фактическое файлы, используемые на этом сервере во время процесса восстановления. Часть, которую я не понимаю, это отображение между пользователем базы данных и логином.

Я думал, что соответствия имени должно быть достаточно, но, пытаясь решить проблему, из-за которой пользователи восстановленной базы данных, казалось, не были сопоставлены с именем входа на сервер, я наткнулся на инструкцию Transact-SQL ALTER USER и, в частности, его ссылка на использование WITH LOGIN и некоторое обсуждение "SID".

Поскольку (я предполагаю) имена входа в систему сервера имеют разные идентификаторы безопасности в каждом экземпляре, означает ли это, что после загрузки резервной копии между экземплярами мне необходимо повторно подключить сопоставление с помощью серии команд ALTER USER WITH LOGIN?

akc42
источник

Ответы:

9

Loginsили серверные логины существуют на уровне SQL-сервера, а database userна уровне базы данных. Они не должны иметь одно и то же имя, но обычно имеют. В одном случае вы не можете иметь функцию пользователя базы данных должным образом без соответствующего имени входа SQL-сервера.

Допустим, у вас есть экземпляр: instanceA с несколькими учетными записями userA на вашем компьютере. Вы можете сопоставить логин userA сервера с пользователем базы данных: userA для базы данных DB_A . Они оба называются userA , но один - сервер, loginа другой - database user. Пользователь базы данных: userA находится в DB_A . При резервном копировании и восстановление DB_A от instanceA другого instanceB , то пользователь базы данных: Пользователь перемещается, но Логин сервера: ПользовательО все еще остается на instanceA. Чтобы переместить логины с instanceA на instanceB, вы можете использоватьsp_help_revlogin (Нажмите, чтобы проверить страницу базы знаний) .

Если вы ранее создали имя входа SQL Server userA на instanceB , то SQL попытается сопоставить этот вход с именем пользователя базы данных: userA, когда DB_A восстанавливается из instanceA в instanceB. Если это не удается, вы можете использовать процедуру sp_change_users_login (ссылка для BOL) , чтобы исправить поврежденные отображения. Надеюсь, это прояснит ситуацию.

StanleyJohns
источник
Спасибо - я думаю, что у меня были правильные концепции, но sp_help_revlogin и sp_change_users_login и новые, и я помогу мне. Я буду исследовать больше. Спасибо
akc42