使用ExecuteSqlCommand时限制插入/更新查询的最佳方法是什么?

时间:2019-06-11 12:25:25

标签: c# entity-framework-6

我正在继承具有此公共虚拟方法的类

public virtual int ExecuteSqlCommand(string query, params SqlParameter[] parameters)
{
    return _context.Database.ExecuteSqlCommand(query, parameters);
}

我想覆盖它并提供对数据库的只读访问权限,因此任何插入/更新命令都应受到限制

我可以通过在查询中搜索insert / update关键字来做到这一点,但是我不确定这是100%证明的。

有没有更好的方法来实现这一目标?

2 个答案:

答案 0 :(得分:3)

让数据库安全性处理它。使用仅具有数据库读取权限的用户帐户运行查询。

如果您想提前警告用户,则可以使用搜索插入/更新的方法,但是我不会将其作为安全机制。此时,如果权限不足,您也可以运行查询并处理错误。

答案 1 :(得分:0)

如果消费者真的想滥用INSERT / UPDATE / DELETE,则并非100%证明 他们可以执行以下操作:

EXEC('DE' + 'LETE ' + 'FROM Users')

另一种基本可行但又不能证明的方法是创建一个事务并将其回滚到最后。

最好的方法是创建一个仅具有只读访问权限的新用户,并使用该用户帐户连接到数据库。