Ms access 如何在MS Access中创建远程表;只写“;?

Ms access 如何在MS Access中创建远程表;只写“;?,ms-access,permissions,Ms Access,Permissions,我有一个小的MS Access应用程序(我知道,我知道),它访问远程MS SQL Server上的表 我还有一个表单,允许用户在表中输入数据。问题是,我希望用户不能读取或修改现有数据,但我只希望他们输入数据并存储它(数据有点敏感) 我试图只向连接到数据库的用户授予INSERT权限,结果导致了一个错误,即该表根本无法访问 在谷歌搜索之后,我找不到任何可以解决这个问题的方法 因此,我的问题是:如何确保用户只输入数据,而不修改或读取MS Access(2003)中的现有数据?对于用于访问远程SQL s

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

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

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

在谷歌搜索之后,我找不到任何可以解决这个问题的方法


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

对于用于访问远程SQL server表的标识主体(这将在链接中定义),删除除
db\u datareader
之外的所有权限

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


对于用于访问远程SQL server表(将在链接中定义)的标识主体,请删除除
db\u datareader
之外的所有权限

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


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


如果您需要在ADO中运行存储过程的帮助,请告诉我,我将发布一些内容。我将从表中删除select权限(正如您已经做的那样),并通过存储过程执行所有IO。这样,您就可以准确地控制插入到系统中的内容


如果您需要在ADO中运行存储过程的帮助,请告诉我,我将发布一些信息

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

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

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

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

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

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

最后,我做了如下操作:

首先,我创建了两个表:

CREATE TABLE mydata (...)
CREATE TABLE mydata2 (...)
然后我创建了一个
而不是
触发器:

CREATE TRIGGER mytrigger ON mydata 
INSTEAD OF INSERT 
AS
   INSERT INTO mydata2 SELECT * FROM INSERTED
END
这将在插入时将每个条目从mydata移动到mydata2。Access中的表单仍保留在mydata上,这使得用户看不到条目


多亏了CodeSlave,他也提出了这个解决方案

最后,我做了以下几点:

首先,我创建了两个表:

CREATE TABLE mydata (...)
CREATE TABLE mydata2 (...)
然后我创建了一个
而不是
触发器:

CREATE TRIGGER mytrigger ON mydata 
INSTEAD OF INSERT 
AS
   INSERT INTO mydata2 SELECT * FROM INSERTED
END
这将在插入时将每个条目从mydata移动到mydata2。Access中的表单仍保留在mydata上,这使得用户看不到条目


多亏了CodeSlave,他也提出了这个解决方案

,这也是我要走的方向。如果这更简单,你可以将新记录转储到一个暂存表中,并在其上有一个触发器,在它被添加到暂存表后立即将其导入到安全表中,然后在触发器中从暂存表中删除它如果这样做更简单,您可以将新记录转储到暂存表中,并在其上设置触发器,以便在将其添加到暂存表后立即将其导入到安全表中,然后从触发器中的暂存表中删除它。