一些开源项目的权限系统,基本把权限数据放入一个数据库里,但大多数都是服务端类型的数据库,还带所谓的界面虽然是为了方便,不过没有看过用嵌入式数据库的。
想用嵌入式数据库,比如 sqlite 之类的,用来做权限数据的存储和查询验证。把权限数据库,比如 RBAC 权限类型的数据写到里面去,校验的时候,用 sql 语句查询校验
用嵌入式数据库做权限数据的存储和权限校验,有哪些优点和缺陷?
1
hqs0417 2021-01-19 10:06:17 +08:00
本地测试可以这样用,但是生产环境机器置换,以及扩容怎么搞?
数据都存在本地,怎么共享? |
2
loux 2021-01-19 10:19:06 +08:00
把数据库放在用户手里,自己完全没有控制权,怎么保证数据库没有被篡改
|
4
annielong 2021-01-19 10:43:01 +08:00
不管什么类型,只要联网,权限一般都在服务器端的数据库存,单机才会存本地
|
5
rainfd 2021-01-19 10:45:44 +08:00
很多嵌入的项目就一个设备,都不联网...你不写数据库写到哪里去
|
7
young1lin 2021-01-19 11:04:00 +08:00
很小的项目可以,大一点点的放到 MySQL 这种数据库里面,直接查 MySQL,再大一点项目启动的时候,把这些信息放到 Redis 里面,查 Redis 。再大一点的我就没做过了,但是还是差不多,加个网关,网关去 Redis 里面查,还是把具体的权限信息放到 MySQL 集群或者其他能持久化到磁盘的数据库。
|
8
yuankui 2021-01-19 11:09:45 +08:00
如果只有一台 web 服务器还好,但是当你发现,一台服务器扛不住的时候,你就像加机器了。这个时候,就会出现两个 web 服务器,各自维护者自己的嵌入式数据库,数据无法共享,可能出现一个用户明明已经注册(保存在一台嵌入式数据库里面),当时访问的时候,访问了另外一台机器,仍然提示他需要注册。
|
9
auxox 2021-01-19 11:24:53 +08:00
如果只把数据写到本地的话数据可用性没法保证,比如磁盘挂了数据就丢了
|
10
Flymachine 2021-01-19 11:33:16 +08:00
sqlite 数据库是有几率损坏的...
如果程序在读写过程中突然崩溃或者机器突然断电的话,sqlite 数据库就有几率损坏 (database disk image is malformed)。 这时候只能先修复数据库,删除损坏数据再用了,但数据肯定是有丢失的。 这种玩意儿你打算让他存重要的权限数据? 本地软件用这个无所谓,反正只是缓存,坏了就删除重建。web 服务用这个...不怕日后来了一次数据库损坏然后引发客户投诉么? 你要是想懒省事,干脆去买云数据库好了,不贵。而且如果买虚拟主机的话,还会送你一个。 |
11
annielong 2021-01-19 12:03:14 +08:00
@tctc4869 只要联网,不管有没有服务,为了安全与统一管理,数据库都会单独放一个服务器,至于这个服务器上用什么数据库软件随意,
|
13
oott123 2021-01-19 12:17:15 +08:00 via Android
这和你用数据库做什么无关。数据库(主要是里面的数据)是一种状态,基于运维考虑,一般是设计成易于与应用分离的。
|
14
Flymachine 2021-01-19 12:32:48 +08:00
“Web 项目”“非服务端类型”? C/S 架构的 C 端?
C/S 架构下 C 端用 sqlite 无所谓,毕竟只是缓存。 B/S 架构下 B 端用 LocalStorage 或者 IndexedDB 会比较好吧,sqlite 有点超纲了。 |