如何在 MS Access 中创建“只写”远程表?

Posted

技术标签:

【中文标题】如何在 MS Access 中创建“只写”远程表?【英文标题】:How can I make a remote table in MS Access "write only"? 【发布时间】:2011-04-06 08:17:26 【问题描述】:

我有一个小的 MS Access 应用程序(我知道,我知道),它访问远程 MS SQL Server 上的表。

我还有一个表单,它允许用户在表格中输入数据。问题是,我希望用户不能读取或修改现有数据,但我只希望他们输入数据并存储(数据有点敏感)。

我试图只向连接到数据库的用户授予 INSERT 权限,导致错误,即根本无法访问该表。

谷歌搜索后,我找不到任何可以解决此问题的方法。

所以我的问题是:如何确保用户只输入数据,而不修改或读取 MS Access (2003) 中的现有数据?

【问题讨论】:

【参考方案1】:

我将从表中删除选择权限(正如您已经完成的那样)并通过存储过程执行所有 IO。这样您就可以准确控制插入系统的内容

如果您需要帮助在 ADO 中运行存储过程,请告诉我,我会发布一些内容

【讨论】:

这也是我要走的方向。如果它更容易,您可以将新记录转储到临时表中,并在其上添加触发器以在将其添加到临时表后立即将其导入安全表 - 然后将其从触发器中的临时表中删除.【参考方案2】:

我更喜欢存储过程,但认为这是通过检查选项访问表视图的替代方法

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

您不能从此视图中选择任何内容,因为所有条目(假设用户无法操纵进入“输入日期”字段的值(可能应该有一个默认值?)。

【讨论】:

【参考方案3】:

对于用于访问远程 SQL Server 表的身份主体(将在链接中定义),删除除db_datareader 之外的所有权限。

您可以使用 MS Access 权限执行此操作(但请注意:这是一个相当困难的领域...):

Microsoft Access Database Security - Security Permissions

Types of permissions (MDB)

【讨论】:

【参考方案4】:

最后是我所做的:

首先,我创建了两个表:

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,他也提出了这个解决方案

【讨论】:

以上是关于如何在 MS Access 中创建“只写”远程表?的主要内容,如果未能解决你的问题,请参考以下文章

在 MS Access DB 中创建临时表

如何在 MS Access 中创建 Pivot 以避免一种类型的记录出现空值?

在 MS access passthru 中创建 sql server 临时表

如何在 Ms Access 中创建完全相同的东西?

如何在 MS Access 2007 中创建报告?

如何在 MS Access 中创建一个查询,允许您汇总每个客户的总成本?