我需要一些意见。使用Postgresql作为中间层。需要意见
我打算为朋友开发POS和库存软件。这是一个单人小规模项目,所以我想让架构尽可能简单。
我使用Winform开发GUI(Web界面对POS软件没有意义)。对于数据库,我使用Postgresql。
该程序将基于用户角色控制访问,所以要么我必须开发一个中间层,使用Web服务器来控制用户访问,或者我可以直接在Postgresql中设置用户授权。
开发一个中间层将非常耗时,维护将变得更加复杂。所以我更喜欢直接在数据库中设置访问控制。
现在看来,使用数据库来控制用户访问是麻烦的。我必须为每个角色设置专家。更不用说,对于一些表格,这些专家是在专栏级别。这使得关于安全性的推理非常困难。
所以我现在要做的是将所有的表设置为除超级用户以外无法访问。该程序将使用公共角色连接到数据库。由于公众无法访问这些表,因此我将使用SECURITY DEFINER(具有超级用户角色)制作可公开访问的存储功能。访问表的唯一方法是使用这些函数。
我将把用户角色和密码放在一个表中。由于非超级用户无法访问用户表,因此我将创建一个登录函数,我们称之为fn_login(username, password)
。如果登录成功,fn_login将返回会话密钥。
要调用其他函数,我们需要为用户提供会话密钥,例如:fn_purchase_list(session_key)
,fn_purchase_new(session_key, purchase_id, ...)
。
这样,我将存储的函数视为API。添加新用户会更容易,因为我只需要在用户表中添加新行,而不是添加新的Postgresql角色。我不需要在专栏级别设置专业知识。所有控件都将以编程方式完成。
那么你怎么看?这种方法是否可行和可扩展?有没有更好的方法来做到这一点?
谢谢!
并非每个应用程序都需要扩展。 90年代的客户端/服务器技术对于许多组织而言都是可行的。由于大型组织实际上通过使用技术获得的简单事实表明其有效。也许不是最佳的,但至少可行。很可能,这个应用程序并没有接近这些问题。当然有限制,这是一个像其他任何设计考虑。 – 2009-12-13 04:18:34
但问题专家问道:“这种方法是否可行和可扩展?”可行?当然。可扩展的?这取决于人们需要走多远,并没有任何暗示。 – duffymo 2009-12-13 11:53:28
嗯,我读过“一个人的小规模项目,所以我想让建筑尽可能简单”,并认为这个问题已经得到解答。 – 2009-12-14 21:26:53