V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tctc4869
V2EX  ›  程序员

用嵌入式数据库做权限数据的存储和查询验证,合适么?

  •  
  •   tctc4869 · 2021-01-19 09:31:00 +08:00 · 1540 次点击
    这是一个创建于 1402 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一些开源项目的权限系统,基本把权限数据放入一个数据库里,但大多数都是服务端类型的数据库,还带所谓的界面虽然是为了方便,不过没有看过用嵌入式数据库的。

    想用嵌入式数据库,比如 sqlite 之类的,用来做权限数据的存储和查询验证。把权限数据库,比如 RBAC 权限类型的数据写到里面去,校验的时候,用 sql 语句查询校验

    用嵌入式数据库做权限数据的存储和权限校验,有哪些优点和缺陷?

    第 1 条附言  ·  2021-01-19 11:02:00 +08:00
    是 Web 项目的权限系统,其权限数据的存储,写到嵌入式数据库,还不是服务端类型的数据库。
    15 条回复    2021-01-19 14:27:43 +08:00
    hqs0417
        1
    hqs0417  
       2021-01-19 10:06:17 +08:00
    本地测试可以这样用,但是生产环境机器置换,以及扩容怎么搞?
    数据都存在本地,怎么共享?
    loux
        2
    loux  
       2021-01-19 10:19:06 +08:00
    把数据库放在用户手里,自己完全没有控制权,怎么保证数据库没有被篡改
    tctc4869
        3
    tctc4869  
    OP
       2021-01-19 10:28:22 +08:00
    @loux 我做 Web 应用,不是客户端,我只是嵌入式数据库放在 Web 应用的项目的相对路径下
    annielong
        4
    annielong  
       2021-01-19 10:43:01 +08:00
    不管什么类型,只要联网,权限一般都在服务器端的数据库存,单机才会存本地
    rainfd
        5
    rainfd  
       2021-01-19 10:45:44 +08:00
    很多嵌入的项目就一个设备,都不联网...你不写数据库写到哪里去
    tctc4869
        6
    tctc4869  
    OP
       2021-01-19 11:01:28 +08:00
    @annielong 什么意思?嵌入式数据库跟联不联网没什么关系把?服务器端的数据库难道就不能是 sqlite 么?
    young1lin
        7
    young1lin  
       2021-01-19 11:04:00 +08:00
    很小的项目可以,大一点点的放到 MySQL 这种数据库里面,直接查 MySQL,再大一点项目启动的时候,把这些信息放到 Redis 里面,查 Redis 。再大一点的我就没做过了,但是还是差不多,加个网关,网关去 Redis 里面查,还是把具体的权限信息放到 MySQL 集群或者其他能持久化到磁盘的数据库。
    yuankui
        8
    yuankui  
       2021-01-19 11:09:45 +08:00
    如果只有一台 web 服务器还好,但是当你发现,一台服务器扛不住的时候,你就像加机器了。这个时候,就会出现两个 web 服务器,各自维护者自己的嵌入式数据库,数据无法共享,可能出现一个用户明明已经注册(保存在一台嵌入式数据库里面),当时访问的时候,访问了另外一台机器,仍然提示他需要注册。
    auxox
        9
    auxox  
       2021-01-19 11:24:53 +08:00
    如果只把数据写到本地的话数据可用性没法保证,比如磁盘挂了数据就丢了
    Flymachine
        10
    Flymachine  
       2021-01-19 11:33:16 +08:00
    sqlite 数据库是有几率损坏的...
    如果程序在读写过程中突然崩溃或者机器突然断电的话,sqlite 数据库就有几率损坏 (database disk image is malformed)。
    这时候只能先修复数据库,删除损坏数据再用了,但数据肯定是有丢失的。
    这种玩意儿你打算让他存重要的权限数据?
    本地软件用这个无所谓,反正只是缓存,坏了就删除重建。web 服务用这个...不怕日后来了一次数据库损坏然后引发客户投诉么?
    你要是想懒省事,干脆去买云数据库好了,不贵。而且如果买虚拟主机的话,还会送你一个。
    annielong
        11
    annielong  
       2021-01-19 12:03:14 +08:00
    @tctc4869 只要联网,不管有没有服务,为了安全与统一管理,数据库都会单独放一个服务器,至于这个服务器上用什么数据库软件随意,
    tctc4869
        12
    tctc4869  
    OP
       2021-01-19 12:14:14 +08:00
    @yuankui 用户数据又不在嵌入式数据库里
    oott123
        13
    oott123  
       2021-01-19 12:17:15 +08:00 via Android
    这和你用数据库做什么无关。数据库(主要是里面的数据)是一种状态,基于运维考虑,一般是设计成易于与应用分离的。
    Flymachine
        14
    Flymachine  
       2021-01-19 12:32:48 +08:00
    “Web 项目”“非服务端类型”? C/S 架构的 C 端?
    C/S 架构下 C 端用 sqlite 无所谓,毕竟只是缓存。
    B/S 架构下 B 端用 LocalStorage 或者 IndexedDB 会比较好吧,sqlite 有点超纲了。
    yuankui
        15
    yuankui  
       2021-01-19 14:27:43 +08:00
    @tctc4869 那就没问题了,用 sqlite 吧,没问题的!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2654 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 00:22 · PVG 08:22 · LAX 16:22 · JFK 19:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.