如何在 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 中创建 Pivot 以避免一种类型的记录出现空值?