给定一个 Delphi 和 Interbase 客户端-服务器应用程序,我想根据数据库中的用户数量来许可该应用程序。商业许可软件如何做到这一点?我看不到任何看起来会涵盖此内容的列表功能。每个用户最初都登录到数据库。该数据库似乎如此可用,以至于它对任何用户(或至少是管理员)都是开放的。我是否还必须编写一个 Delphi exe 或 dll 才能在服务器上运行 - 也许作为数据库中的一个函数 - 与许可相关联?不知道如何进行。顺便说一句,Interbase 许可同时用户,但我认为他们将其写入服务器,但我想要类似的东西。
1 回答
要控制同时的客户端连接,您肯定需要一个服务器端应用程序。它可以是一个简单的 tcp/ip 套接字服务器作为服务(Linux 上的守护程序)或另一个(midas?)服务器层。
当您的客户端应用程序启动时,它会调用一个服务器方法,例如 Session.Connect,在这里您计算活动连接数并在达到最大限制的情况下返回 false(无代码)。当应用程序关闭时,您使用 Session.Disconnect 通知服务器。减少连接数。
在客户端应用程序和服务器服务(因为我很伤心)之间保持实时(永久)连接以处理应用程序挂起、不受控制的重新启动和处理此事件(例如服务器端的 OnSockedDisconnect)也是一个好主意,以减少连接数和处理断开属性,例如写入日志等...
当然,通信应该加密(握手),以避免不受欢迎的客人。您还可以玩 sim 读卡器等。
这种方法不会提供工业(核)级别的安全性,但如果编码正确,即使是专业黑客也需要一些时间才能破解它。
或者,您可以查看一些现成的保护工具,例如 SafeNet(HASP 保护)。
此外,Firebird(可能还有 Interbase)在 DB Connect / Disconnect 触发器上有,如果用户有权限,它可以读取连接计数。但是如果数据库存储在客户服务器上,这些可以很容易地更改。