ACCESS2016如何将数据库拆分为前端数据库和后端数据库?

高级:需要专家编码、互操作性和多用户技能。

出于各种原因,可以决定将数据库拆分为前端应用程序或后端应用程序。 后端数据库包含表,并存储在文件服务器上。 链接到后端表的前端数据库包含所有表单、查询、报表、宏和模块。 前端数据库分发给用户的工作站。

本文介绍如何手动拆分数据库,而不是使用数据库拆分程序实用工具。

  1. 创建新的空白 Access 数据库。

  2. 在“文件”菜单上,指向“获取外部数据”,然后单击“导入”。

  3. 找到并选择要拆分的数据库。

  4. “表” 选项卡上,单击 “全部选择”,然后单击 “确定”。

    请注意,Access 将所有表导入到新数据库(即后端数据库)中。

  5. 将新的后端数据库存储在网络共享上,并确保所有用户都拥有共享的完整权限。

  6. 创建第二个新的空白 Access 数据库。

  7. 在“文件”菜单上,指向“获取外部数据”,然后单击“链接表”。

  8. 选择刚刚创建的后端数据库。

  9. “表” 选项卡上,单击 “全部选择 ”,然后单击 “确定”。

    请注意,Access 将后端数据库中的表链接到前端数据库。

  10. 在“文件”菜单上,指向“获取外部数据”,然后单击“导入”。

  11. 选择要拆分的原始数据库,然后单击“导入”。

  12. 在“窗体”选项卡上,单击“全部选择”。 在除“表”选项卡之外的所有选项卡上重复此步骤。由于已链接到表,因此现在只需导入其余对象。

  13. 选择除表以外的所有对象后,单击 “确定”。

    请注意,你现在已链接所有表并导入了剩余的对象。

  1. 创建新的空白 Access 数据库。

  2. 在“外部数据” 选项卡上,单击“导入”组中的 “访问”。

  3. “获取外部数据 ”对话框中,单击 “浏览 ”以找到并选择要拆分的数据库,单击此项可选择 当前数据库中的导入表、查询、表单、报表、宏和模块。 复选框,然后单击 “确定”。

  4. 在“导入对象”对话框中,单击 “表”选项卡上的“全部选择”,然后单击 “确定”。

    请注意,Access 将所有表导入到新数据库(即后端数据库)中。

  5. 将新的后端数据库存储在网络共享上,并确保所有用户都拥有共享的完整权限。

  6. 创建第二个新的空白 Access 数据库。

  7. “外部数据”中,单击“导入”组中的 Access

  8. “获取外部数据 ”对话框中,单击 “浏览 ”以选择创建的后端数据库,单击此项 可通过创建链接表来选择数据源的链接。 复选框,然后单击 “确定”。

  9. 在“导入对象”对话框中,单击 “表”选项卡上的“全部选择”,然后单击 “确定”。

    请注意,Access 将后端数据库中的表链接到前端数据库。

  10. “外部数据”中,单击“导入”组中的 Access

  11. “获取外部数据 ”对话框中,单击 “浏览 ”以选择要拆分的原始数据库,单击以选择 当前数据库中的导入表、查询、表单、报表、宏和模块。 复选框,然后单击 “确定”。

  12. 在“导入对象”对话框中,单击“窗体”选项卡上的“全部选择”,在除 “表” 选项卡之外的所有其他选项卡上重复此步骤,因为已链接到表。 现在只需导入其余对象,然后单击 “确定”。

    请注意,你现在已链接所有表并导入了剩余的对象。

此数据库是前端数据库。 可以将此前端数据库分发到工作站,以便每个用户都有自己的前端数据库副本。

现在,你已成功拆分数据库,这将提高性能。 现在,当用户打开窗体时,表单会在其计算机上本地打开,不会通过网络发送。 网络中唯一出现的数据是链接表中的数据。

你可能想要拆分数据库的原因

以下是拆分数据库的典型原因:

  • 你正在与网络上的多个用户共享数据库。
  • 你不希望用户能够对表进行设计更改。

拆分数据库的最常见原因是你与网络上的多个用户共享数据库。 如果只是将数据库存储在网络共享上,则当用户打开窗体、查询、宏、模块或报表时,必须通过网络将这些对象发送给使用该数据库的每个用户。 如果拆分数据库,则每个用户都有自己的窗体、查询、宏、模块和报表副本。 因此,必须跨网络发送的唯一数据是表中的数据。

注意 若要拆分数据库,还可以使用数据库拆分程序实用工具。

数据库访问控制是指程序未进行恰当的访问控制,执行了一个包含用户控制主键的SQL语句,由于服务器端对客户提出的数据操作请求过分信任,忽略了对该用户操作权限的判定,导致修改相关参数就可以拥有了其他账户的增、删、查、改功能。如果在一个应用中,用户能够访问他本身无权访问的功能或者资源,就说明该应用存在访问控制缺陷,也就存在越权漏洞。详见CWE ID566:

数据库访问控制是利用用户引入的参数生成由用户控制主键的 SQL 语句,令攻击者可以访问到同级别用户的资源或者访问更高级别用户的资源,会导致任意用户敏感信息泄露、用户信息被恶意修改或删除。数据库访问控制类似于数据库越权。例如某一页面服务器端响应中返回登录名、登录密码、手机号、身份证等敏感信息,如果存在数据库访问控制,通过对用户 ID 的遍历,就可以查看所有用户的敏感信息,这也是一种变相的脱库,而且很难被防火墙发现,因为这和正常的访问请求没有什么区别,也不会包含特殊字符,具有十足的隐秘性。

上述示例代码31-56行,程序获取用户输入的参数 id,并将传入参数转成 int 类型,然后创建数据库查询,查询 uid 为传入参数 id 的清单数据。显然,程序中未对传入参数做校验及过滤,用户可随意获得任何用户的清单数据。

从跟踪路径中可以分析出数据的污染源以及数据流向,在代码行第53行报出缺陷。

在上述修复代码中,在第34行从  session 中直接获取到 id 的值构造查询语句,获得当前用户的清单数据,避免用户操控SQL语句的主键值。

发生构成该漏洞的两个必要条件:

1、来自用户或前端参数参与了后台操作数据库语句(数据从一个不可信赖的数据源进入程序)

2、该参数做数据库表主键使用(这个数据用来指定 SQL 查询中主键的值。

  1. 可不使用来自用户或前端参数做相关SQL操作(例:读取session里值构建SQL(一般通过session取用户id构建用户清单,但如果产生漏洞的id不为用户id,例:orgid,roleId,店铺id取机构、店铺信息时,则也需要保证该主键来自可信赖的数据源:后端或数据库等地方))
  2. 该参数不做SQL相关操作的主键使用。(使用一个与主键不一致的副id做相关操作)

例:图1的查询SQL语句

在图2中查询的org_id并未做主键id,而是作为的副id使用

且在图3中核对该主副id不一致

3、参照fortify官方解决方式。

附加了一个限制,以验证清单是否属于当前经过身份验证的用户。

如上示例代码:加入一个用户名(不推荐使用用户id)的查询限制,匹配用户对该条查询是否有所有权。

方案1-->限制了构成漏洞的条件1;

方案2-->限制了构成漏洞的条件2;

方案3-->限制了操作越权的可能。

开发前端的大手们该怎么去设置数据库-ACCESS数据库学习

最近有人来问我,作为前端开发人员保存用户数据信息的最简便的方法是什么。因此我来说明一下如何实现它。

首先我们须要先有一个数据库。你可以通过 mlab 获取一个免费的。注册之后,在 MongoDB 的部属表中点击 新建。 我们要用的是这个免费的沙盒数据。

创建数据库之后,我们需要创建一个账户以便于我们进行自我验证。点击数据库名称,然后点击 用户 , 并添加数据库用户 。 写下你选择的之后要用到的用户名和密码 。

在数据库页面的顶部,你能够看到一个 MongoDB URI 。这是我们数据库的网址。这个数据库的 URI 相当于网页的 URL 。通常情况下,MongoDB 的 URI 如下:

我们会在后端使用 Node。你可能单击 这里 克隆我在 Glitch 上的项目,省去自己设置的麻烦。

确切地说,我说的“打开页面”是指产生一个使用 GET 方法发送给服务的请求。HTTP 方法只是你发送给服务的请求类型,我们只会使用这些:

  • POST 方法用于在服务器上创建资源。比如在 Facebook 上发布内容,写在发布内容中的信息使用通过 POST 请求发送给服 Facebook 务器。
  • PUT 方法用于更新服务器上的资源。比如,你在修改某篇发布内容的时候,就使用 PUT 请求将修改的内容发送给 Facebook 服务器。

数据库的连接是异步的操作,所以我们需要像这样在回调中包装所有服务器设置:

数据库是按集合组织的,集合中包含文档(基本上是 JSON 文件)。所以让我们连接到 User 集合(我们第一次访问的时候会创建)。

首先,我们先来操作一下 POST 路由。当我们第一次来添加用户数据时,将会用到该路由。然后我们要用 PUT 路由来更新数据。

collection.insertOne 方法给收集器添加了一个新的文档。在这个例子中,每一个用户都将会拥有他自己的文档。

被存储在收集器其中的文档便是运行结果。

第二个参数是一个回调,将操作结果简单的通知给用户。

我们在服务器上存放了一些数据,现在想从服务器上读取这些数据。我们用 GET 方法来获取。

此时,第一个参数是一个过滤器,用来告诉数据库将用户的属性信息文档只发给我们。

用户信息以数组的形式保存在文档中,因为从理论上讲不止一个文档中保存着用户的属性信息。我们必须避免这种情况的发生。

文档以数组的形式返回给用户,因为理论上可以有多个具有该用户属性的文档。我们必须确保这种情况不会发生。

最后而且很重要的是用 PUT 方法更新已存在的用户信息。

第一个参数是一个过滤器,与 GET 方法的第一个参数类似。

第二个参数是更新文档请求—你能获取更对信息从 这里 。在我们的例子中,我们告诉数据库将用户传递的数据与已存在的数据合并。

但是要小心,因为嵌套参数将会被替换而不是合并。

对于数据库和后台编程来说这只是刚刚开始,但是这足以让你开始个人项目。

之后我可能会写一些关于身份验证的文章,在此之前,请不要在里边存储一些比较敏感的数据。

你可以修改这个完整的项目 在这 ,你将需要有一个自己的数据库,如果你还不会创建,请回到 配置数据库 部分。

如果你觉得这篇文章还不错,请给它一些掌声让更多的人看到它。谢谢!

我要回帖

更多关于 数据库字段拆分 的文章

 

随机推荐