0

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

两个例子:

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

2)目前我正在传递海报的用户标识和要删除的评论的评论标识,并且只有在满足两个条件时我才会删除评论 - 用户标识与海报标识匹配,评论标识与评论标识匹配 - 只是为了确定用户正在删除他自己的评论,而不是其他人的评论。是不是矫枉过正?

4

3 回答 3

0

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

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

因此,依靠应用程序提供的 id 并将您的精力花在清理用户输入和实施健全的身份验证模型上。你会需要它。

于 2012-12-07T05:57:49.517 回答
0

安全专家会告诉你,再多的安全也不够!但与此同时,您必须找到平衡黑白安全性和必然会影响应用程序性能的不必要的保护层。

首先回答您的第二个问题:最好同时传递useridcommentid并匹配两者,这样您就不会意外删除特定用户的所有评论。

现在来回答您的第一个问题:据我了解,您希望只有团队中的一部分用户能够查看团队的记分表,对吗?为此,仅传递用户所属的所有团队的teamid 即可。我不知道你这里的授权是什么意思!

注意: 我从理论角度回答了您的问题,不知道您的表结构或您的存储过程中写的内容。

于 2012-12-07T05:55:46.867 回答
0

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

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

于 2012-12-07T05:49:35.220 回答