问题标签 [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 投票
1 回答
313 浏览

postgresql - 行级安全,不明确的引用

我正在尝试在 postgres 中创建一个导致column reference "person_id" is ambiguous.

为了做一个类似的小例子,让我们描述 3 个表:person、group 和 group_member。

个人有:id、姓名
组有:id、person_id 和姓名 组员
有:id、person_id、group_id

我已经简化了我的策略,但相关部分看起来像这样:

在这种情况下,person_id 可以从子选择中引用 group.person_id 或 group_member.person_id,但我真正想要的是来自“with check”的 person_id。这通常在其他地方有效。

问题:有没有办法明确指定 person_id 列来自策略,而不是来自 select 或 join。注意:我原以为表名的别名可以解决这个问题,但似乎没有。

0 投票
2 回答
7782 浏览

spring - 如何使用休眠过滤器或其他方式在 Spring Data jpa 中实现行级安全性?

信息软件中非常重要的问题之一是存在具有不同职责和访问级别的不同角色的用户。例如,考虑一个具有如下结构(层次结构)的组织:

想象一下,这个组织有一个管理人员信息的系统。本系统显示人员信息的规则是每个用户都可以看到他所访问的组织的人员信息;例如,“user1”可以访问“财务助理”和“商务助理”级别,所以他只能看到“人员 1”和“人员 3”的信息。同样,'user2'只有'Commercial Assistant'级别的权限,所以他只能看到'personnel 3'的信息。因此,该系统中的每个用户都有特定的访问级别。现在考虑在这个系统中,每个用户在登录后只能看到他可以访问的人员信息。那么这个系统的表结构是这样的:

以下查询足以为每个用户获取正确的人员信息结果:

如我们所见,以下条件定义了显示正确数据的访问逻辑:

这种访问级别也称为“行级别安全性”(RLS)。另一方面,相应的存储库类可能有几个负责读取数据的方法,所有这些方法都必须满足适当的访问级别条件。在这种情况下,访问级别条件将在某些地方(方法)重复。似乎使用“休眠过滤器”将是解决此问题的正确方法。唯一需要的是一个过滤器,它获取经过身份验证的用户的 id 并在每个读取方法之前执行“启用过滤器”命令。

现在的问题是,建议的解决方案是否正确?如果是,如何在spring数据中使用这种方法?PS:鉴于我们不想依赖数据库,数据库端的实现不可能是一个候选的解决方案,因此我们有义务在应用端(级别)实现它。

0 投票
3 回答
1169 浏览

mysql - MySQL phpmyadmin - SELECT FOR UPDATE 无法识别

我正在编写一个 PHP 程序,并希望实现行级锁定以避免并发用户更新/删除同一记录。

但是我在使用 SELECT FOR UPDATE 时遇到错误“无法识别的关键字”。表类型是 innoDB。

我错过了我的数据库的任何设置吗?

我的 SQL 语句

SQL 错误

错误
静态分析:

分析时发现1个错误。

无法识别的关键字。(靠近位置 57 的“FOR”)
SQL 查询:文档

MySQL 说:文档

0 投票
1 回答
665 浏览

sql-server - 更改受 RLS (SSDT) 保护的 MSSQL 表

在 MSSQL 2016 中向受行级别安全保护的表添加新列时,尝试使用 SQL Server Data Tools 发布数据库时出现以下错误:

当前操作将导致表 X 上的数据移动。无法在此表上执行数据移动,因为它具有策略 Y 启用的行级安全性。要允许此操作,请使用带有选项 /p:AllowUnsafeRowLevelSecurityDataMovement 的 SqlPackage.exe

我怀疑它想要重新创建表,如果 RLS 谓词未授予部署用户对数据的访问权限,这可能会导致数据丢失。但是我找不到任何关于此的文档。

更重要的是,处理这种部署场景的最佳实践是什么?

0 投票
1 回答
308 浏览

postgresql - 一张桌子上的 Postgres RLS 不一致

我在多租户模型中使用 RLS。我启用的前几个表没有问题。然后我将 RLS 添加到一个新表中,突然我无法在该表中插入记录。

这是一个有效的表:

以及相关的功能:

这是失败的表:

以及相关的失败功能:

current_vendor_id函数使用由服务器传入的 jwt 令牌声明,它是 postgraphile。
在插入语句中,调用失败并显示:

这些信息就是日志将显示给我的全部信息。

我认为我真正的问题是 - 我如何进一步调试 RLS 策略?如果我只启用 RLS,但没有创建选择策略,我会遇到同样的失败。

0 投票
1 回答
1474 浏览

postgresql - Postgresql 行级安全性检查 INSERT 策略中 WITH CHECK 中的新数据

我有一个包含多个表的数据库。一个用户有几个对象,一个对象有几个部分。

我想编写一个策略,只允许对象的创建者向对象添加部分。因此我需要获取要插入的部分所属的对象,但我不知道如何检查数据。

有没有办法让数据插入到策略中?

谢谢你的努力。

0 投票
1 回答
159 浏览

c# - 在继承的表中实现行级安全列

我正在使用具有代码优先方法的实体框架来生成数据库。我在 SQL Server 中引入了行级安全性。

我想创建 3 个表,所有常见的属性都在其中,ItemVersion并记录相关属性DocumentVersion并形成与FormVersion某某相关的事物。我应该TenantId在所有 3 个表中引入行级安全列。

当我生成数据库时,它不会创建TenantId子类 - 该列TenantId仅在ItemVersion表中创建。

我该如何处理这种情况?有什么解决方法或建议吗?

0 投票
2 回答
1704 浏览

sql - 启用 RLS(行级安全性)时,PostgreSQL 查询不使用 INDEX

我正在使用PostgreSQL 10.1,直奔主题...

可以说我有一张桌子

连同上面的GIN INDEX

还有一个基本的全文搜索查询:

无论public.document表大小如何,查询(您已经知道)非常快!规划师使用 INDEX,一切都很好。

现在我通过RLS (Row Level Security)介绍一些基本的访问控制,首先我启用它:

然后我添加策略:

为了简单起见,is_current_user是另一个查询,它可以准确检查。

现在全文搜索查询document_policy 查询展平,通过这样做,规划器执行序列扫描而不是索引扫描,导致查询速度降低 300 倍!

我认为这个问题很明显,我该如何解决这个问题,以便全文搜索查询保持快速?

提前致谢!

0 投票
1 回答
434 浏览

sql - 撤销在 SA 上以用户身份执行的权限

微软 SQL 服务器 2016

我目前在具有基于用户名限制的数据库上使用行级安全性。这种安全性保护了存储应用程序级别设置的表上的行——即,如果您购买了它,您可以看到它,如果您是总部,您可以看到所有内容。

我遇到的问题是,如果您以 SA 身份登录,一个简单的“EXECUTE AS USER”调用允许模拟总部帐户。有没有办法阻止 SA 冒充特定用户?即使它的密码受保护或类似。

不管用。由于我们的客户自己托管 SQL,他们将始终拥有 SA 登录详细信息,并且任何拥有 SSMS 副本并稍微了解如何解决安全问题的人都可以轻松解决。通过模拟,甚至只是关闭安全策略。

我认为客户将拥有 SA 访问权限这一事实使这个想法无法启动,但我很想听听任何人对安全工作的任何建议。

非常感谢。

0 投票
0 回答
169 浏览

c# - 实体框架/Sql 2016 中多个用户的记录级安全性

我们需要在使用 Entity Framework 6.2 开发的应用程序中实现“谁看到了什么”访问。

一个简单的问题陈述是,我们有三个表 - UserDepartmentUserDepartments。在此一个用户可以访问多个部门。

你能给我们一个提示或参考吗?

我们在实体框架中遇到了多租户方法,但在这种情况下,它只是一对一的访问方式。部门表行将具有用户 ID,因此只能管理一个部门访问权限。

PS。没有共享任何代码,因为这是我们正在寻找的任何参考。