Вход | Регистрация

1С:Предприятие ::

Метки:безопасность

Механизм Row Level Security - проблемы...

Ø [Волшебник, 30.12.04 - 08:28]
Я
   Eugene G
25.05.04 - 06:18
Подмимал данную тему на Т1С, но там народ, что-то не активно мне отвечал, и в основном "чем бы дитя не тешилось...", может Волшебник чем поможет, цитирую полностью:
-----------------------------
Тема: "Как я сделал убогую RLS"
Сразу отмечу, что слово "убогую" относится не к "RLS", а к "сделал".
Для тех, кто еще не в курсе про механизм Row Level Security - читайте в инете (www.polikom.ru/main/stati/stat_security_rls.htm).
Я расскажу о том, что у меня получилось, не с целью похвалится, а с надеждой, что кто-нибудь подскажет как сделать лучше.
По шагам:
1) Патчим bkend.dll, чтобы пользователи могли коннектится к SQL серваку под своими NT логинами - в текстом редакторе открываем bkend.dll и заменяем строку "UID=%s;PWD=%s;"
на "UID=;PWD=; " (так как написано в статье ToyPaul, http://1csql.udmnet.ru/articles/article.shtml?admin/st0006)
2) Патчим 1cv7.exе: отключаем верификацию таблиц на входе первого пользователя, с помощью Soaron'a
 Дальше собственно RLS, вначале на справочники:
1) переименовываем нужные справочники, с помощью EM, например, sc33 в _sc33
2) создаем новое поле в этих справочниках, скажем, User_ID, типа Varbinary(85)
3) создаем для наших справочников view: в select выбираем все колонки, кроме вновь созданной
4) накладываем на view условие: WHERE User_ID=SUSER_SID(SUSER_SNAME())
 (SUSER_SID - возвращает "код" пользователя, типа varbinary(85))
5) для таблиц _scXX, создаем триггер на вставку, который при вставке записи, записывает
пользователя, которым произведено добавление. Код триггера:
 CREATE TRIGGER TestTrigerSC33 ON [dbo].[_SC33]
 AFTER INSERT
 AS
 set nocount on
  UPDATE _SC33
  SET User_ID = SUser_SID(SUser_SName())
  FROM _SC33
 JOIN INSERTED ON _SC33.ID = INSERTED.ID
6) все. наслаждаемся эффектом, теперь пользователи могут работать только со своими записями.
На подчиненных справочниках, как я и думал, тоже все отработало без проблем.
 Теперь RLS по документам, собственно все тоже самое:
1) переименовываем _1sjourn, например, в __1sjourn
2) добавляем поле User_ID
3) Создаем на основе __1sjourn view - _1sjourn с условием
4) вставляем триггер
5) вот и все - пользователи видят только свои документы.
Теперь проблемы:
1) То что, патчится dll и exe - это очень плохо. Товарищи Поликомовцы как-то это обошли.
Вопрос как?
2) При любой модификации md файла (c turboMD только при изменении структуры базы)
потребуется восстанавливать исходную структуру базы - удалять лишние поле, и назад
переименовывать их. Для этого можно написать автоматическое средство.
А может можно как-то лучше?
Вот такая лажа получилась у меня. Замутил это я для сдачи диплома, т.е. диплом это конфа
под 1С, а специальность требует, чтобы в разработанном программном продукте была подсистема
защиты.
Кто понял о чем была речь, просьба высказаться. Любая критика или замечания (а лучше советы) приветствуются.
зы. Предзащита в среду.
зыы. Возможно сразу не смогу ответить, поскольку буду ездить по работам, да в ВУЗ, но
-----------------------------
+ еще косяк - поиск по индексированному полю не работает, 1С вываливается с ошикой состояния курсора :((
 
  Рекламное место пустует


Список тем форума
Рекламное место пустует  
Закон Брукера: Даже маленькая практика стоит большой теории.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует