database - 如何向 Delphi 应用程序添加多用户功能?
问题描述
我目前正在开发一个需要多用户功能的桌面(数据库:访问)Delphi应用程序(每个用户都有他的权限,交易历史)。
我怎样才能做到这一点 ?
我找到了这篇文章,他们使用 MySQL 并且不熟悉它,在 Access 中解释相同的方法将不胜感激。
解决方案
您的问题有点宽泛,但这里有一些建议可以实现您的期望:
即使数据库具有用户身份验证,也不要依赖它:
- 身份验证是高度特定于数据库的,因此您的代码不会轻易迁移到另一种数据库;
- 出于安全原因,泄露数据库凭据总是一个坏主意:任何能够连接到数据库的人都可以使用原始 SQL 对其进行修改......
因此,在一个完美的世界中,我会使用 n 层架构,并将身份验证保留在服务器端。但它不适用于 RAD 应用程序。
一种典型的方法是定义一些User
表,带有一个 ID,并使用例如散列密码进行身份验证。然后是其他一些UserRight
表,其特征名称为字符串键,我将在我的 VCL/UI 代码中对其进行测试:例如“ModifyThisKindOfData”、“ExportThisKindOfContent”......例如,请参阅如何区分Authorization 和 Authentication。
关于安全性,如果您使用 Access,则需要通过使用正确的密码散列(例如使用带有密钥和存储盐的 PBKDF2/SHA-256)以及通过对表行User
和UserRight
表行进行签名来保护授权和身份验证,例如使用HMAC-SHA-256。然后在软件中进行验证,以检测 DB 是否已回火。它将避免最明显的安全漏洞。但是切换到适当的 n 层设计,或者客户端-服务器数据库会更好。