Зависимость результата ограничений доступа к данным от плана запроса СУБДВ некоторых случаях результат ограничений доступа к данным может зависеть от плана запроса СУБД. В данной статье рассмотрены возможные ситуации и даны рекомандации, как этого избежать. | | dimetra2008 Последняя редакция №0 от 23.09.11 URL: http://kb.mista.ru/article.php?id=849 | |
Ключевые слова: 1с, 1с предприятие, 1с запрос, субд, доступ
В некоторых случаях результат ограничений доступа к данным может зависеть от плана запроса СУБД. В данной статье рассмотрены возможные ситуации и даны рекомандации, как этого избежать.
Условия возникновения проблемы
Проблема возможной зависимости результата ограничений доступа к данным от плана запроса СУБД может возникнуть при выполнении запроса к базе данных без ключевого слова РАЗРЕШЕННЫЕ, если для текущего пользователя имеются ограничения доступа к данным, и при этом запрос содержит одно или несколько сравнений вида:
<Выражение над полями> {В|НЕ В} (<Вложенный запрос>)
(<Выражение над полями 1>, ..., <Выражение над полями N>) {В|НЕ В} (<Вложенный запрос>)
Если в этом случае <Вложенный запрос> использует таблицы базы данных, на которые наложены ограничения доступа, то возможно, что на одних СУБД запрос будет выполняться успешно, а на других будет выдаваться сообщение У пользователя недостаточно прав на исполнение операции над базой данных при условии полной идентичности данных в информационных базах.
Причина различий
Возможная разница в поведении объясняется реализацией ограничений доступа к данным без ключевого слова РАЗРЕШЕННЫЕ в 1С Предприятии.
Запрос без ключевого слова РАЗРЕШЕННЫЕ должен выполниться успешно только в том случае, если в процессе его выполнения не происходит обращений запрещенным данным. Для этого выборке данных добавляется специальное сигнальное поле, которое принимает значение Истина для тех записей, в формировании которых участвовали только разрешенные данные, и значение Ложь для всех остальных записей. Если хотя бы в одной записи выборки имеется значение Ложь в сигнальном поле, то выполнение запроса завершается аварийно.
Такое же сигнальное поле добавляется и к результатам запросов, вложенных в сравнение В/НЕ В. Причем проверка значения сигнальной колонки в этом случае выполняется средствами СУБД. Таким образом, если в процессе выполнения вложенного запроса происходило обращение к запрещенным данным, то выполнение запроса должно завершиться с ошибкой У пользователя недостаточно прав на исполнение операции над базой данных.
Однако, при построении плана запроса СУБД может не получать полную выборку <Вложенным запросом>, а получать только те записи, которые фактически необходимы для проверки условия В/НЕ В. В этом случае выполнение запроса может оказаться успешным даже если при выполнении <Вложенного запроса>, как самостоятельного запроса, могли бы произойти обращения к запрещенным данным.
Полная статья здесь: http://1cexpo.ru/resheniya-problem/38-zavisimost-rezultata-ogranichenij-dostupa-k-dannym-ot-plana-zaprosa-subd.html |