Access911.net   |   a9BBS   |   OTaA System  
  搜索文章:  
Access911欢迎您光临  
   主页      上传      繁體版       论坛     
设为首页  |  加入收藏   
  
你现在的位置:文章索引 -> 文章分类 -> 安全  
 首页|  近日更新|  下载  |  文章索引  |  搜索|  术语|  承接工程|  
 
系统正在加载内容,请耐心等待...
 
 查询
 窗体
 报表
 
 
 VBA
 函数
 ADO/DAO/ADO.NET
 API
 ADP
 安全
 发布
 OA
 ASP/ASP.NET
 其他语言
 控件
 DELPHI
 C#/.Net
 本站
 其他
 小例程
 常用软件
 参考文档
 业主作品
 网友大作
 
 
友情链接
 access911.net
 
访问人次
 1702299
 
站长 E-Mail
 net911@sina.com
 access911@gmail.com
 
RSS 订阅

显示附加信息 >>>

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

作者:cg1  摘自:access911.net  :cg1  更新日期:2004-2-7  浏览人次:

 

问题:

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

 

回答:

原理:

可以通过 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 


注意:有些用户要通过建立查询,设置该查询的运行权限为“所有者的”然后保存,注意查询的所有者要与绑定它的窗体的所有者相同。经过上面这步骤后设置窗体的记录源是查询名或者直接设置 SQL 语句都可以了。原因是 ACCESS 会自动生成极其无聊的不可见的 [~sq_f????] 表,对此我只能哭笑不得。

2、请再参考一遍微软的文章中以下章节
《使用 Security Wizard 设置 Access 数据库的安全性》
文章位置:http://access911.net/index.asp?board=4&recordid=71FAB51E#odc_acsecurity_wizard

3、将其中的第8步的“是,要授予用户组一些权限”点上

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 文件。它只在安全的多用户实现中才真正有用。


 


本站文章旨在为该问题提供解决思路及关键性代码,并不能完成应该由网友自己完成的所有工作,请网友在仔细看文章并理解思路的基础上举一反三、灵活运用。

access911.net 原创文章,作者本人对文章保留一切权利。
如需转载必须征得作者同意并注明本站链接

 

 
相关文章
     了解Access安全性
     新手来看:综合,两个窗体一个用于显示一个用于添加,如何协同更新?
     如何在窗体间传递(包括发送、接收、回传)参数
     新手来看:如何完成子窗体的记录跳转?
     在子窗体中预览报表
     新手来看:如何将窗体得筛选条件应用在对应得报表中?如何打印当前记录?如何打印指定记录?
     如何在连续窗体中反白显示获得焦点的记录
     如何将一个窗体重复打开2遍,并且每一遍打开的窗体显示不同的数据?
     如何在主窗体中显示子窗体中相关数据的汇总值
     如何隐藏或最小化access数据库窗口
     如何禁止Access主窗体右上角的退出按钮?(用代码使ACCESS主窗体上的"X"失效)
 
评论
     查看或发表更多的评论,请单击这里。
 
 
 
 
 
   
  Access911.net   |   a9BBS   |   OTaA System   |
建站日期:2000年4月2日  |  设计施工:陈格 ( access911 & cg1 )
 Copyright © 2000 - 2003 COMET, 陈格 保留所有权利