如何在SQLite中启用访问控制?

时间:2011-11-14 18:27:02

标签: c encryption sqlite access-control

我们有一个使用SQLite作为嵌入式RDBMS的应用程序。最初,该应用程序适用于单个计算机和单个用户。但随着时间的推移,项目范围已扩大。现在,我们需要的功能之一是 Fine grained access control.

现在正如Appropriate Uses For SQLite

所述
  

...... SQLite不得不牺牲其他人   有些人认为有用的特征,如高   并发性,细粒度访问控制,丰富的内置功能   功能...

并在此forum post

  

sqlite没有用户名和密码。你无法保护数据   以这种方式存档。

因此,从上面可以看出,访问控制不可用。在某种程度上它是有道理的,因为它主要用于移动应用程序,浏览器或需要嵌入式数据库的地方。

根据此SO post,可以加密数据库。但据我所知,我无法将其描述为fine grained access control,因为SQLite数据库被限制为单个加密密钥。此外,我不能拥有多个用户并具有不同的访问级别。

Now my question are:

  1. 是否可以在SQLite中启用访问控制? (我可能已经回答了我的问题,但仍然,为了我内心的满足,我问这一个:))
  2. 我对fine grained access control与加密相关的理解是否正确?
  3. 让我们说如果我对单个机器和单个用户使用加密,那么它比真正的fine grained access control有什么缺点? (性能可能是其中之一,因为我们必须为每个连接解密它..不确定)
  4. Some Useful Information

    1. 我们正在使用最新版本的SQLite。
    2. SQLite是作为源代码的一部分嵌入的。
    3. 我们可以期待一个大小为1 GB或大约1 GB的数据库。
    4. 注意:我知道使用任何其他可用访问控制的RDBMS都很好,但问题非常特定于 SQLite 。请从那个角度回答他们。感谢。

4 个答案:

答案 0 :(得分:6)

SQLite中没有访问控制(意味着GRANT / REVOKE表级访问控制)。您必须通过应用程序代码提供所需的任何访问控制。加密仅在最粗糙的级别提供访问控制 - 您可以访问数据库,也可以不访问数据库。

答案 1 :(得分:2)

首先,您将如何共享SQLite数据库? SQLite没有像mysql / postgresql这样的服务器 - 客户端架构。

如果您希望多台计算机同时使用同一个数据库,您可能希望转移到MySQL或PostgreSQL,否则它将与共享Microsoft Access数据库相同。

如果你进行大量的插入/更新/删除,SQLite往往会随着时间的推移而变得非常大。该文件将永远增长,但永远不会缩小。

答案 2 :(得分:0)

我不知道这个想法有多好用,如果有的话,所以其他人的评论非常受欢迎。

你可以做类似以下的事情......

在每个终端上都有一个本地嵌入的SQLite数据库。

当应用程序关闭时,或者每次更新内部数据时(我猜选择你的选择),在主数据库中创建一个触发器'位于网络上的#39;某处。在这里插入更新所具有的值,并且每个字段都有第二列来存储用户名(例如,从本地终端登录名中获取)。

我不确定这是否有效?然后,您可以在每个本地'内实施一个表格。 sqlite文件,它是一个用户名和密码列表,用于控制对后端主文件的访问(并且可以访问sqlite文件本身,使用您的应用程序来请求用户名和他们的特定密码)。然后你甚至可以只启用一个'视图。访问者(通过您的应用程序)只能对数据执行查找。显然,该表只需要从与主DB的连接中写入。

然后,您当然需要构建一个方法来使用服务器上的副本更新每个本地副本,并控制任何损坏/完整性问题...这可能会开始产生其他问题并导致应用程序前端变得相当复杂(至于我的理解,SQLite不能在内部进行这种测试,因为sqlite不是客户端/服务器类型的RDBMS)。

当然,一旦你完成了所有这些艰苦的工作,你就可以分享它的SQLite团队,然后sqlite对于很多实例来说更加实用。

大卫

答案 3 :(得分:0)

在查找这个确切的主题时,我想到了这个想法(我使用python与数据库连接):

  1. 创建一个' admin'表
  2. 存储用户名和密码列表(当然是哈希)
  3. 在python中创建用户名/密码提示,如果哈希和密码不匹配则退出
  4. 创建具有权限级别的列
  5. 创建一个包含这些权限级别(规范化)的表以及该级别可以执行的关联查询类型。可选 - 在该表中创建另一列以命名权限级别
  6. 通过与该用户的权限级别的检查匹配的函数传递每个查询,并查看该查询是否包含任何已批准的命令。如果没有,则给定访问限制提示。
  7. 显然不是一成不变的,我认为有很多方法可以解决问题'所以我也要集思广益。需要考虑的事情。