许可问题

时间:2011-04-13 15:14:23

标签: .net sql-server

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

我想在我的应用中添加许可,只允许数据库中的一定数量的项目,具体取决于许可证。 例如,比方说,我有一个“项目”表,许可证是5000项。

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

另外,如果我在表格中添加一个字段,我填写了带有密码的项目信息哈希,那么用户就不能再手动添加项目了,但是我必须运行整个表格并检查每个项目在确定是否添加每个新项目之前,许可和计数许可项目。这是不实际的,因为我每分钟收到数百件物品,因此会极大地影响性能。

有没有人知道如何实现这个目标?

4 个答案:

答案 0 :(得分:3)

您最好的选择可能是Items表格上的INSTEAD OF trigger,以拒绝超出限额的插入内容。

答案 1 :(得分:2)

您可以将限制颠倒过来,并将查询限制为5000个结果。使用TOP子句可以轻松完成此操作。

这样,用户推入数据库的行数无关紧要,您的程序只能使用它获得许可的行。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

我会将许可证验证与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