Проблем с User след Restore

1 отговора 65 прегледа
#1

Проблем с User след Restore

Здравейте,тази тема е проодължение към темата 'копиране на база данни в SQL Server 2000 '.
Проблемът ми е следният: След като backup-нах базата данни от Англия и я restore-нах тук в БГ всичко беше наред.Липсваше ми обаче един user,който го има и там и тук,но след "копирането на БД" този юзър не се виждаше тук.Опитвам се да го създам,но SQL Servera казва,че вече има такъв.Някой може ли да каже защо този юзър не се вижда като такъв във съответната БД.
П.С. преди да ресторе-на новата база данни изтрих старата,понеже те са идентични.Да не би там някъде да се е изгубил този юзър или просто при самия бекъп той не се е бекъпнал.

Отговор
в отговор на Toogood #2

Re: Проблем с User след Restore

В SQL Server потребителите се валидират на две нива. Първо ниво е т.нар. logins -- установява дали имаш дастъп до ресурса на сървъра. Второ ниво е т.нар users -- установява дали даден login има права за достъп до дадена база.

Връзката между logins и users се държи във всяка база. Обикновено login Toogood се map-ва към user Toogood. Възможно е обаче имената да не съвпадат, например login sa се map-ва към user dbo.

В случая при теб се е прецакал map-инга между user-и на базата и login-и на сървъра. За да избегнеш такива проблеми при backup/restore на бази между различни сървъри е добре да "уеднаквиш" login-ите им, което означава login-ите да имат еднакви sid-ове.

Първо на "английския" сървър виж sid-овете на проблематичните login-и със това:

select sid, name from master..syslogins

После на bg сървъра използвай същите sid-ове така:

declare @sid varbinary(16)

set @sid = 0xDD7F4EBBAB6D0B47BFD93E7B8CED54D7
exec sp_addlogin @loginame='MyLogin', @passwd='*****', @sid=@sid

... където на @sid задай стойност от "английския" сървър.

cheers,
</wqw>

Отговор