【发布时间】:2011-04-30 21:05:38
【问题描述】:
我们在 Oralce 上使用 CR XI。我们在 DB 中应用 RLS(行级安全性)。 RLS 将基于我们在会话中设置的信息(通过调用 trans_pkg.set_username('abc'))来决定哪些数据行可以出现在数据集中。但 CR 似乎与 Oracle 有自己的联系。我们无法在 CR 查询数据之前运行如下包:trans_pkg.set_username('abc')。 它现在是我们系统的最大安全风险。 如果您有任何解决方案,请帮助我。
【问题讨论】:
-
在用于驱动 Crystal Report 的 Oracle 存储过程中调用
trans_pkg.set_username('abc')怎么样? -
你的意思是在 CR 中添加一个命令,比如 select trans_pkg.set_username('abc') from dual?如果我们在 CR 中有很多查询,每个查询将使用相同的 Oracle 会话还是自己创建?
-
嗨 OMG Ponies,如果查询在所有查询中首先从双重运行中选择 trans_pkg.set_username('abc'),则您的解决方案是正确的。但是如何确保这个查询总是先运行呢?
-
我认为您可以通过在报表标题中创建子报表来使其首先运行。你可能不希望它显示任何东西,但你不能抑制它,所以使用覆盖。 (自从我使用 Crystal Reports 已经一年了,我不确定这个确切的解决方案是否有效,但我知道我以前使用过类似的东西。)另一种方法是使用流水线函数作为表格,并在选择和管道行之前调用包。这听起来很复杂,但在 Oracle 中完成这一切通常比进行奇怪的 CR 格式化要好得多。
-
嗨 jonearles,你能告诉我与你的第二个解决方案相关的链接吗?在您的第一个解决方案中,我们尝试了它,但问题是如何确保此查询在加载 CR 时首先运行?
标签: c# oracle crystal-reports