Страницы: 1
RSS
Организация разделения доступа к сводной таблице, получающей данные из Access
 
Доброе утро!

Заморочился созданием книги excel с некоторым количеством сводных таблиц, получающих данные из файла access. Всё наладил, всё работает, но необходимо разграничить уровень доступа к данным для разных пользователей (филиалов). То есть у каждого пользователя будет своя книга excel, которая обращается к базе access и получает только те данные, которые можно видеть пользователю. Основной вопрос: "КАК <много нецензурных слов>"!? Это точно уже делалось 100500 раз до меня, но что-то я толковых мануалов не нашёл.

Сейчас вижу следующую схему:
1. В файле access создать  запрос для каждого пользователя по типу SELECT * from MainQuerry WHERE филиал = "ФилиалХ".
2. Запоролить БД.
3. Создать вторую БД с подключением к первой, с запросами к запросам по каждому пользователю (не нравится мне что для того, чтобы нормально выполнялся запрос, у пользователя должен быть доступ ко всем используемым в нём таблицах, поэтому этот огород со второй БД).
4. Разграничить доступ к запросам для разных пользователей (в access 2003 это можно).
5. В excel сделать формочку выбора филиала. После выбора филиала PivotCashe (вроде бы там, но может и в настройке соединения) изменять имя пользователя и название выполняемого запроса.

Вроде бы, всё должно работать. Вчера по кускам проверял, сейчас буду пробовать реализовать.
Это вообще вменяемый план или горячечный бред?!
Может есть у кого в закладках правильная схема создания такого проекта, ну или просто концептуальные советы по более грамотной реализации?

P.S. Поднять небольшой сервак с нормальной СУБД, вероятно, не получится. Разрезать данные и сразу отдать их пользователям вместе с excel, к сожалению низя:((  Обновлять данные пользователи будут изредка. Хотелось бы обеспечить хоть какой-то уровень защиты данных в СУБД от любознательных пользователей.
P.P.S. Пример не выкладываю, ибо нечего.
P.P.P.S. Зараза excel отказывается строить сводные таблицы, которые обращаются к запросам access, имеющим в своей структуре функцию CurrentUser(), так что пока не вижу иного пути кроме как делать отдельный запрос для каждого пользователя (благо их мало). Формировать запрос в excel не хочу, чтобы не было лишний раз видно структуры Базы.
Изменено: Wiss - 11.04.2018 16:17:37 (Поднимется ли вверх?)
Я не волшебник, я только учусь.
 
АП. Совсем уже почти на второй лист ушёл. Неужели никто таким бредом не занимался? Или того хуже - я собираюсь верным путём идти.
Изменено: Wiss - 11.04.2018 16:20:24
Я не волшебник, я только учусь.
 
Я бы сделал проще.
1) Авторизация пользователя внутри книги Excel
2) По логину пользователя подгружаются уникальные sql Access скрипты (либо имена ранее созданных скриптов)
3) Пользователь спокойно исполняет их через ADODB, кнопочками или обновлением сводных
4) Логируешь все действия всех пользователей в мастер-файл или таблицу в ACCESS.
В любом случае, у каждого свой подход. Дерзай и всё должно получиться. Всегда есть возможность оптимизировать программу.
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
 
ProFessor, спасибо. Про "Логируешь все действия..."  я как-то не подумал. Тоже отдельная морока будет.
Я не волшебник, я только учусь.
 
Цитата
Wiss написал:
ProFessor , спасибо. Про "Логируешь все действия..."  я как-то не подумал. Тоже отдельная морока будет.
Не за что, в идеале, там мороки не должно быть:
Environ("username") это системный логин юзера, на него и ориентируйся, даже пароля вводить не нужно, авторизация автоматическая через скрипт:
If  Environ("username") then "выдача полномочий" end if
Простой смертный и не поймёт как ты опознал его и изменить его не сможет.
Логирование таким образом осуществляется:
1) Environ("username")
2) Функция Now (начало выполнения),
3) Само действие (после каждого скрипта можно добавить строчку с инфой для лога)
4) Функция Now (конец выполнения) прописываешь в конце sub-а
P.S. Все сложные действия выполняй внутри VBA Excel или  VBA ACCESS, это упростит твою систему.
Вся проблема сложных программ, целых томов кодов и состоит в несоблюдении принципа лезвия Оккама: «Не следует множить сущее без необходимости». Вся гениальность в простоте.
 
ProFessor, ещё раз спасибо.
Я не волшебник, я только учусь.
Страницы: 1
Наверх