Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何确保我的C#应用程序只能从SQL Server数据库读取数据?_C#_Sql Server - Fatal编程技术网

如何确保我的C#应用程序只能从SQL Server数据库读取数据?

如何确保我的C#应用程序只能从SQL Server数据库读取数据?,c#,sql-server,C#,Sql Server,我正在构建一个C#应用程序,它运行/导出成批的Crystal报表到PDF文件。我所做的一些测试表明,将数据推送到报表比让ReportDocument刷新自己的数据要高效得多 我已经找到了一种从Crystal报表中提取SQL的方法,现在我只需要安全地执行SQL并将结果绑定回Crystal报表。我的问题是Crystal Reports绝对没有内置检查,以确保用户不会创建有害的Crystal Reports。您可以创建Crystal报表,添加SQL命令表,并提供以下内容作为“查询”: Crystal

我正在构建一个C#应用程序,它运行/导出成批的Crystal报表到PDF文件。我所做的一些测试表明,将数据推送到报表比让
ReportDocument
刷新自己的数据要高效得多

我已经找到了一种从Crystal报表中提取SQL的方法,现在我只需要安全地执行SQL并将结果绑定回Crystal报表。我的问题是Crystal Reports绝对没有内置检查,以确保用户不会创建有害的Crystal Reports。您可以创建Crystal报表,添加SQL命令表,并提供以下内容作为“查询”:

Crystal Reports不会发现上述SQL有任何问题。刷新报告时,将丢失
tbl\u Test
中的所有数据。唯一的限制是创建/运行报表的sql用户的权限

所以,我需要确保我的程序没有拉/执行任何有害的东西。我能想到的最好办法是在SQL Server上创建一个新的用户帐户,该帐户对所有数据库都具有只读访问权限,并使用此帐户在我的应用程序中建立连接

问题是,我将让我的用户使用他们现有的SQL Server用户帐户登录,每个帐户都有自己的现有权限,可以访问哪些数据库。我仍然需要根据个人权限限制每个用户可以查看的内容,但其中一些用户对许多数据库具有写入权限,并且我还需要确保从我的应用程序到任何数据库的任何连接都是100%只读的

是否有任何方法可以使用具有插入/更新/删除/等权限的用户帐户的SQL身份验证来建立到SQL Server的只读连接


另外,我知道任何拥有足够权限/专门知识/动机的用户都可以使用Crystal Reports(…或任何数量的第三方应用程序,就此而言)直接损害我们的数据库。现在我更关心的是确保我的申请不会成为一个不知情的共犯=P

没有什么强迫您对应用程序中的所有内容使用相同的连接。为什么不为这个特殊任务使用特定的连接呢。通过这种方式,您可以保持所有现有用户权限不变,但对于此特定任务,您可以创建一个与sql用户的新连接,该sql用户只能以只读方式访问所需的表。这样,报告中的任何狡猾的SQL都不会做坏事。

没有任何东西强迫您对应用程序中的所有内容使用相同的连接。为什么不为这个特殊任务使用特定的连接呢。通过这种方式,您可以保持所有现有用户权限不变,但对于此特定任务,您可以创建一个与sql用户的新连接,该sql用户只能以只读方式访问所需的表。这样,报表中的任何不可靠的SQL都不会做任何坏事。

首先不要与具有多个读取权限的用户连接到数据库。为什么不创建一个架构或角色,您可以将用户放入其中,然后修改表权限。最终只会影响模式或角色。那就是。。如果你真的无法创建一个新用户,其访问权限超出了你的期望。我们有大量的数据库,每个用户帐户对每个数据库都有不同的权限。我仍然需要确保所有用户都在他们设置的权限范围内,但我还需要确保我的应用程序将他们限制为只读操作。。。即使他们使用的另一个应用程序允许他们插入/更新/删除。我不能只使用一个单独的只读帐户,因为每个用户都有特定的权限来限制他们访问哪些数据库。我希望这有助于澄清我的观点。如果只读很重要,那么您不能信任任何应用程序来强制执行它。这必须在数据库服务器上强制执行。首先,不要使用具有多个读取权限的用户连接到数据库。为什么不创建一个架构或角色,让用户可以使用,然后修改表权限。最终只会影响模式或角色。那就是。。如果你真的无法创建一个新用户,其访问权限超出了你的期望。我们有大量的数据库,每个用户帐户对每个数据库都有不同的权限。我仍然需要确保所有用户都在他们设置的权限范围内,但我还需要确保我的应用程序将他们限制为只读操作。。。即使他们使用的另一个应用程序允许他们插入/更新/删除。我不能只使用一个单独的只读帐户,因为每个用户都有特定的权限来限制他们访问哪些数据库。我希望这有助于澄清我的观点。如果只读很重要,那么您不能信任任何应用程序来强制执行它。这必须在数据库服务器上强制执行。我喜欢。是否有一种方法可以设置一个用户帐户,使其拥有对所有数据库的读取权限。。。甚至是将来添加的新的?这是我在事情开始顺利进行之前要克服的最后一个障碍!不适用于未来的数据库,但您可以为每个数据库(包括新数据库)上的“公共”系统角色指定安全性,然后简单地将公共角色分配给您的报告用户。我刚刚想到了此方法的一个问题。。。如果只读帐户具有对所有数据库的无限读取权限,则无法验证登录用户是否能够查看报告的结果,这将对内容没有任何限制。暂时更改用户帐户以添加只读角色,提交sql,然后将其从只读角色中删除是否更好?我喜欢这样。有没有一种方法可以设置一个用户帐户来读取rig
DELETE FROM tbl_Test; SELECT * FROM tbl_Test