Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 什么';使用EXECUTESQL命令时,限制插入/更新查询的最佳方法是什么?_C#_Entity Framework 6 - Fatal编程技术网

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解析器之外,这是唯一一种简单易行的方法,即使您这样做了,您也无法判断存储过程调用是否更新了任何内容。另一种方法是创建触发器以回滚更改,尽管这看起来很简单,但需要在所有表上创建触发器