Python桌面应用程序的数据库权限

时间:2019-05-20 15:45:46

标签: python authentication server client

我最近开始开发Desktop python应用程序,我想知道更多的专家会如何处理此问题。

过去,我过去使用PHP + MySQL开发Web应用程序(大约5-10年前),因为代码/程序位于用户无权访问的服务器上(网页除外) ),我可以简单地将用户/组权限存储在数据库中的表中,例如用户,users_groups,users_permissions等。然后,我将在每次页面加载时检查用户是否有权访问该页面/更新数据库中的记录。

对于桌面应用程序,用户可以访问可执行文件(可以相对容易地将其反编译为源代码,用Python编写),方法可能会大不相同。

由于MySQL已经加入了MariaDB,并且不再那么积极地开发,因此PostgreSQL有望启动。我考虑过在PostgreSQL级别上创建不同的用户,然后让PostgreSQL处理权限(我的应用程序直接处理这些权限)。

但是,这仅允许将权限调低到表级别。将允许用户在表中创建/删除/更新记录,但是没有其他控件可用。 AFAIK,您不能告诉“仅允许该用户更新自己的记录”或“此用户只能从该组中删除记录”,或者“ X组中的用户只能更新自己的记录,而Y组中的用户可以更新每个人的记录”

我对如何处理此类问题的理解将是在用户和位于服务器上的数据库之间放置某种中间件应用程序,例如: 桌面应用程序<----->服务器端应用程序权限处理程序<----->数据库

其中服务器端权限处理程序可以像向每个查询添加“ WHERE user = ...”以及更高级的内容一样简单(首先检查存储在数据库中的用户权限,根据此决定是否允许用户执行查询或拒绝查询)。我认为这是所有桌面应用程序的常见问题,因此希望这样的服务器端应用程序已经存在。我是否缺少明显的东西,或者PostgreSQL允许进行更详细的微调?

谢谢您的帮助;)

1 个答案:

答案 0 :(得分:0)

您的直觉是正确的。让客户端直接访问数据库绝不是一个好主意。看看Django https://www.djangoproject.comhttps://www.django-rest-framework.org 这将是服务器端的基础。您将在此处处理业务逻辑,身份验证,授权。客户端基本上应该在UI中呈现数据,并将所有决策委派给服务器。

在这里您可以找到有关如何在Django中通过用户身份验证实现REST api的分步教程。 https://wsvincent.com/django-rest-framework-authentication-tutorial/