Как сделать удаленную таблицу в MS Access «только для записи»? - PullRequest
1 голос
/ 06 апреля 2011

У меня есть небольшое приложение MS Access (я знаю, я знаю), которое обращается к таблице на удаленном MS SQL Server.

У меня также есть форма, которая позволяет пользователям вводить данные вТаблица.Проблема в том, что я хочу, чтобы пользователи не могли читать или изменять существующие данные, но я только хочу, чтобы они вводили данные и сохраняли их (данные немного чувствительны).

Я пытался предоставитьтолько привилегии INSERT для пользователя, подключающегося к базе данных, что приводит к ошибке, что таблица вообще недоступна.

После поиска в Google я не смог найти ничего, что решило бы эту проблему.

Итак, мой вопрос: как я могу гарантировать, что пользователи только вводят данные, но не изменяют и не читают существующие данные в MS Access (2003)?

Ответы [ 4 ]

3 голосов
/ 06 апреля 2011

Я бы удалил выбранные разрешения из таблицы (как вы уже сделали) и выполните все операции ввода-вывода через хранимую процедуру.Таким образом, вы можете точно контролировать то, что вставлено в систему

Дайте мне знать, если вам нужна помощь в запуске хранимой процедуры в ADO, и я опубликую что-нибудь до

2 голосов
/ 06 апреля 2011

Я предпочитаю хранимый процесс, но думал, что это альтернатива, чтобы дать доступ к представлению таблицы с опцией проверки

create table testview (somevalue varchar(25), entereddate datetime)
go
insert into testview values( 'First Value', getdate() )

go
create view testview_currentonly
as 
SELECT 
    somevalue
   , entereddate
FROM testview
WHERE entereddate >= getdate()

with check option
-- end view create
go
insert into testview_currentonly values( 'Second Value', getdate() )

select * from testview_currentonly

select * from testview

Вы не можете выбрать что-либо из этого представления, потому что все записи (при условии, что пользователь не может манипулировать значением, входящим в поле 'enterdate' (вероятно, должно иметь значение по умолчанию?).

1 голос
/ 06 апреля 2011

Для субъекта идентификации, который вы используете для доступа к таблице удаленного сервера SQL (это будет определено в ссылке), удалите все разрешения, кроме db_datareader.

Это можно сделать с помощью MS Access.разрешения (но имейте в виду: это довольно сложная область ...):

Безопасность базы данных Microsoft Access - Разрешения безопасности

Типы разрешений (MDB)

0 голосов
/ 09 апреля 2011

Наконец вот что я сделал:

Сначала я создал две таблицы:

CREATE TABLE mydata (...)
CREATE TABLE mydata2 (...)

Затем я создал INSTEAD OF триггер:

CREATE TRIGGER mytrigger ON mydata 
INSTEAD OF INSERT 
AS
   INSERT INTO mydata2 SELECT * FROM INSERTED
END

Это перенесло каждую запись из mydata в mydata2 при вставке. Форма в Access осталась на mydata, что делало записи невидимыми для пользователя.

Спасибо CodeSlave, который также предложил это решение

...