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

C 如何在SQLite中启用访问控制?,c,encryption,sqlite,access-control,C,Encryption,Sqlite,Access Control,我们有一个使用SQLite作为嵌入式RDBMS的应用程序。最初,该应用程序是为一台机器和一个用户设计的。但随着时间的推移,该项目的范围已经扩大。现在,我们需要的功能之一是细粒度访问控制。 现在正如上面提到的 。。。SQLite不得不牺牲其他资源 一些人认为有用的特性,例如高 并发,细粒度访问控制,一组丰富的内置 功能 在这个 sqlite没有用户名和密码。你无法保护数据 以那种方式归档 因此,从上面可以清楚地看出,访问控制是不可用的。在某种程度上,它是有意义的,因为它主要用于移动应用程序、浏览器

我们有一个使用SQLite作为嵌入式RDBMS的应用程序。最初,该应用程序是为一台机器和一个用户设计的。但随着时间的推移,该项目的范围已经扩大。现在,我们需要的功能之一是细粒度访问控制。

现在正如上面提到的

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

在这个

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

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

因此,可以对数据库进行加密。但据我所知,我不能将其描述为细粒度访问控制,因为SQLite数据库绑定到一个加密密钥。此外,我不能有多个用户和不同的访问级别

现在我的问题是:

  • 无论如何,是否可以在SQLite中启用访问控制?(我可能已经回答了我的问题,但出于内心的满足,我还是问了这个问题:)
  • 我对加密相关的
    细粒度访问控制
    的理解是否正确
  • 假设我对一台机器和一个用户使用加密,那么与真正的
    细粒度访问控制相比,它有什么缺点?(性能可能是其中之一,因为我们必须为每个连接解密它..不确定)
  • 一些有用的信息

  • 我们正在使用SQLite的最新版本
  • SQLite作为源代码的一部分嵌入
  • 在其全部容量中,我们可以预期大小为1GB或大约1GB的数据库

  • 注意:我知道在访问控制可用的情况下使用任何其他RDBMS都是很好的,但问题非常具体到SQLite。请用那种方式回答他们。谢谢。

    SQLite中没有访问控制(表示授予/撤销表级访问控制)。您必须通过应用程序代码提供所需的任何访问控制。加密仅在最粗略的级别提供访问控制—您可以访问数据库,也可以不访问数据库。

    首先,您将如何共享SQLite数据库?SQLite没有像mysql/postgresql那样的服务器-客户机体系结构

    如果您希望多台计算机同时使用同一个数据库,那么您可能希望移动到MySQL或PostgreSQL,否则这与共享microsoft Access数据库相同


    如果您执行大量的插入/更新/删除,SQLite会随着时间的推移变得非常庞大。文件将始终增长,但不会缩小。

    我不知道这个想法是否有效,如果有的话,因此欢迎其他人发表评论

    你能做如下的事情吗

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

    当应用程序关闭时,或者在每次更新内部数据时(我想这是您的选择),在驻留在“网络”某处的“主数据库”中创建一个触发器。在这里插入更新所具有的值,每个字段都有第二列来存储用户的名称(例如,取自本地终端登录名)

    我不确定这是否有效?然后,您可以在每个“本地”sqlite文件中实现一个表,该表是用户名和密码的列表,以控制对后端主文件的访问(也可能是对sqlite文件本身的访问,使用您的应用程序请求用户名及其特定密码)。然后,您甚至可以启用一个“仅查看”的来宾用户,该用户(通过您的应用程序)只能对数据执行查找。这个表显然只需要从连接到主数据库写入

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

    当然,一旦您完成了所有这些艰苦的工作,您就可以将其分享给SQLite团队,然后SQLite将在许多实例中更加实用


    David

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

  • 创建一个“admin”表
  • 存储用户名和密码列表(当然是散列的)
  • 在python中创建用户名/密码提示,如果哈希和密码不匹配,请退出
  • 创建具有权限级别的列
  • 创建一个具有这些特权级别(要规范化)和该级别可以执行的关联查询类型的表。可选-在该表中创建另一列以命名权限级别
  • 通过与该检查的用户权限级别匹配的函数传递每个查询,并查看查询是否包含任何已批准的命令。如果没有,则给出访问受限提示

  • 显然不是一成不变的,我认为“包含检查”是有办法的,所以我也会进行头脑风暴。需要考虑的问题。

    是的,我们知道它没有服务器-客户机体系结构。目前我们只是头脑风暴。由于我们所有的用户都在局域网中,因此我们的想法之一是在文件服务器上提供共享文件夹,所有应用程序实例都将访问那里的共享数据库。最终我们可能会转向MySQL或PostgreSQL,但目前正在探索围绕SQLite的一些技巧。谢谢。哦,那在一个非常好的环境中会很有用的