应该数据库验证用户是否有权执行操作

时间:2012-12-07 05:27:31

标签: sql database

数据库是否应该验证用户是否有权执行某些操作?

两个例子:

1)用户最多注册了30支球队,只能看到这些球队的得分表。我将userid和teamid传递给存储过程并仅在用户被授权查看记分表时才获取记分表。仅传入teamid并事先检查所有团队用户注册的内容是否更合适?我应该两个都做吗?

2)目前我正在传递海报的用户标识和要删除的评论,我只是在符合两个标准的情况下删除评论 - 用户标识与海报标识匹配,并且与标志性的标记相符 - 只是为了确保用户删除自己的评论而不是其他人的评论。这有点矫枉过正吗?

3 个答案:

答案 0 :(得分:0)

多层验证是最佳实践,并且您的方法似乎不会导致额外的开销。只需确保限制连接到数据库一次,我发现运行数据库查询最昂贵的部分是连接和游标。

http://msdn.microsoft.com/en-us/library/aa174437%28v=sql.80%29.aspx

答案 1 :(得分:0)

安全专家会告诉您没有足够的安全性!但与此同时,您必须找到平衡 b / w 安全以及必然会影响应用程序的性能的不必要的保护层。

首先回答您的第二个问题:最好同时传递 userid 以及 commentid ,并将两者都匹配,以便您不小心删除了特定用户的所有评论。

现在来到你的第一个问题:根据我的理解,你希望用户只有部分团队能够查看团队的评分表,对吧?为了做到这一点,只传递用户所参与的所有团队的 teamid 。我不确定授权的含义是什么意思

注意: 我从理论上回答了您的问题,不知道您的表格结构或您的存储过程中写的是什么。

答案 2 :(得分:0)

您的前端是一个更友好的(库,框架,最佳实践)环境,可以实现您可能想到的任何访问限制或授权。在数据库中添加另一个层只会增加许多复杂性并重复实施访问限制。

如果客户端直接针对数据库连接并执行命令,我只会考虑这样做。

因此,依赖应用程序提供的ID,并将精力用于清理用户输入和实现理智的身份验证模型。你需要它。