我可以人为地限制用户的sql权限只能读取我的应用程序的任何连接吗?

Chr*_*ide 6 c# sql crystal-reports

我正在构建一个关于我正在构建的应用程序的安全性的问题......它是一个水晶报表查看器的包装器,为用户提供了一些额外的功能.

有许多内部用户可以创建/修改Crystal Reports.我已经做了一些测试,对于一个与各种数据源连接非常密切的应用程序,它似乎并不关心安全这样做.没有什么可以阻止我修改现有的水晶报告,每个人都相信它会变成恶意和有害的东西.只需添加一个带有以下sql的命令表:

DELETE FROM tbl_Employees; SELECT FROM tbl_Employees;
Run Code Online (Sandbox Code Playgroud)

实际上,您可以在用户有权执行的水晶报表中执行任何操作...只要它以选择结束即可.这引出了我的问题:我有什么方法可以确保我的应用程序限制我们的SQL服务器的任何连接只选择?我不能暂时修改用户凭据,并且我不能使用单个只读帐户,因为我仍然需要将用户限制为他们的正常权限(即他们可以查询哪些数据库).

我不是很有希望,因为我读过的任何内容都让我相信我可以用这种方式限制联系.

另一方面,如果他们如此倾向,那么制作报告的大多数人都可以采取更直接的方法来破坏我们的数据......但我几乎不认为这是一个不利于确保我的应用程序尽可能安全.我似乎无法找到任何可行的答案.

cra*_*aig 1

您应该使用只读帐户进行报告——无一例外! 授予帐户访问表和视图的 SELECT 权限以及 EXEC 权限函数(通过同义词公开)。如果可能的话,避免使用过程——它们通常是不必要的,并且您可能会无意中让用户访问修改数据库的过程(我的客户遇到过这种经历)。

** 编辑 **

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

当报表运行时,您可以将行级筛选器添加到记录选择公式中。

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

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