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

C# 是否可以使用SqlCommand强制执行只读行为?,c#,sql,C#,Sql,是否可以使用访问Sql Server数据库的System.Data.SqlClient代码强制执行只读权限 我希望允许受信任的用户在网站中编写自己的SELECT语句 不,我不是在这里闲逛!显而易见的解决方案是在数据库中创建一个只读用户,并在连接字符串中使用这些凭据,当然只有傻瓜才会在网页中接受SQL语句。这是一个用户部署问题,我不相信其他人会正确设置,也不想编写代码来检查只读连接字符串是否为只读 一种解决方案是解析SQL并验证它是否为只读命令,或者执行类似操作。我想做的是做一些类似的事情 Sql

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

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

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

一种解决方案是解析SQL并验证它是否为只读命令,或者执行类似操作。我想做的是做一些类似的事情

SqlConnection conn = new SqlConnection(myConnectionString, Flags.Readonly)
更新
给定一个具有SA权限的连接字符串,“创建密码为xxx的用户blah”“使用my db”“创建登录blah”“将mytable上的select授予blah”。然后创建一个新的连接字符串。

您可以使用事务并始终回滚吗?(但确保执行的sql没有提交)

在sql Server中创建一个新的登录名,并仅为该登录名授予您在表上所需的权限。然后在连接字符串中,让应用程序使用该登录名。你在帖子中提到这是一个显而易见的解决方案,但我不明白你为什么不想这样做。

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

创建另一个数据库,可能恢复夜间备份,使其保留一天。仅允许用户访问此数据库。那么,如果您的安全性出现故障并进行了更改,用户就无法通过糟糕的查询减慢生产速度,也无法真正伤害任何东西。

是的,这是最简单的方法-处理数据库的权限,然后无论该用户如何访问数据他永远不会破坏任何东西——这是我要做的,但我想知道,对于纯代码的解决方案XEC(“DR'+'OP'+'Tab'+'LE'+'Us'+'ers”)是否可能,您可能可以设置一个更复杂的镜像方案来自动执行此操作,并更频繁地更新。“报告”数据库并不少见。