C# 允许查看数据而不是修改数据的SQL查询

C# 允许查看数据而不是修改数据的SQL查询,c#,sql,C#,Sql,我正在开发一个应用程序,允许用户自己创建查询以查看数据库中的数据。但是,规定是应用程序应防止对数据库中存储的表和数据进行任何修改。应用程序将用C语言编写。对如何做到这一点有什么好的建议吗?我想到的可能想法: 解析SQL以筛选任何可能改变数据的保留字。插入、改变等 可能存在阻止从此应用程序连接进行修改的设置。 如果您建议阻止此应用程序所做的任何更改,以防止出现任何用户错误或试图修改数据表,我们将不胜感激。任何像样的DBMS都应该在每个用户级别上内置这些保护。您只需确保他们拥有的唯一访问权限是只读的

我正在开发一个应用程序,允许用户自己创建查询以查看数据库中的数据。但是,规定是应用程序应防止对数据库中存储的表和数据进行任何修改。应用程序将用C语言编写。对如何做到这一点有什么好的建议吗?我想到的可能想法:

解析SQL以筛选任何可能改变数据的保留字。插入、改变等 可能存在阻止从此应用程序连接进行修改的设置。
如果您建议阻止此应用程序所做的任何更改,以防止出现任何用户错误或试图修改数据表,我们将不胜感激。

任何像样的DBMS都应该在每个用户级别上内置这些保护。您只需确保他们拥有的唯一访问权限是只读的

那你就不用担心他们做的任何事了。让他们尝试插入、更新和删除所有他们想要的内容


数据库的一个基本原则是对自身的安全性和完整性负责。您决不能让外部应用程序来完成这项工作,因为任何猴子都可以编写一个应用程序来连接不符合规则的数据库。

您应该以没有写入权限的用户身份运行查询。

这需要在用户级别而不是查询级别进行处理。设置应用程序时,需要确保用于运行查询的帐户没有任何dbwriter权限。

IMHO,最好的方法是创建一个只能在指定表上执行选择的用户。然后使用该用户进行连接

这通常是通过允许用户访问不可更新的视图而不是表来处理的。

使用什么策略来访问数据库?@Vash.Net对象,如System.Data.sqlclient中的对象。该系统将可交付给客户机,这些客户机可能知道他们的SQL智能,但我想保护数据不受他们的影响。DBMS太过复杂了,也不能总是为它们配置。@user490250,我不确定我是否理解您的意思。你说他们有一个数据库,比如SQLServer或DB2。这就是我所说的DBMS,而不是他们必须安装和配置的单独产品。他们的数据库已经在用户级别内置了保护,只需确保用户没有写访问权限。你的建议似乎是一个额外的完全不必要的保护层。我的建议是使用你们已有的设施。好的,我现在更了解你们了。该建议的问题在于,由于另一个应用程序中的用户应该能够提交不是由他们创建的语句创建的更改,因此保护需要在应用程序级别。如果这有助于澄清任何问题,那么我将确保1您的应用程序仅以单个用户身份登录到数据库,没有权限,只有读取权限;2如果您需要特定的用户帐户,则为每个用户提供两个帐户bob和bob nopower,第二个是只读的,请确保您的应用程序只允许使用nopower变体登录。在数据库上执行语句之前,可以和/或如何在代码中设置此选项连接到数据库时,请指定用户名。您可以指定所需的用户名和现有用户名。