【问题标题】:Licensing issue许可问题
【发布时间】:2011-08-04 19:47:21
【问题描述】:

我有一个在 sql server 数据库中存储信息的 .NET 应用程序。

我想向我的应用添加许可,以根据许可仅允许数据库中的特定数量的项目。 例如,假设我有一个“项目”表,并且许可证是 5000 个项目。

我面临的问题是,如果表行数 > 5000,我不能依赖我的应用程序不插入项目,因为用户可以将项目直接插入数据库,因为 提供了服务器由客户提供,这样他就可以完全不受限制地访问数据库。 (由于这个特殊问题,我也不能使用任何 sql 服务器端解决方案)

另外,如果我向表中添加一个字段,我用密码散列的项目信息填充该字段,则用户不能再手动添加项目,但我必须遍历整个表并检查每个项目是否在确定是否添加每个新项目之前,已获得许可并计算许可项目。这是不切实际的,因为我每分钟收到数百个项目,因此会极大地影响性能。

有人知道如何实现这一目标吗?

【问题讨论】:

  • 您是否考虑过以不同的方式限制软件。除了简单地知道有多少行之外,如果有超过 5,000 个项目,我根本没有办法让应用程序运行。老实说,您不能同时拥有“允许用户手动添加项目”和“阻止用户在达到 5,000 个限制后添加项目”。
  • 我不希望用户手动添加项目,但问题是用户也可以访问数据库,因为有时我会在他们的服务器上安装应用程序。
  • 如果您每分钟收到 100 件物品,那么您的许可证不是只有大约 50 分钟有效吗?你确定这是要走的路吗?

标签: .net sql-server


【解决方案1】:

我会将许可证验证与您的 DL 完全分离。而是让您的应用在某个时候运行其验证脚本,然后在验证失败时采取所需的(禁用/警告)操作。

这样的东西应该会很快返回:

SELECT [TableName] = so.name, [RowCount] = MAX(si.rows) FROM sysobjects so, sysindexes si WHERE so.xtype = 'U' AND si.id = OBJECT_ID(so.name) GROUP BY so.name ORDER BY 2 DESC

【讨论】:

    【解决方案2】:

    您可以颠倒限制,将查询限制为 5000 个结果。这可以通过TOP 子句轻松完成。

    这样,用户在数据库中插入多少行都没有关系,您的程序只能使用它获得许可的那些。

    【讨论】:

      【解决方案3】:

      我还推荐一个简单的触发器(如果需要,可以基于配置表)。

      我想了解更多有关整体业务需求的信息,因为如果您每分钟接收数百行,表格似乎会在一个小时内填满。

      【讨论】:

        【解决方案4】:

        您最好的选择可能是在Items 表上使用INSTEAD OF trigger 来拒绝超出限制的插入。

        【讨论】:

        • 用户可以访问数据库,因为它是他们自己的服务器,有时甚至是他们自己的 sql 实例,很遗憾,我无法在 sql 端使用任何方法。
        • @ElArZ 如果用户可以完全控制数据库,那么您无能为力。他们可以做一些诡计来抵消你在客户端可以做的几乎任何事情。他们可以用视图替换表,然后随意换入和换出基础表的部分。
        • @ElArZ,你为什么不做这个'INSTEAD OF'触发器并在代码上做一个镜像。如果超级用户更改或删除触发器,您将能够将其与代码一进行比较并限制访问,重新创建触发器或简单地抛出无效操作并关闭程序
        猜你喜欢
        • 2018-06-20
        • 2011-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-11
        • 2014-03-08
        • 2010-10-03
        • 1970-01-01
        相关资源
        最近更新 更多