LEADERSOFT.ru Разработка на заказ программ и сайтов
Форумы по информационным технологиям
 
Регистрация  |  Вход
left
Форумы Минимизировать
ПоискСписок форумов
  Программирование  Microsoft Access. Файлы mdb и accdb  Разделенный дос...
 Разделенный доступ к одной таблице
 
 22.10.2007 15:04:52
Aleksej-P
3 сообщения


Разделенный доступ к одной таблице

В одной таблице ведутся несколько журналов учета операций, потому что изначально не было разговора о разделенном доступе. А теперь встал такой вопрос. То есть пользователь заходит по логину/паролю и должен видеть/править только ему подобающий журнал операций. Если бы таблицы были разные - тогда через mdw на каждую доступ для конктретного пользователя поставил и все ОК. А как бы сделать, чтобы не пилить таблицу?
Пока мысля шевелится такая:
В таблице "Операции" уже есть поле "User" - в него автоматом заносится логин пользователя, который работает с таблицей. Когда пользователь открывает форму "Операции" в ней источник отфильтрован по его логину - стало быть он видит только свои дела. Он работает - его логин автоматом заносится в поле таблицы, стало быть новые записи, что он сделал, тоже только он потом увидит.
Вроде все нормально, за исключением одного: если хитрый пользователь влезет в "Сервер" и поставит руками свой логин в поле таблицы "Операции", то ....

 

Умные люди посоветовали так:

 

·  с таблицы убрать все права для пользователей, кроме владельца

·  создать запрос на базе таблицы, с Where tbl.User = CurrentUser() и прописать открытие запроса с правами владельца

·  вместо таблицы везде пользовать данный запрос

 

По сути это означает, что нужно сделать запрос и сохранить его под именем таблицы. То есть так:

 

SELECT ОПЕРАЦИИ.*

FROM ОПЕРАЦИИ IN IN '\\server\database\my.mdb'

WHERE ОПЕРАЦИИ.Изменил)=CurrentUser()

WITH OWNERACCESS OPTION;

 

Все работает, но осталась проблема – нужно подставлять в запрос путь к my.mdb. Сделал функцию в общем модуле, которая читает путь из таблицы, где он хранится

 

Public Function fCurrentPath() As String

    fCurrentPath = DLookup("SystemPath", "tGlobalParam", "")

End Function

 

И переделал запрос

 

SELECT ОПЕРАЦИИ.*

FROM ОПЕРАЦИИ IN ''' & fCurrentPath() & '''

WHERE ОПЕРАЦИИ.Изменил)=CurrentUser()

WITH OWNERACCESS OPTION;

 

Но в результате пишет, что не может найти Document and Settings и прочая и прочая. Лезет стало быть в Администратора, мои документы... И чего оно там забыло? Если колдовать с кавычками - все одно из двух: либо ошибка синтаксиса в FROM, либо опять администратор к столу зовет.

 

И в чем же тут ошибка?

 22.10.2007 18:32:53
host
87 сообщения


Re: Разделенный доступ к одной таблице

Проще зашифровать имя пользователя простым алгоритмом, код спрятать в самой программе или прицепить к базе библиотеку.

 23.10.2007 9:42:04
Aleksej-P
3 сообщения


Re: Разделенный доступ к одной таблице

Речь ведь не о простом разделении записей в таблице, а о запрете польозователю просматривать таблицу напрямую, минуя формы. Для этого таблица не доступна никому, кроме админа. А пользователи просматривают ее через специальный запрос, который приведен выше. Осталось только воткнуть в него путь к базе. Но продлема в том, что запрос такого рода нельзя прописывать как SQL - выражение в VBA. Работать не будет. Надо редактировать сам запрос.

вот о чем речь, там и макет базы прилагается http://www.sql.ru/forum/actualthread.aspx?tid=483538&pg=1

 

 24.10.2007 10:53:56
Admin1
731 сообщения
1-ый


Re: Разделенный доступ к одной таблице

1. Ну и пусть он видит таблицу. Главное это то, что нужная информация (сумма, кому) зашифрована. Вообще в простых базах запланировано, что таблицы долны просматриваться. Например, если я вижу в таблице пароль - это не значит, что я могу зайти в базу данных под этим паролем (он же зашифрован). Более сложные базы данных типа SQL Server имеет разный доступ к записям, т.е. вы можете или назначить каждой записе пользователя или повесить триггер на SELECT. В этом случае, записи нельзя просматривать. В принципе есть и другие решения. Сделать ADO соединение с файлом mdb, и в форме заменить recordset на другой.

2. В данном случае, надо попытаться создать на этапе открытия формы новый источник записи ввиде текстовой переменной (без функций). Ее подставить в форму, тогда все будет работать.

  Программирование  Microsoft Access. Файлы mdb и accdb  Разделенный дос...
ПоискПоиск  Список форумовСписок форумов  
right