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

Sql 数据库是否应该验证用户是否有权执行操作,sql,database,Sql,Database,数据库是否应该验证用户是否有权执行某些操作 两个例子: 1) 用户最多注册30支球队,并且只能查看这些球队的得分表。我将userid和teamid传递给存储过程,并仅在用户有权查看记分表时获取记分表。只传递teamid并事先检查所有teams用户注册的内容是否更合适?我应该两者都做吗 2) 目前,我正在传递海报的userid和要删除的评论的commentid,并且我只在满足这两个条件时才删除评论-userid与海报id匹配,commentid与commentid匹配-只是为了确保用户删除的是他自

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

两个例子:

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


2) 目前,我正在传递海报的userid和要删除的评论的commentid,并且我只在满足这两个条件时才删除评论-userid与海报id匹配,commentid与commentid匹配-只是为了确保用户删除的是他自己的评论,而不是其他人的评论。这是一种过分的做法吗?

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


安全专家会告诉你,再多的安全也不够!但与此同时,您必须找到一个平衡点,即安全性和不必要的保护层,这些都会影响应用程序的性能

首先回答您的第二个问题:最好同时传递userid和commentid,并将两者匹配,这样您就不会意外地删除特定用户的所有注释

现在来回答你的第一个问题:据我所知,你只希望团队中的一部分用户能够查看团队的得分表,对吗?为了做到这一点,只传递用户所属的所有团队的teamid。我不知道你说的授权是什么意思

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

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

<>我只考虑在客户端连接和直接执行数据库命令时做这件事。< /P>
因此,依赖应用程序提供的ID,将精力花在清理用户输入和实现sane身份验证模型上。你会需要它。

我与之互动的安全专家通常倾向于平衡,而不是更绝对的原则。然后你与比我更理智的安全专家在一起,我的朋友@udoprog。第一个问题:我的意思是可能会有一系列活动,比如记分表,文章等正在为团队发布,当用户请求其中任何一个时,我希望检查他是否有权查看(这取决于他所属的所有团队)。所以,您认为我应该传入teamid(用户的),而不是传递userid,并且我应该将这些teamid存储为会话变量或其他什么?当然!首先根据userid获取每个用户,然后检查该用户所属的团队,计算成本会更高。更快的方法是传递用户的teamid。