Но в нашем случае придется установить RLS-ограничения на доступ всех пользователей ко всем объектам данных. На практике это означает следующее:
1. Потребуется выполнить огромный объем работ по настройке, отладке и тестированию RLS-ограничений практически для каждого объекта метаданных конфигурации (а они могут измеряться многими сотнями).
2. Нагрузка на СУБД при выполнении запросов к данным, «обернутым» RLS-ограничениями, существенно увеличивается. Как следствие – падает производительность при параллельной работе множества пользователей.
Новый механизм разделения данных позволяет полноценно реализовать multitenancy-архитектуру прикладного решения, когда разграничивается не только доступ к данным информационной базы, но и использование других механизмов технологической платформы.
Подробный технический разбор механизма разделения данных выходит за рамки статьи, поэтому мы рассмотрим только наиболее важный, с нашей точки зрения, момент – ограничение доступа к данным. В отличие от RLS, при использовании механизмов разделения данные информационной базы разделяются на области без внесения существенных изменений в конфигурацию и практически без потерь производительности. Благодаря чему это достигается?
1. В платформе появился новый объект метаданных – общий реквизит. Такой реквизит может быть включен в состав практически любого прикладного объекта, отвечающего за хранение данных (справочник, документ, план счетов, бизнес-процесс и т. д.), установкой одного флажка.
2. У общего реквизита есть свойство «Разделение данных», установка которого превращает общий реквизит в разделитель данных. Соответственно все прикладные объекты, включенные в состав общего реквизита, также переходят в режим разделения данных.
3. В конфигурации может быть определено любое количество разделителей, причем для каждого можно настроить условие, при котором он считается действующим. Соответственно можно реализовывать сколь угодно гибкие схемы выделения и изоляции областей данных внутри информационной базы. Причем как для уникальных решений, так и для тиражных, которые должны уметь переключаться между разделяемым и автономным режимами без изменения конфигурации, посредством параметрической настройки.
4. В отличие от механизма RLS, который оперирует ограничениями конкретных прав доступа для конкретных ролей (скажем, можно запретить чтение, но разрешить изменение объекта), логика механизма разделения данных значительно проще: объект или входит в область данных, доступную пользователю, или не входит.
5. Структура хранения разделителей данных в СУБД спроектирована таким образом, чтобы оказывать минимальное влияние на производительность параллельной работы множества пользователей с разделенными данными.
Следует уточнить, что механизм разделения данных никоим образом не подменяет механизмы ролей, прав и ограничений доступа, а дополняет их. Если объект входит в область, доступную пользователю, но пользователь не обладает необходимой ролью и/или не выполняется условие соответствующего ограничения RLS – доступа к объекту пользователь не получит.
Отдельно следует отметить разделение пользователей информационной базы. Разделители данных можно настроить таким образом, что пользователю будет доступна только та часть общего списка пользователей информационной базы, которая принадлежит к доступной области данных. Более того, если задействовать свойство «Разделение аутентификации», то в разных областях данных можно создавать одноименных пользователей – при обычной практике «именем пользователя в базе является его фамилия, иногда дополненная инициалами», такое свойство разделителя данных представляется крайне полезным.
Внешние источники данныхДругое важное новшество версии 8.2.14 – механизм доступа к данным внешних источников. Наверное, нет необходимости приводить конкретные примеры задач, в которых реализовано получение информационной базой «1С: Предприятия» данных «извне». Задачи вида «прочитать из Excel», «прочитать из Access», «прочитать из Oracle» возникают практически на любом предприятии, причем часто задача формулируется не просто «прочитать и записать в базу», а «выполнять регулярное чтение и использовать прочитанные данные в логике расчетов и/или в качестве базы для формирования отчета».