我正在开发一个webapp,每个用户都可以访问自己的数据。
考虑关键跟踪器和示例等,并假设每个用户将存储2种不同的数据类型,如下所示:
table project
id | name
0 | foo
1 | bar
table story
id | name | effort
1 | baz | 5
2 | ex | 2
我能想到2个解决方案。
1)为每个表提供一个额外的user_id
列,以便每个数据都绑定到其所有者
2)为每个新用户设置新的数据库架构
就个人而言,我更关注2)因为它会授予更高的安全率(不受应用程序级别约束)。
推荐的方式是什么,为什么?
答案 0 :(得分:0)
解决方案2对我来说显得异乎寻常。这意味着每次添加用户时都要创建新的数据库模式。现在,如果您的用户非常少,而且新用户很少被添加,这可能是可行的。但是如果你有很多用户可以容纳,那么你需要自动化来动态创建这些模式。当然这是可能的,但您将留下支持您的开发的现有工具和框架。例如,Java Persistency API将Java类链接到表,并且不支持动态数据库定义。
另外,我对安全级别有疑问。在Web应用程序中,数据库“user”不是浏览器背后的实际人类用户,而是应用程序服务器,它拥有整个运行时的数据库连接。因此,个人用户的访问权限不是由数据库处理,而是由应用程序处理。