我们有一个使用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:
fine grained access control
与加密相关的理解是否正确?fine grained access control
有什么缺点? (性能可能是其中之一,因为我们必须为每个连接解密它..不确定) Some Useful Information
注意:我知道使用任何其他可用访问控制的RDBMS都很好,但问题非常特定于 SQLite 。请从那个角度回答他们。感谢。
答案 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与数据库连接):
显然不是一成不变的,我认为有很多方法可以解决问题'所以我也要集思广益。需要考虑的事情。