C# 什么';使用EXECUTESQL命令时,限制插入/更新查询的最佳方法是什么?
我正在继承一个具有此公共虚拟方法的类C# 什么';使用EXECUTESQL命令时,限制插入/更新查询的最佳方法是什么?,c#,entity-framework-6,C#,Entity Framework 6,我正在继承一个具有此公共虚拟方法的类 public virtual int ExecuteSqlCommand(string query, params SqlParameter[] parameters) { return _context.Database.ExecuteSqlCommand(query, parameters); } 我想覆盖它并提供对数据库的只读访问,因此任何Insert/Update命令都应该受到限制 我可以通过在查询中搜索insert/update关键字来做
public virtual int ExecuteSqlCommand(string query, params SqlParameter[] parameters)
{
return _context.Database.ExecuteSqlCommand(query, parameters);
}
我想覆盖它并提供对数据库的只读访问,因此任何Insert/Update命令都应该受到限制
我可以通过在查询中搜索insert/update关键字来做到这一点,但我不确定这是100%的证据
有没有更好的方法来实现这一点?让数据库安全性来处理它。使用仅对数据库具有读取权限的用户帐户运行查询
如果您想提前警告用户,您可以使用搜索insert/update的方法,但我不会依赖它作为安全机制。此时,如果用户没有足够的权限,您也可以运行查询并处理错误。如果用户真的想滥用它,搜索插入/更新/删除并不是100%的证据 它们可以执行以下操作:
EXEC('DE' + 'LETE ' + 'FROM Users')
另一种基本上也有效但不能证明的方法是创建一个事务,并在最后回滚它
最好的方法是创建一个只有只读访问权限的新用户,并使用该用户帐户连接到数据库。是--不要授予访问数据库的帐户更改任何内容的权限(和/或仅为这些访问创建备用帐户)。除了在命令上使用功能齐全的T-SQL解析器之外,这是唯一一种简单易行的方法,即使您这样做了,您也无法判断存储过程调用是否更新了任何内容。另一种方法是创建触发器以回滚更改,尽管这看起来很简单,但需要在所有表上创建触发器