C# 我是否可以人为地限制用户';对来自我的应用程序的任何连接的sql权限是否为只读?

C# 我是否可以人为地限制用户';对来自我的应用程序的任何连接的sql权限是否为只读?,c#,sql,crystal-reports,C#,Sql,Crystal Reports,我正在构建的应用程序的安全性有问题。。。它是crystal report viewer的包装器,为用户提供一些附加功能 有许多内部用户能够创建/修改Crystal报表。我做了一些测试,对于一个与连接到各种数据源密切相关的应用程序,它似乎一点也不关心安全性。没有什么能阻止我修改一份所有人都信任的现有crystal报告,使之成为恶意和有害的东西。只需添加一个具有以下sql的命令表: DELETE FROM tbl_Employees; SELECT FROM tbl_Employees; 事实上,

我正在构建的应用程序的安全性有问题。。。它是crystal report viewer的包装器,为用户提供一些附加功能

有许多内部用户能够创建/修改Crystal报表。我做了一些测试,对于一个与连接到各种数据源密切相关的应用程序,它似乎一点也不关心安全性。没有什么能阻止我修改一份所有人都信任的现有crystal报告,使之成为恶意和有害的东西。只需添加一个具有以下sql的命令表:

DELETE FROM tbl_Employees; SELECT FROM tbl_Employees;
事实上,您可以在crystal报表中执行用户有权执行的任何操作。。。只要它以select结尾。这就引出了我的问题:我有没有办法确保我的应用程序将与sql server的任何连接限制为只允许选择?我不能临时修改用户凭据,也不能使用单个只读帐户,因为我仍然需要将用户限制为其正常权限(即,他们可以查询哪些数据库)

我不是很有希望,因为我读到的任何东西都没有让我相信我可以以这种方式限制联系


另一方面,大多数做报告的人可以采取更直接的方法来销毁我们的数据,如果他们愿意的话。。。但我不认为这是一个不尽全力确保我的申请尽可能安全的好借口。我似乎找不到任何可行的答案。

您应该使用只读帐户进行报告——没有例外授予帐户对表和视图的选择权限以及EXEC权限函数(通过同义词公开)的访问权限。尽可能避免使用过程——它们通常是不必要的,您可能会无意中让用户访问修改数据库的过程(我的客户机遇到过这种情况)

**编辑**

我想这也取决于敏感数据的表示方式

在运行报告时,您将向记录选择公式中添加行级筛选器

如果敏感数据包含在少量表中,则可以使用基于角色的安全性(用户添加到组;角色分配到组)


如果您使用的是BusinessObjects Enterprise,则可以使用Universe来控制数据安全性。BusinessView也是一种选择;它们是原始的(在BusinessObjects和SAP之前)语义层,支持动态/级联参数,但它们已被淘汰。

好的,我把这作为一个答案,因为我仍然无法发布全局评论,但这是一个可以在某种程度上帮助您的想法(我希望如此)

我在SQL Server方面没有Oracle DBs方面的丰富经验。在OracleDBS中,每个用户都有自己的空间。每个用户只能读取和修改其空间(模式)内的DB对象(表和其他对象),没有例外。然后,您可以为每个用户授予对其自己模式之外的特定对象的访问权限,这是一种合格的访问权限(如“只读”、“仅更新”等)。为了更容易地维护这些授权,您可以创建角色,这些角色基本上是可以分配给特定用户的命名授权组

好的,我很确定这对您来说并不是什么新鲜事,但我的观点是:在Oracle环境中,您可以为每个用户使用DB用户,并通过(非常安全的)控制来控制对信息(表)的访问


我很确定,在SQL Server中,除了一些细微的差异外,您还可以使用相同的策略。希望这能为您带来一些解决问题的思路……

crystal是如何连接到db的?这些用户还可以使用查询工具(SSMS、WinSQL等)删除/销毁数据。你能让DBA对这个概念感兴趣吗?@Marc B:Crystal Reports使用用户的权限。我可以使用一个特殊的用户帐户拦截和处理报表的数据请求来构建我的应用程序,但是我仍然需要将结果限制在用户的权限内。我唯一的想法是使用只读版本镜像每个用户,但这将是一个维护地狱,而且非常难看。@David:sql用户帐户拥有完成其作业功能所需的权限。在许多情况下,这包括更新/删除。每个工作环境都需要一定程度的信任。。。但是具有只读权限的用户可以修改报表以删除记录,只需等待具有正确权限的用户出现并运行报表。如果查询字符串不是以“选择”开头(或者如果不是以“选择”开头),应用程序是否可以对查询字符串进行模式匹配并拒绝运行报表出现在分号之后)?我如何确保Johnny不能创建一个查看他不应该看到的敏感信息的报告?我仍然需要确保个人用户仍被限制在其允许的数据库内。一个只读帐户无法将其删除。。。为每个用户创建只读版本将是维护的噩梦……您的报告是如何部署的?通过你的申请?BusinessObjects企业?