Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Orphaned users  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Вопрос, многократно задававшийся тут, но тем не менее туплю :-(((.

В базе есть объекты, owner'ом которых является некий юзер. Бэкап базы, рестор ее на другом сервере. Там соответствующего логина, ессно, не было. Создаем его, получаем т.н. orphaned user, т.е тот, у которого различаются SID'ы в sysusers данной базы и syslogins в master'е.
exec sp_change_users_login 'report' честно выдает этого юзера, как "осиротевшего".

Лечим эту ситуацию, как рекомендуется тут.
exec sp_change_users_login 'report' теперь выдает ноль строк, все здорово.

Но законнектившись под логином, соответствующим данному юзеру, я не имею доступа к объектам, владельцем которых он является. Т.е.
select * from myusr.table1 выдает все строки, а
select * from table1 выдает "Invalid object name 'table1'."

Проверяю на всякий случай
select sid from sysusers where name = 'myusr'
select sid from master..syslogins where name = 'myusr'
Они одинаковые.

Так почему же я не имею доступа к объектам, которыми владеет myusr?
16 окт 03, 19:58    [380156]     Ответить | Цитировать Сообщить модератору
 Re: Orphaned users  [new]
mcbda
Guest
А если так?

setuser 'myusr'

go
select * from table1
go
16 окт 03, 20:19    [380180]     Ответить | Цитировать Сообщить модератору
 Re: Orphaned users  [new]
Snark
Member

Откуда: LA
Сообщений: 111
EXEC sp_change_users_login 'Update_One', 'MyUserName, 'MyUserName'
http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q274/1/88.ASP&NoWebContent=1
16 окт 03, 21:09    [380222]     Ответить | Цитировать Сообщить модератору
 Re: Orphaned users  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
2mcbda: так нельзя, потому что клиентский код мне недоступен.
2Snark: так и было сделано с самого начала. см. мой первый пост, слово-ссылку "тут".
17 окт 03, 11:05    [380748]     Ответить | Цитировать Сообщить модератору
 Re: Orphaned users  [new]
Glory
Member

Откуда:
Сообщений: 104760
Хм, а что для этого пользователя выдают

select user_name(), suser_sname()


select a.uid, b.name
from sysobjects a
inner join sysusers b on b.uid = a.uid
where a.name = 'table1'
17 окт 03, 11:18    [380780]     Ответить | Цитировать Сообщить модератору
 Re: Orphaned users  [new]
mcdba
Guest
Тогда непонятно, откуда делается коннект, и как и в каком контексте выполняются команды SELECT.
Если в QA зайти, например, db_owner (sa etc.), а потом явно сказать setuser 'myusr', то все равно доступа к table1 нет?
17 окт 03, 11:24    [380795]     Ответить | Цитировать Сообщить модератору
 Re: Orphaned users  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
2Glory: результаты запросов:
------------------


dbo myusr

uid name
------------------

5 myusr


2mcdba: да я пока на QA все пытаюсь, до клиента еще и дело не дошло. Да, если войти под sa, сказать setuser 'myusr', то доступа к таблице нет. Также, как если войти сразу под myusr.
17 окт 03, 11:34    [380820]     Ответить | Цитировать Сообщить модератору
 Re: Orphaned users  [new]
Glory
Member

Откуда:
Сообщений: 104760
dbo myusr
!!!!!!
Если он dbo, то с чего сервер будет искать для него myusr.table если владелец не указан явно ?????
17 окт 03, 11:37    [380834]     Ответить | Цитировать Сообщить модератору
 Re: Orphaned users  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Если у меня неправильный маппинг логина myusr на пользователя в базе myusr, то почему sid'ы у них совпадают?
17 окт 03, 12:06    [380918]     Ответить | Цитировать Сообщить модератору
 Re: Orphaned users  [new]
mcdba
Guest
В EM - > Security -> Logins -> Database Access можно прямо на ходу переключать контекст для логина в нужной базе. Забавно.
17 окт 03, 12:13    [380941]     Ответить | Цитировать Сообщить модератору
 Re: Orphaned users  [new]
Glory
Member

Откуда:
Сообщений: 104760
Думаю, что маппинг правильный. Просто в данной базе myusr входит в роль db_owner или сам является dbo. Поэтому для базы он всегда будет dbo. И объекты для него будут искаться с владельцем dbo.

А то что он на другом сервере создавал таблицы со своим именем означает, что
- либо он был dbo но явно указывал присоздании таблицы свое имя пользователя в базе
- либо он не был dbo, но имел права на создание таблиц

Можно выкинуть myuser из db_owner(убрать из владельцев базы). И дать ему ну скажеи db_datareader и/или db_datawriter. Или вообще не включать его нив какие роли - ведь на объеты, владельцами которых он является, у него и так будут все права.
17 окт 03, 12:14    [380946]     Ответить | Цитировать Сообщить модератору
 Re: Orphaned users  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Хех...
select su.name from sysusers su inner join master..syslogins sl on sl.sid = su.sid where sl.name = 'myusr'

Выдает две записи - myusr и dbo. SID'ы у них, оказывается, совпадают!
17 окт 03, 12:58    [381067]     Ответить | Цитировать Сообщить модератору
 Re: Orphaned users  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
В общем, грабли решились довольно традиционно. Детачим базу, грохаем myusr, создаем его заново, аттачим базу, выполняем sp_change_users_login для него. SID'ы теперь у myusr и dbo разные, проблем никаких.

Всем спасибо за участие :-)
17 окт 03, 16:24    [381692]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить