可能重复:
编写Web“服务器少”应用程序
因此,假设我要构建一个Stack Exchange克隆,然后决定使用CouchDB之类的东西作为我的后端存储。如果我使用它们的内置身份验证和数据库级别授权,是否有任何理由不允许客户端Javascript直接写入可公开使用的CouchDB服务器?因为这基本上是一个CRUD应用程序,并且业务逻辑由“只有作者才能编辑他们的帖子”组成,所以我认为在客户端内容和数据库之间没有一层的必要性很高。我只是在CouchDB端使用验证,以确保没有人放入垃圾数据,并确保正确设置权限,以便用户只能读取自己的_user数据。渲染将通过类似于AngularJS的客户端完成。从本质上讲,您可能只拥有一个CouchDB服务器和一堆“静态”页面,因此一切顺利。您不需要任何类型的服务器端处理,而只需要一些可以处理HTML页面的内容即可。
向世界开放我的数据库似乎是错误的,但是在这种情况下,只要正确设置权限,我就无法想到为什么。这违背了我作为Web开发人员的本能,但我想不出一个很好的理由。那么,为什么这是个坏主意呢?
编辑:看起来这里有一个类似的讨论:编写Web“服务器少”应用程序
编辑:到目前为止,很棒的讨论,我感谢大家的反馈!我觉得我应该添加一些通用假设,而不是专门调用CouchDB和AngularJS。因此,我们假设:
- 数据库可以直接从其隐藏存储对用户进行身份验证
- 所有数据库通信都将通过SSL进行
- 数据验证可以(但不应这样做)由数据库处理
- 除了管理员功能外,我们关心的唯一授权是仅允许某人编辑自己的帖子
- 每个人都可以读取所有数据(除了可能包含密码哈希的用户记录之外),我们非常满意
- 管理功能将受到数据库授权的限制
- 没有人可以将自己添加为管理员角色
- 数据库相对容易扩展
- 真正的商业逻辑几乎没有,甚至没有。这是一个基本的CRUD应用
DELETE FROM ImportantData;