我不是安全专家,我的项目中曾讨论过我们是否应该使用 Entity Framework 。尽管看起来我们会使用它,但项目负责人仍然坚持认为,出于安全考虑,我们仍然应该使用存储过程来执行所有操作(包括简单的 CRUD)。他说,如果我们使用存储过程,用户将只需要执行存储过程的权限,而不需要创建/读取/更新/删除的权限。
正如我之前所说,我不是安全专家,所以我很想知道这有多真实。
最佳答案
这样做的作用是向各个存储过程授予权利和特权,然后存储过程可以访问表,而不是表本身。
通过这种方式,您可以限制所有表的用户,并允许 SP 允许基于其他逻辑的语义访问(SP 级别的数据库权限,以及 SP 内的代码)。
这使整个安全框架在角色和权限方面具有更细的粒度。
例如,使用普通的数据库权限,很容易限制用户可以看到哪些表,但不能限制他们可以在表中看到哪些行。
解决此问题的两种方法是限制对基础表的访问,然后在该表上创建受限 View 并授予该 View 权限,或者您可以通过 SP 来限制访问,该 SP 具有能够限制用户行数的逻辑可以看到。
关于sql-server - 存储过程比对数据库使用 LINQ 更安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6142020/