问题标签 [row-level-security]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
7755 浏览

c# - 实体框架的行级安全性

我一直在尝试考虑如何使用实体框架实现行级安全性。这个想法是有一个数据库不可知的手段,它将提供方法来限制来自 ObjectContext 的行。

我最初的一些想法涉及修改由 EDMGEN 工具创建的部分类,这提供了一些有限的支持。用户仍然可以通过使用他们自己的 eSQL 语句和 QueryObject 来绕过这个解决方案。

我一直在寻找一个存在于数据库提供者之上的综合解决方案,以便它保持不可知论。

0 投票
3 回答
3459 浏览

c# - 实施行级安全性——(SP 与 LINQ to Objects)

我相信这更多的是关于最佳实践和设计的问题。我尝试搜索与此相关的类似查询,但找不到任何查询。我实际上找到了带有实体框架的行级安全性,但我相信这里的上下文有点不同。

我将首先尝试解释我的情况:

我有一个 .net 3.5 网站,它使用通用业务库通过 NHibernate 访问我的 SQL 2008 数据库。所有代码都是 C#,使用 NHibernate 2.1。我的网站显示来自业务库的不同 IList 的负载,业务层通过 NHibernate 从 SQL 获取所有数据。所以,我可以有一个返回 IList 的方法,另一个返回 IList、另一个 IList 等的方法……关键是活动用户只能访问所有返回的一部分(几乎所有类型的结果集都必须从安全性中过滤),所以我需要在库上实现一个“数据过滤器”,它只将允许的数据行返回到网站。为了做到这一点,我网站上的 IPrincipal 被用于图书馆,这样我就可以获取用户详细信息来过滤数据,但是由于我们的安全模型非常复杂,将其扩展到我们所有的方法会产生巨大的维护问题。因此,为了解决这个问题,我们创建了几个 SQL SP,它们为当前用户返回允许的项目,在业务逻辑上,我们只需要将请求的数据与安全数据连接起来,我们就有最终的结果集要发送给用户。现在这个加入数据的过程是使用 Linq to Objects 我加入一个带有列表(安全)的 iList 只返回允许的结果集。IList 通过不同的方式来自 NHibernate,可以是 GetAll() 方法、ICriteria.List() 或 IQuery.List() 甚至是 NamedQuery.List(),并且安全数据始终来自其中一个两个 NamedQuery.List()。我还计划实现线程以允许同时和线程后调用 SQL。join() 在两个 IList 上执行 LINQ 连接。我在下面添加了一个示例代码来说明如何执行一个方法。

第二个选项,这就是我们试图摆脱的,是在 SQL 端实现 Join,让我们所有的调用都必须来自 SQL SP,它们将对安全结果进行连接,并且不允许业务代码获取NHibernate 功能的完整使用。

现在我的问题是,对于行级安全来说,这是一种糟糕的方法/实践(请记住,我们的安全模型非常复杂且可定制——这是通过业务设计实现的),还是我们正朝着正确的方向前进?我们还有其他选择吗?

在此先感谢,克莱顿

0 投票
1 回答
369 浏览

oracle - 当我使用谓词过滤后引用第一个表,然后在另一个表的第二个谓词中引用第一个谓词时,第一个谓词是否有效?

使用 Oracle VPD 工具(又名 RLS,又名 FGAC),假设我使用谓词

onTableA然后我使用谓词

TableB

会不会TableA被过滤?当您查询表时,过滤是否仅在谓词定义之外进行?我需要TableB像这样做谓词吗?:

0 投票
1 回答
809 浏览

oracle - 多租户应用程序中的 Oracle 行级别安全性/新记录的默认值

任务

改造现有应用程序以使用多租户方法。应该可以创建租户,并且每个用户的会话应该准确引用一个活动租户。每个租户应该只能看到和更新他的数据库模式分区。

方法

  • 创建一个包含租户 ID 的 Oracle 应用程序上下文
  • 将租户 id 列添加到应限定范围的任何表中
  • 创建一个谓词函数,为 SELECT、INSERT、UPDATE 和删除返回 "tenant_id = sys_context('tenant_context', 'tenant_id')"
  • 通过 dbms_rls 添加适当的策略来注册谓词函数

这就像一个魅力,而无需触及 SELECT、UPDATE 和 DELETE 的现有应用程序

问题

插入tenant_id 列时未设置并且出现安全异常。有什么方法可以像谓词函数一样流畅地始终设置安全相关字段?我宁愿不向 300 多个表添加触发器。

0 投票
3 回答
2546 浏览

c# - 独立于数据库的行级安全解决方案

有人知道 Java/C# 数据库独立授权库吗?该库应支持跨公司组织结构的读取、写入、删除、插入操作。

像这样:
- 用户可以查看所有文件
- 用户可以输入分配给他的单位的新文件
- 用户可以更改分配给他的单位和所有下属单位的所有文件。
- 用户可以删除分配给他的文档

我还应该能够创建自定义操作(除了读取、写入......)将它们连接到某个类并将该“安全令牌”分配给用户(例如 document.expire)。如果没有任何免费或商业图书馆,是否有书可用于实现此功能?

谢谢。

0 投票
1 回答
1819 浏览

oracle - 在 oracle 中更改或删除重新创建表是否会影响在其上定义的策略

如果我有一个表和一个已定义的策略,那么如果我删除并重新创建表或更改它,我是否需要重新定义策略,前提是更改或重新创建表不会更改函数需要查看的元素?

0 投票
1 回答
283 浏览

oracle - 寻找调试 Oracle 行级安全功能的技巧

我正在寻找在 Oracle 数据库中调试我的一些行级安全谓词的技巧。这些谓词使用一些概念来确定当前用户是否可以看到记录:

  • 当前用户的 Oracle 用户名
  • 当前用户分配的 Oracle 角色
  • 当前用户与一个或多个表中的记录的从属关系

我无法在真实数据上调试这种事情,因为我想不出一种好的方法来模拟实际看到特定用户可以看到的内容。所以,我正在寻找提示。这种事情有很好的基本框架吗?

这是我的谓词之一的示例:

0 投票
1 回答
909 浏览

sql - Oracle VPD如何引用表

我正在努力解决以下问题。我想使用 Oracle VPD 限制对表的访问。在选择策略函数返回的 where 子句中,我需要在子查询中引用表,如下所示:

(这个例子除了说明问题没有多大意义)

我无法控制查询的选择部分。

可以为该表指定任何别名或根本不指定别名。因此,我不知道如何在 where 子句中引用该表。有没有办法解决这个问题?

(甲骨文 10GR2)

0 投票
2 回答
343 浏览

php - Zend_Db_Select 行级安全性

我如何使用 实现行级安全性Zend_Db_Select?我能想到几个选项,但它们似乎不太适合这种模式。

假设我有users, content, 和许多不同的 ACL 级别。这是我想到的一个解决方案:

但问题是,如果您决定为不同类型的安全性添加另一个字段怎么办?所以,我想可能是这样的:

更好..但这也不太对劲。我想要的是更像这样的东西:

但这似乎有点太接近扩展或修改库以获得可能已经存在的东西,但我还没有完全看到它。

有没有其他人有这种需求,你是怎么解决的?

0 投票
2 回答
1151 浏览

cakephp - 如何在 cakePHP 中获取权限

首先,对不起我的语言能力,我不习惯用英语写作。;)
我正在尝试开发我的第一个 cakePHP 应用程序。

我正在尝试做的事情:

  • 用户在组中,并且组可以访问不同的位置。
  • 用户可以为此位置添加预订。

所以我的主要问题是找到获得用户权限的最佳方法:

  • 用户应该只看到他有权访问的位置。
  • 如果用户尝试为某个位置添加预订,我必须检查他对该位置的许可。
  • 等等

我也有版主和管理员,但我认为这是一个类似的问题。

那么,我怎样才能正确地做到这一点?ACL 似乎不是正确的方法 - 在大多数教程中,它控制对操作的访问,而不是对 db-rows 的访问。

我的数据库是什么样的:
我有一个用户表并使用 AuthComponent 来管理身份验证。这工作正常。

我有一个用户组的组表。

我有我的位置。

该表包含权限,哪个组可以访问哪个位置。

当然是预订表:

谢谢