有没有办法从C#/ VB.Net中的代码在MS SQL Server上执行sql并保证数据不会被更改?我只需要加载数据,但不能确定sql表达式不包含insert / update / delete语句。我尝试过SqlDataAdapter和SqlCommand.ExecuteReader(),但它们允许修改数据。 我知道程序只是向sql server发送命令而不检查它。 我现在看到的一个选项是使用只读用户连接。它只需要很少的代码更改。但它并没有完全保存,因为连接字符串存储在配置文件中并且可以轻松更改(我不能使用硬编码值)。 一些更复杂的方法是解析sql以检查它是否实际上是查询。我不确定是否有一些现成可靠的解决方案。
有没有办法阻止运行可以修改代码数据的SQL?
答案 0 :(得分:1)
您可以将用户创建为db_datareader群组成员,db_datareader
个用户,只具有阅读权限,现在可以形成您可以连接到C#
的{{1}}应用使用此用户
答案 1 :(得分:1)
如何与没有任何允许他们修改数据的权限的SQL用户一起执行?我在这里谈论SQL权限。然后无论你传递什么代码,当它试图修改数据时,它都会被拒绝并返回异常。
话虽如此,我永远不会让别人为我查询。我只公开他们调用的方法并将他们的输入作为SQL参数发送到我自己写的脚本(我,我的团队,我的公司,你理解我的意思)。
答案 2 :(得分:1)
使用交易。
我在过去已经完成了运行单元测试的过程,因此测试数据库不会被任何测试更改。
查看SqlTransaction和distributed transactions。
但是这不会阻止删除表等,所以如果你不信任正在运行的SQL,你仍然需要SQL用户拥有有限的权限。
另一个需要考虑的选择是数据库快照,但它们仅用于只有一个进程访问SQL服务器,因此非常适合单元测试,但可能不适用于您正在进行的操作。
答案 3 :(得分:0)
您可以使用以下方法: