2011-05-26 69 views
2

我不是安全专家,在我的项目中讨论了是否应该使用实体框架。尽管看起来我们会使用它,但项目负责人坚持认为,由于安全原因,我们仍然应该使用存储过程执行所有操作(包括简单的CRUD)。他说,如果我们使用存储过程,用户只需要执行存储过程的权限,而不需要创建/读取/更新/删除的权限。存储过程比使用LINQ对数据库更安全吗?

正如我之前所说我不是安全专家,所以我很想知道这是多么真实。

回答

2

这是做什么权利和权限的个人存储过程,然后有权访问表,而不是表本身。

通过这种方式,您可以限制所有表中的用户,并允许SP基于其他逻辑(SP级别的数据库权限以及SP内的代码)允许语义访问。

这给出了整体安全框架在角色和权限方面的更精细的粒度。

例如,使用普通的数据库权限,可以很容易地限制用户可以看到的表格,但不能在表格中查看哪些行。

解决这个问题的两种方法是限制对基础表的访问,然后在该表上创建一个有限视图并授予该表的权限,或者可以通过SP限制访问权限,该SP具有能够限制哪些行的逻辑用户可以看到。

1

其确实如此。

存储过程给予(给予可能性更新表的只有几列为例)比标准表的权限进行更好的安全性

但是...

对于开发者的一个恶梦的能力。即使最简单的查询也需要作为存储过程或视图来实现。 所以它不敏捷,快速或性感:)

+0

我知道最后一部分是我最讨厌的,如果我想通过另一个字段查询我必须做一个程序,需要更多的时间,是很难穿上源代码控制,诚实地说,我认为访问数据库的攻击是不可接受的,并且仍然会造成破坏(破坏数据,提取数据等) – groovejet 2011-05-27 08:52:38