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


#0 by Eugene G
Подмимал данную тему на Т1С, но там народ, что-то не активно мне отвечал, и в основном "чем бы дитя не тешилось...", может Волшебник чем поможет, цитирую полностью: ----------------------------- Тема: "Как я сделал убогую RLS" Сразу отмечу, что слово "убогую" относится не к "RLS", а к "сделал". Для тех, кто еще не в курсе про механизм Row Level Security - читайте в инете . Я расскажу о том, что у меня получилось, не с целью похвалится, а с надеждой, что кто-нибудь подскажет как сделать лучше. По шагам: 1) Патчим bkend.dll, чтобы пользователи могли коннектится к SQL серваку под своими NT логинами - в текстом редакторе открываем bkend.dll и заменяем строку "UID=%s;PWD=%s;" на "UID=;PWD=; " (так как написано в статье ToyPaul, ) 2) Патчим 1cv7.exе: отключаем верификацию таблиц на входе первого пользователя, с помощью Soaron'a  Дальше собственно RLS, вначале на справочники: 1) переименовываем нужные справочники, с помощью EM, например, sc33 в _sc33 2) создаем новое поле в этих справочниках, скажем, User_ID, типа Varbinary 3) создаем для наших справочников view: в select выбираем все колонки, кроме вновь созданной 4) накладываем на view условие: WHERE User_ID=SUSER_SID(SUSER_SNAME)  (SUSER_SID - возвращает "код" пользователя, типа varbinary) 5) для таблиц _scXX, создаем триггер на вставку, который при вставке записи, записывает пользователя, которым произведено добавление. Код триггера:  CREATE TRIGGER TestTrigerSC33 ON [dbo].[_SC33]  AFTER INSERT  AS  set nocount on  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С вываливается с ошикой состояния курсора :((
#1 by Eugene G
Up! Неужели Волшебник ничего не скажет?
#2 by Волшебник
Мне такие темы неинтересны.
#3 by Eugene G
Если не секрет, Why?
#4 by Волшебник
Я прикладник, а не системщик.
#5 by Eugene G
Разве программирование на t-sql относится к системному программированию?
#6 by Волшебник
С точки зрения 1С - да. Копаться во внутренней структуре таблиц 1С хоть и интересно, но не рекомендуется, потому что можно что-нибудь случайно испортить.
#7 by Eugene G
Ясна, позиция...
#8 by Ёжик в тумане
Честно говоря, недопонял, за что ветка удостоилась БЗ? Разве что, в назидание потомкам?
#9 by Системщик
Потомки тут каким боком? Если темой Волшебник не владеет, она ему не интересна. Потому и в базу знаний.
#10 by Ёжик в тумане
Такая логика мне в голову не приходила даже в тумане..
#11 by Maniac
у системщиков ночью плохо с логикой
#12 by romix
Потому что тема серьезная. В 8.0 может быть это уже сделано? Там же есть сервер приложений, и в нем можно проверять всякие события...
#13 by Системщик
У Маньяков она вообще отсутствует
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям