Access爱好者--
所属分类: 系统优化 作者: cg1 更新日期:2004-8-27 21:58:17 阅读次数:452

如何能通过窗体访问表,但不能直接读取表?


问题:

如何能通过窗体访问表,但不能直接读取表?
我需要让用户不能直接打开我的表,但是可以通过我编写的窗体来打开这些表,这样我就可以编程控制一些字段的数据了。


回答:

本文的示例文件,可以从“窗体1”访问“表1”,但不能直接打开“表1”,也不能导出它。
http://www.accfans.net/bbs/images/upload/2004/08/27/100259.rar

原理:

可以通过 ACCESS 自身的安全向导结合 JET SQL 中 SELECT 查询的 WITH OWNERACCESS OPTION 声明来完成。
WITH OWNERACCESS OPTION 在具有安全工作组的多用户环境中,使用该声明和查询给运行该查询的用户与查询所有者相同的权限。
A、你只要将某个表的所有者设定为某个自定义用户,而该用户属于管理员组,对表有读取、修改权限。
B、设定在默认情况下用户组都拥有打开窗体的权限,但没有读取表的权限
C、用WITH OWNERACCESS OPTION来建立窗体的数据源,赋予普通用户拥有表的所有者才拥有的修改读取权限。这样使用者就只能通过你的窗体来访问数据表了。
D、发布的时候无需发布你的 MDW 文件,因为客户那里默认会以用户组的权限打开你的数据库,这样就达到你的目的了。


实际操作:

1、建立一个数据库,里面有1个表(表1),一个窗体(窗体1),设置“窗体1”的数据源为
SELECT * FROM 表1 WITH OWNERACCESS OPTION

2、请再参考一遍微软的文章中以下章节
《了解 Microsoft Access 安全性》
文章位置:http://www.accfans.net/showart.asp?art_id=138&cat;_id=10

3、将其中图 4:“设置安全机制向导”对话框的第五个屏幕“是,要授予用户组一些权限”点上

4、赋予用户组“打开/运行”数据库的权限;赋予用户组“打开/运行”窗体1的权限,然后单击“下一步”,其他的照上面那篇文章做

5、用快捷方式附带工作组启动 MDB 文件,然后设置你的新管理员(以示例来说就是 frice )对 表1 的“管理”权限

6、完成后不要用快捷方式附带工作组启动,直接启动 MDB 文件看看效果如何?


7、再回头看一下 WITH OWNEERACCESS OPTION 的帮助吧
WITH OWNERACCESS OPTION 声明
在具有安全工作组的多用户环境中,使用该声明和查询给运行该查询的用户与查询所有者相同的权限。

语法
sqlstatement
WITH OWNERACCESS OPTION;

说明
WITH OWNERACCESS OPTION 声明是可选的。

下列示例使用户能够查看工资信息(即使用户没有权限查看工资表),提供查询主人拥有的权限:

SELECT LastName,

FirstName, Salary

FROM Employees

ORDER BY LastName

WITH OWNERACCESS OPTION;


如果用户无法创建表或添加,可使用 WITH OWNERACCESS OPTION来运行 制表或追加查询。

如果要强制工作组安全性设置及用户的权限,不要包含 WITH OWNERACCESS OPTION 声明。

此选项要求您必须访问与该数据库相关的 System.mdw 文件。它只在安全的多用户实现中才真正有用。



--------------------------------------------------------------------------------
相关文章

没有相关文章


系统优化
控件使用
数据库设计
数据库连接
系统安全
OLE自动化
常见问题
实用代码
属性详解
网络相关
实用API
经验分享
精选教程
字符处理
ADP相关



文章搜索



制作维护:李寻欢     Mail:[email protected]

关于本站 -- 网站服务 -- 版权条款 -- 联系方法 -- 网站帮助
Access爱好者版权所有 Copyright 2003-2005 All Rights Reserved 未经许可不得盗链