[MSSQL] Сброс прав логина после RESTORE

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

[MSSQL] Сброс прав логина после RESTORE

Сообщение Twister » 11.06.2007 (Пн) 6:08

Доброго всем времени суток.

Возник вопрос по MSSQL Server (2000). Суть вот в чем:
Предположим, есть два компа с работающим на них MSDE + Clients tools (для удобства). В обеих базах создан логин Admin, используемый написанной мной программой для доступа к базе. Изначально права логину выставляются с помощью Enterprise Manager.
Далее на первом компе программно создаю backup таким вот макаром:
Код: Выделить всё
BACKUP DATABASE ShopDB
TO DISK = '<path_to_file>'

На втором компе восстанавливаю:
Код: Выделить всё
USE master
RESTORE DATABASE ShopDB
FROM DISK = '<path_to_file>'
WITH REPLACE

Все отлично ресторится, но права Admin'а на базу ShopDB сбрасываются, их приходится восстанавливать вручную. Если же ресторить с помощью Enterprise Manager, то права сохраняются. Восстанавливая базу на той же машине, на которой был сделан Backup данная пробема не возникает, Т.е. права не сбрасываются.

Внимание, вопрос:
Какие опции команды RESTORE необходимо использовать, чтобы права сохранялись?

P.S. Сразу прошу извинения, если кому вопрос покажется глупым или избитым - я, ЛИЧНо, с этим столкнулся впервые.
А я все практикую лечение травами...

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 12.06.2007 (Вт) 20:34

Дело в том, что эти два админа на разных серверах - разные. Несмотря на одинаковый login name, у них разный sid (см. таблицу sysxlogins в базе master).
Соответственно, при ресторе базы с другого сервера имена пользователей автоматически не сопоставляются по соответствию логинов - только по соответствию sid'ов, а varbinary(85), используемый для хранения оного, как ты понимаешь, является более чем уникальным числом.

Для сопоставления использовать dbo.sp_change_users_login в режиме Auto_Fix.


P.S. Что именно делает SQL EM, чтобы юзеры и логины сопоставлялись по именам, не знаю; более того, не уверен, что он это делает. В любом случае, ты всегда можешь поставить профайлер и посмотреть, что там на самом деле происходит. Не уверен, правда, что профайлер согласится цепляться за MSDE, но это уже другой вопрос.

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Сообщение kibernetics » 12.06.2007 (Вт) 22:09

наверное EM права тоже восстанавливает. а чтобы скриптом восстановить - надо выполнить еще пару запросов с назначением прав
наверное, нужно искать в доках что-то типа GRANT ...

чисто предположение

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 13.06.2007 (Ср) 10:27

Дело в том, что эти два админа на разных серверах - разные. Несмотря на одинаковый login name, у них разный sid (см. таблицу sysxlogins в базе master).
Собственно, по логике вещей, я так и предполагал. Не знал только где лежит Sid.
Для сопоставления использовать dbo.sp_change_users_login в режиме Auto_Fix.
Немного не вкурил что ты хотел сказать...

Кстати, даст ли мне кто-нибудь права на записть в sysxlogins или это можно только системе?
А я все практикую лечение травами...

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 13.06.2007 (Ср) 13:45

Я имел в виду, что нужно как минимум открыть Books Online, набрать в индексе sp_change_users_login и прочитать, что делает эта хранимая процедура.

Если даже до этого не вкурилось... что ж, забористый урожай у вас в этом году, видимо. :roll:

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 13.06.2007 (Ср) 16:33

Не знаю как в MS SQL, но в Sybasе ASE для сохранения прав (и паролей) пользователей при выгрузке-загрузке дампа базы на другой сервер проходится синхронизировать данные таблиц syslogins (логины), sysloginroles и syssrvroles (сведения о ролях), а также удостоверяться в правильности связи master.syslogins <--> dbname.sysusers по полю suid (связь логинов сервера и юзеров конкретной базы).

Думаю в MS SQL все делается похоже (поскольку эти СУБД очень схожи), только названия таблиц (полей) могут быть другими.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 13.06.2007 (Ср) 20:56

VVitafresh писал(а):...

Да все там так же делается. Просто для того, чтобы минимизировать количество случаев, когда приходится запускать стальные руки-крюки в системные таблицы, у MSFT имеется некоторый набор системных хранимок. И прекрасно она работают, нужно просто один раз хелп по ним прочитать...

Кстати, в 2005 прямой апдейт в большинстве случаев уже не прокатит - там эти таблицы, как бы это сказать... нарисованные. Так что лучше заранее привыкать к правильному подходу.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 14.06.2007 (Чт) 11:34

Я имел в виду, что нужно как минимум открыть Books Online, набрать в индексе sp_change_users_login и прочитать, что делает эта хранимая процедура.
Вчера не вкурил ибо спешил и убежал. Сейчас буду вкуривать... :)
Если даже до этого не вкурилось... что ж, забористый урожай у вас в этом году, видимо.
... Сынок, ты иди покушай, а то третий день на балконе стоишь... :)
А я все практикую лечение травами...

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 15.06.2007 (Пт) 8:38

Вообщем всем спасибо (Ennor отдельный респект), вроде бы заработало. Вопрос (пока :wink: ) закрыт...
А я все практикую лечение травами...


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 177

    TopList