是否可以使用SqlCommand强制执行只读行为?

时间:2009-10-09 13:46:17

标签: c# sql

是否可以使用访问Sql Server数据库的System.Data.SqlClient代码强制执行只读权限?

我希望允许受信任的用户在网站上编写自己的SELECT语句。

不,我不是在这里拖钓!显而易见的解决方案是在数据库中创建只读用户,并在连接字符串中使用这些凭据,当然只有白痴接受网页中的SQL语句。这是一个用户部署问题,我不相信其他人正确设置它并且不想编写代码来检查只读连接字符串是否只读。

一种解决方案是解析SQL并验证它是一个只读命令,还是做类似的事情。我想做的就是做一些事情;

SqlConnection conn = new SqlConnection(myConnectionString, Flags.Readonly)

更新 给定具有SA权限的连接字符串,“使用密码= xxx创建用户blah”“使用my-db”“创建登录blah”“将mytable选择授予blat”。然后创建一个新的连接字符串。

4 个答案:

答案 0 :(得分:6)

在SQL Server中创建一个新登录名,只为该登录名提供所需的权限。然后在连接字符串中让应用程序使用该登录名。你在帖子中提到这是一个明显的解决方案,但我不明白为什么你不想这样做。

答案 1 :(得分:3)

您可以使用交易并始终回滚吗? (但要确保执行的sql不提交)

答案 2 :(得分:2)

不,没有用于确保最终用户操作没有副作用的内置工具。虽然在您的场景中可能很简单,但如果不是不可能的话,通用的实现将非常复杂。如果select语句使用具有副作用的UDF怎么办?

答案 3 :(得分:1)

创建另一个数据库,可能会恢复每晚备份,所以它只有一天。仅允许用户访问此数据库。然后,如果您的安全性失败并且进行了更改,则用户无法通过糟糕的查询减慢生产速度,或者真正伤害任何内容。