Ms access 如何在MS Access中创建远程表;只写“;?
我有一个小的MS Access应用程序(我知道,我知道),它访问远程MS SQL Server上的表 我还有一个表单,允许用户在表中输入数据。问题是,我希望用户不能读取或修改现有数据,但我只希望他们输入数据并存储它(数据有点敏感) 我试图只向连接到数据库的用户授予INSERT权限,结果导致了一个错误,即该表根本无法访问 在谷歌搜索之后,我找不到任何可以解决这个问题的方法Ms access 如何在MS Access中创建远程表;只写“;?,ms-access,permissions,Ms Access,Permissions,我有一个小的MS Access应用程序(我知道,我知道),它访问远程MS SQL Server上的表 我还有一个表单,允许用户在表中输入数据。问题是,我希望用户不能读取或修改现有数据,但我只希望他们输入数据并存储它(数据有点敏感) 我试图只向连接到数据库的用户授予INSERT权限,结果导致了一个错误,即该表根本无法访问 在谷歌搜索之后,我找不到任何可以解决这个问题的方法 因此,我的问题是:如何确保用户只输入数据,而不修改或读取MS Access(2003)中的现有数据?对于用于访问远程SQL s
因此,我的问题是:如何确保用户只输入数据,而不修改或读取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,他也提出了这个解决方案,这也是我要走的方向。如果这更简单,你可以将新记录转储到一个暂存表中,并在其上有一个触发器,在它被添加到暂存表后立即将其导入到安全表中,然后在触发器中从暂存表中删除它如果这样做更简单,您可以将新记录转储到暂存表中,并在其上设置触发器,以便在将其添加到暂存表后立即将其导入到安全表中,然后从触发器中的暂存表中删除它。