使用 ExecuteSqlCommand 时限制 insert/update 查询的最佳方法是什么?
What's the best way to restrict insert/update queries when using ExecuteSqlCommand?
我正在继承具有此 public 虚拟方法的 class
public virtual int ExecuteSqlCommand(string query, params SqlParameter[] parameters)
{
return _context.Database.ExecuteSqlCommand(query, parameters);
}
我想覆盖它并提供对数据库的只读访问权限,因此任何 Insert/Update 命令都应该受到限制
我可以通过在查询中搜索 insert/update 关键字来做到这一点,但我不确定这是 100% 的证据。
有没有更好的方法可以做到这一点?
让数据库安全处理。 运行 仅对数据库具有读取权限的用户帐户的查询。
如果您想提前警告用户,您可以使用搜索 insert/update 的方法,但我不会依赖它作为安全机制。届时,如果他们没有足够的权限,您也可以 运行 查询并处理错误。
如果消费者真的想滥用它,搜索 INSERT/UPDATE/DELETE 并不能 100% 证明
他们可以执行类似:
EXEC('DE' + 'LETE ' + 'FROM Users')
另一种基本有效但无法证明的方法是创建一个交易并在最后回滚。
最好的方法是创建一个只有 read-only 访问权限的新用户,并使用该用户帐户连接到数据库。
我正在继承具有此 public 虚拟方法的 class
public virtual int ExecuteSqlCommand(string query, params SqlParameter[] parameters)
{
return _context.Database.ExecuteSqlCommand(query, parameters);
}
我想覆盖它并提供对数据库的只读访问权限,因此任何 Insert/Update 命令都应该受到限制
我可以通过在查询中搜索 insert/update 关键字来做到这一点,但我不确定这是 100% 的证据。
有没有更好的方法可以做到这一点?
让数据库安全处理。 运行 仅对数据库具有读取权限的用户帐户的查询。
如果您想提前警告用户,您可以使用搜索 insert/update 的方法,但我不会依赖它作为安全机制。届时,如果他们没有足够的权限,您也可以 运行 查询并处理错误。
如果消费者真的想滥用它,搜索 INSERT/UPDATE/DELETE 并不能 100% 证明 他们可以执行类似:
EXEC('DE' + 'LETE ' + 'FROM Users')
另一种基本有效但无法证明的方法是创建一个交易并在最后回滚。
最好的方法是创建一个只有 read-only 访问权限的新用户,并使用该用户帐户连接到数据库。