|
177 / 62 / 3
Регистрация: 17.11.2011
Сообщений: 318
|
|
Работа с таблицами разделённой базы через экземпляры классов. Как?18.11.2011, 13:31. Показов 3927. Ответов 17
Метки нет (Все метки)
Уважаемые форумчане, помогите разобраться в вопросе.
Стоит задача ограничить доступ к данным из базы. Что сделано: 1) База разделена на файл таблиц и файл юзверя (формы, отчёты) 2) Файл с таблицами лежит в отдельной папке, защищённой средствами NTFS. Теперь без ста грамм и прав админа её не унесёшь. ![]() 3) Чтоб каждый имел доступ только к тем данным с которыми положено ему работать, в файле юзверя прилинкованы не все таблицы, а только те, что ему разрешены (пару общих таблиц и пару "персональных"). А чтоб сами не подключили остальные таблицы, файл с таблицами запаролен. 4) В файле юзверя нет запросов (как отдельных объектов) -- все запросы в свойствах форм/отчётов, их контролов и в коде VBA. 5) Файл юзверя окомпилирован -- сохранен в формате ".accde". Теперь не посмотришь код. 6) Срыть область переходов и сделать защиту от загрузки с "Shift". Хоть в этом смысла не вижу, всё же сделал (больше для галочки -- от чайников). Обходится на "раз, два, три". Достаточно положить файл в "ненадёжное место" (главное чтоб Access считал его таковым ) и всё -- защиты нет -- Access блокирует код VBA и защита не работает. ![]() Из того, что предлагается на форуме осталось всего ничего -- сделать шифрование данных. Покурив форум с большего разобрался. Так что можно считать этот вопрос решённым . Спасибо HOUSE MD с его примерами. Однако, осталось ещё одно узкое место в защите -- таблицы (особенно с учётом п.6). Тут меня посетила мысль: самая лучшая защита -- отсутствие объекта, который нужно защищать Нет связанных таблиц -- нет проблем. Значит, нужно что-то сделать, чтоб не болтались линки на таблицы в области переходов. Например, работать с таблицами через экземпляры классов и конектиться к файлу таблиц непосредственно при открытии форм. Поскольку не силён в работе с классами, требуется чья-нибудь квалифицированная помощь.
0
|
|
| 18.11.2011, 13:31 | |
|
Ответы с готовыми решениями:
17
Работа с указателями на экземпляры классов Map, List, работа со ссылками на экземпляры классов |
|
547 / 377 / 16
Регистрация: 17.12.2009
Сообщений: 991
|
||||||
| 18.11.2011, 14:03 | ||||||
|
Работайте через АDO. Просто в модуле напишите общую процедуру линковки :
В зависимости от назначения можете постоянно обращаться к данной функции, без всякой привязки таблиц в области переходов. То есть таблицы вообще будут отсутствовать в оболочке.
0
|
||||||
|
177 / 62 / 3
Регистрация: 17.11.2011
Сообщений: 318
|
||
| 18.11.2011, 15:57 [ТС] | ||
![]() Но всё равно, спасибо. Вечером ещё поковыряюсь с вашим кодом, может что полезное выйдет.
0
|
||
|
453 / 215 / 5
Регистрация: 16.05.2010
Сообщений: 420
|
|
| 18.11.2011, 16:13 | |
|
Поковыряйте этот пример (конструкция не моя). В нем можно подключать выбраные таблицы. При завершении работы прилинкованые таблицы отключаются.
PS. Прочитали без пароля зашифрованные даные с моего примера
0
|
|
|
177 / 62 / 3
Регистрация: 17.11.2011
Сообщений: 318
|
|||
| 21.11.2011, 12:07 [ТС] | |||
![]() Не вдаваясь в подробности скажу, что если таблица прилинкована, то очень легко получить от туда данные. Поковырявшись с ADO. Построил приблизительную модель работы с удалённой базой (см. прикреплённый архив). Любителям покритиковать говорю сразу: это только модель, чтоп разобраться с технологией. Что реализовано: 1) Получение данны и загрузка их в форму. 2) Добавление/изменение данных в базе. 3) Управление данными. В принципе, через объект ADODB.Command можно выполнять любые SQL инструкции, применительно к удалённой базе. К сожалению не получилось добиться такой же динамичности работы как с прилинкованными/локальными таблицами. Нельзя просто изменять данный в ленточной форме или перейти на последнюю строку и начать писать, чтоб добавить данные в базу. Приходится это делать через отдельное окошко. С другой стороны, так лучше "защита от дурака". ![]() Вот только столкнулся с проблемой обновления данных на форме. Если это отдельная форма, то всё работает. Если форма подчинённая, то вылетает ошибка. Основная функция, ответственная за загрузку данных на форму: "LoadDataOnForm" -- в модуле. Основная проблема -- правильно передать ссылку на форму. Сейчас реализовано через строковую переменную -- передавает модальной форме имя формы, вызвавшей окно изменения данны. Передаётся как "OpenArgs" при выполнении инструкции "DoCmd.OpenForm". Можно было бы сделать это через объектную переменную, но "OpenArgs" может работать только с числами и строками, а глобальных переменных не хотелось бы использовать. ![]() Может кто подскажет как решить проблему.
0
|
|||
|
177 / 62 / 3
Регистрация: 17.11.2011
Сообщений: 318
|
|
| 11.12.2011, 16:12 [ТС] | |
|
Может кому-то пригодится.
Здесь написано как правильно реализовывать то, что я пытался реализовать http://msdn.microsoft.com/en-u... L.90).aspx
1
|
|
|
547 / 377 / 16
Регистрация: 17.12.2009
Сообщений: 991
|
|||||||||||
| 12.12.2011, 00:05 | |||||||||||
|
Спасибо за ссылку! Посмотрел. Тут какая идея в голову пришла, на форуме как то проходил в примерах запрос к экселевскому файлу, где без всякой линковки можно было выбрать данные и показать в аксессе, вот примерный вид:
При данном запросе происходит выборка, прилинкованных таблиц явных и скрытых не видал. Возникла мысль, что наверняка есть подобные запросы и к таблицам родного собственно приложения аксесс. То есть выполняется чисто утилитарная выборка без подвязывания. Предполагаю, что это делается через тип запроса "к серверу" проверить пока не могу, так как пишу с мобильного устройства. Вероятно что и в обычном запросе на выборку можно забабахать нечто подобное, вписав в запрос SQL путь к таблицам. А в последствии этот запрос сделать источником данных формы, отчета , использовать в коде И так далее и.т.п. P.S. Немного про accde Недостатком файла типа accde является невозможность настраивать и сохранять пользовательские настройки по размеру шрифта, столбцов, цвету. При закрытии файла и последующем его открытии все параметры вывода на экран, такие же как до компиляции. Это неудобно и меня это огорчает. В форме около 80 полей, каждому пользователю нужны свои данные. Он сгребает нужные ему поля в кучку, а после пере загрузки хоп, и все поля на прежнем месте. Копий сломал об эту проблему много. Но ответа не нашел( Добавлено через 9 минут Сейчас до дома доберусь, посмотрю, может и без VBA , просто тупо в SQL такой запросец создать можно. Заинтриговался. Добавлено через 2 часа 58 минут Добрался, поэкспериментировал с запросами. Вот оказывается как просто обратиться запросом к таблицам , без линковки:
В VBA также отлично все работает. Сейчас посмотрю на наличие скрытой линковки. Визуально ничего не висит. Добавлено через 22 минуты не, ничего не видно. Юзер не поймет откуда данные беруццо.
2
|
|||||||||||
|
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,375
|
|
| 13.12.2011, 02:50 | |
|
Это прокатывает даже с прилинкованными к той mdb таблицами, а юзеру зачем таблицы видеть?
p.s. это анекдот с бородой, не ожидал, что это может быть открытием. p.p.s. используется правда крайне редко.
1
|
|
|
547 / 377 / 16
Регистрация: 17.12.2009
Сообщений: 991
|
|
| 13.12.2011, 10:45 | |
|
Так юзеру вроде и не надо, автор ветки данной хочет сделать его совсем бесправным существом
запаролить, зашифровать, линковки спрятать / убрать совсем))) лишить возможности использовать шифт итд и.т.п.)))
0
|
|
|
177 / 62 / 3
Регистрация: 17.11.2011
Сообщений: 318
|
|||
| 16.12.2011, 08:29 [ТС] | |||
![]() Нечего сотруднику, отвечающему за изготовление заказа, лазить по базе, где прописано откуда и по каким ценам приходят расходники и куда уходит готовый продукт. А то глядишь так через него скоро левачёк потечет не малым ручейком, а большой реченькой. Как тогда предложите затыкать этот фонтан. По моему "профилактика" в этих вопросах имеет большое значение. ![]() Добавлено через 14 секунд Это всё не злобы ради, а профилактики для. ![]() Добавлено через 6 часов 38 минут Выдай каждому, так сказать, "по заслугам" -- только то, что ему необходимо для работы.
0
|
|||
|
547 / 377 / 16
Регистрация: 17.12.2009
Сообщений: 991
|
|
| 17.12.2011, 19:06 | |
|
Вопрос то стоял про то, чтобы в бд ничего не висело, не было таблиц линкованных.
0
|
|
|
177 / 62 / 3
Регистрация: 17.11.2011
Сообщений: 318
|
|||||||||
| 15.01.2012, 07:58 [ТС] | |||||||||
|
Вот появилось больше времени и решил отписаться.
Спасибо всем, кто помогал. Хочу кое-что уточнить, может кому тоже пригодится. В теме вылезла ветка: Зато можно сделать такой финт ушами. 1) Делаем, как обычно проект с разделением базы на два файла "таблицы" и "формы". 2) В отличие от стандартных рекомендаций поместить запросы вместе с файлами, помещаем все запросы вместе с таблицами. 3) В качестве источника данных формам, выпадающим спискам и везде где надо пишем почти так, как предложил Сергей. Только в предложении FROM пишем имя вашего сохранённого запроса (к запросам в другой базе можно обратиться так же как и к таблицам). Получаем буквально следующее:
5) Файл таблиц прячем и/или защищаем средствами NTFS (о последнем мелкасофты постоянно говорят в справке) в указанном месте. Что у нас получилось? Во-первых, источника данных действительно не видно и каждый человек будет работать нолько с тем набором данных, который ему выделен. Во-вторых, если вы решите изменить условия выборки -- расширить или уменьшить объём данных, доступных пользователю. Или захотите внести какие-то изменения в исходные таблицы. Вам не придётся переделывать "пользовательские" файлы и заново раздавать их. Достаточно будет подправить запрос, сохранённый вместе с таблицами.
2
|
|||||||||
|
547 / 377 / 16
Регистрация: 17.12.2009
Сообщений: 991
|
|
| 15.01.2012, 16:45 | |
|
Ну да, все верно и хорошо)
0
|
|
|
177 / 62 / 3
Регистрация: 17.11.2011
Сообщений: 318
|
|
| 17.01.2012, 00:39 [ТС] | |
|
:cofee:
Уважаемые форумчане, наконец-то я нашёл то, что искал. Чуть выше я описал часть процесса. Теперь продолжим. Когда источник данных привели к виду, указанному в пункте 3, открываем окно Query window
(Query window: A window in which you work with queries in Design view, Datasheet view, SQL view, or Print Preview.) О том как открыть это окно смотрите прикреплённую картинку "1.png"
0
|
|
|
547 / 377 / 16
Регистрация: 17.12.2009
Сообщений: 991
|
|
| 17.01.2012, 14:36 | |
|
Тоже ковырял подобные вещи, но в 2007м аксессе. До указанных свойств на картинках добирался в "Запрос к серверу". Самое вкусное в данной ситуации что все эти вещи которые написаны в свойствах запроса можно задать как переменные. В VBA access есть объект, так и называется QUERY. Его можно объявить даже как Dim as QUERY. После присвоения объекту необходимых методов в DAO и ADO можно вылезти программно на указанные на рисунках свойствах. Особую ценность вызывает способность заходить под паролем и использовать ограничения, которые прописаны именно на сервере а не в самой оболочке аксесс! Гуд!
1
|
|
|
177 / 62 / 3
Регистрация: 17.11.2011
Сообщений: 318
|
|
| 17.01.2012, 21:37 [ТС] | |
|
--> Сергей1980
Спасибо за то, как добраться до указанных свойств из VBA. Этого как раз не хватало.
0
|
|
|
177 / 62 / 3
Регистрация: 17.11.2011
Сообщений: 318
|
||||||
| 22.01.2012, 15:35 [ТС] | ||||||
|
Может кому пригодится код, чтоб быстро изменить адрес расположения базы, указанный в предложении IN
Кнопка
1
|
||||||
| 22.01.2012, 15:35 | |
|
Помогаю со студенческими работами здесь
18
Как использовать экземпляры классов МFC?
Как сохранить экземпляры классов в один массив ? Как сериализовать/десериализовать экземпляры классов в файл
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|