6

我在构建的应用程序的安全性方面遇到问题......它是水晶报表查看器的包装器,可为用户提供一些附加功能。

有许多内部用户能够创建/修改 Crystal Reports。我已经做了一些测试,对于一个如此密切地处理连接到各种数据源的应用程序,它似乎一点也不关心这样做是否安全。没有什么能阻止我修改每个人都信任的现有水晶报告,使其变成恶意和有害的东西。所需要的只是一个带有以下 sql 的添加命令表:

DELETE FROM tbl_Employees; SELECT FROM tbl_Employees;

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

我不是很有希望,因为我所读过的任何内容都没有让我相信我可以以这种方式限制连接。

另一方面,如果他们愿意,大多数制作报告的人可以采取更直接的方法来破坏我们的数据……但我认为这是一个很好的借口,不尽我所能确保我的应用程序尽可能安全。我似乎无法找到任何可行的答案。

4

2 回答 2

1

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

** 编辑 **

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

当报表运行时,您将在记录选择公式中添加一个行级过滤器。

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

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

于 2012-11-02T16:18:00.433 回答
0

好的,我将其作为答案,因为我仍然无法发布全球评论,但这是一个可以以某种方式帮助您的想法(我希望)。

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

好的,我很确定这对您来说没有什么新东西,但我的观点是:为了完成您正在寻找的内容,在 Oracle 环境中,您可以为每个用户使用数据库用户并控制对信息的访问(表格)通过那个(非常安全的)控件。

我很确定在 SQL Server 中,除了细微的差异之外,您可以执行相同的策略。希望这会引导您对解决该问题提出一些想法...

于 2012-11-17T02:17:09.330 回答