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

postgresql - Postgres 9.5 和 BDR 以及 RLS

我正在使用 postgres 实现一个多租户 Web 应用程序。我想使用行级安全性 (RLS) 进行数据分离。RLS 从 PG 版本 9.5 开始可用。但是,与此同时,HA/DR 团队计划使用 BDR(双向复制)作为 HA 解决方案。9.5 似乎还不支持 BDR。

  • 在这种情况下可以做什么?
  • 是否有可能在 9.5 上获得 BDR?
  • 还有哪些其他复制策略可以提供与 BDR 相同的好处?

是的,模式也是一种方法,但我已经将它用于数据较少的表。我希望 RLS 用于最终会变得巨大的表,因此将它们复制到不同的模式中并不理想。

注意:从 dba.stackexchange 交叉发布,因为没有人在那里回复..

0 投票
0 回答
714 浏览

performance - 行级安全查询计划比相同的非 RLS 查询慢 45 倍

我在让查询计划程序为启用行级安全 (RLS) 的表编写好的计划时遇到了一些麻烦。似乎只需要从启用行级安全性的表连接到启用非行级安全性的表即可强制执行错误的计划,即使规划器应该能够使用两个表上的适当索引。

有没有办法帮助规划师解决这个问题?或者当涉及 RLS 时某些统计数据不可用?

我尝试USING (TRUE)为不需要 RLS 的表启用 RLS(添加一个广泛开放的策略),这与不在该表上包含策略具有相同的效果。

结果是

我上线了

更新 1:

我在 WHERE 子句中使用 RLS 谓词运行查询,例如

它产生了一个更好的查询计划。但是当我删除这个额外的谓词时,计划者保留了更好的计划。这让我认为统计数据有问题..有人知道如何在不重置整个数据库的统计数据的情况下手动触发统计数据更新吗?现在自己浏览 Postgres 文档...

更新 2:

尝试设置全局和表级统计限制无济于事。能够使用子选择而不是使用类似查询的连接来获得正确的查询计划,因此可以使用该技术作为解决方法。

0 投票
1 回答
461 浏览

c# - 在 SQL Server 2016 中的 NHibernate 中实现级别安全性

我正在尝试使用 Nhibernate 在 SQL Server 中实现行级安全性。我想使用这种方法:https ://azure.microsoft.com/en-us/documentation/articles/web-sites-dotnet-entity-framework-row-level-security/ 。

我在 nhibernate 中创建了一个拦截器:

我以这种方式将它附加到会话中:

而且我在 SQL Server 中有以下代码:

所以我认为我做的一切都是正确的。但是当我从我的应用程序运行查询时,我从来没有收到任何行。当我复制完全相同的 SQL 代码并从 SQL Server Management Studio 运行它时,一切正常,我得到了预期的行。

谁能帮我?我不知道我做错了什么。

0 投票
1 回答
953 浏览

sql-server - “SESSION_CONTEXT”不是可识别的内置函数名称 - SQL Server

我有一个 Azure SQL 数据库。我正在尝试在 SQL Server Management Studio 2016 上执行以下查询:

我收到以下错误:

我正在关注这个行级安全教程:https ://github.com/Azure/azure-content/blob/master/articles/app-service-web/web-sites-dotnet-entity-framework-row-level-security .md

0 投票
1 回答
421 浏览

python - 模型表单的 Django 行级别锁定

我正在使用 Python 3.5、Django 1.8 和 PostgreSql 9.4。

所以我有一种编辑方法,在获取请求中我正在呈现表单,当用户提交表单时它会得到更新。她的密码

现在我想在其上添加行级锁定,例如如果一个用户同时更新某些内容,除非先前的事务成功,否则其他用户将无法更新任何内容,或者如果有人有任何其他更好的建议,而不是使用悲观锁定。

我知道select_for_update但不知道在以下情况下如何实施form.save()

任何帮助将非常感激

0 投票
0 回答
303 浏览

triggers - 在内存优化表 SqlServer 上更新错误之后

使用 EF 6.1.3、SqlServer 2016。我最近将数据库中的某些表修改为内存优化表。一切正常,但是,当我在非内存优化表上添加更新后触发器时,我收到以下错误。

SQL Server 断言:文件:<"d:\b\s1\sources\sql\ntdbms\hekaton\engine\core\tx.cpp">,行=7434 断言失败 = '!(tx->ErrorObject != nullptr) || (err == nullptr || tx->TempTableTx)'。此错误可能与时间有关。如果重新运行语句后错误仍然存​​在,请使用 DBCC CHECKDB 检查数据库的结构完整性,或重新启动服务器以确保内存中的数据结构没有损坏。

注意:表上有一个用于行级安全性的谓词,它确实使用内存优化表。

有没有其他人遇到过这个/找到了解决方案?

谢谢!

0 投票
2 回答
5714 浏览

c# - 实体框架 - 使用 IDbConnectionInterceptor 设置 session_context

我正在关注本教程,以便通过 Entity Framework 6 CodeFirst 在 SQL Server 中使用行级安全性。教程代码示例展示了如何使用 IDbConnectionInterceptor 并在session_context. HttpContext.Current.User.Identity.GetUserId()要检索用户 ID,它使用与 Asp.Net 身份和 System.Web 命名空间相结合的静态访问器方法。

在我的多租户 Web 应用程序中,我希望将tenantId注入到DbConnectionInterceptor使用 Unity 中(不创建与 的硬耦合HttpContext)并在session_context. 我发现DbConnectionInterceptor需要在全局范围内注册(例如在应用程序启动时),因此您不能让 UnityDbConnectionInterceptor为每个请求创建实例。

我的解决方案中还有 2 个 DbContext,代表 2 个不同的数据库(租户数据库和系统数据库),我只想应用session_context到租户数据库。

看来我剩下的唯一选择是DbContext通过 Unity将tenantId 注入到DbContext实例中Opened(),并在DbConnectionInterceptor. 为此,我想到了interceptionContext在方法中使用参数Opened()interceptionContext有一个DbContexts(复数)属性。没有这方面的文档,所以我认为这样的事情会起作用:

我的代码检查 DbContexts 集合是否包含TenantDataContext作为第一个元素并执行sp_set_session_context. 但我担心的是两个 DbContext 是否有机会同时存在?如果是这种情况,与我的其他数据库的连接也会设置session_context我不需要的。我想知道为什么 Microsoft 将其作为集合属性而不是单个DbContext属性提供。这个属性让你想知道多个 DbContext 是否可以使用同一个连接。

有没有人实现了我想要的?关于这个 interceptionContext 的任何解释对我也有帮助。

0 投票
1 回答
1657 浏览

node.js - 如何在 Mongo DB 上实现行级安全性 (RLS)

我们可以使用 node js 或其他东西在 Mongo Db 上实现行级安全性吗?它是否称为 MongoDb 上的文档级安全性?有没有人有这样的例子或文件?

0 投票
0 回答
557 浏览

postgresql - Postgresql 多租户模式不使用索引

解释没有策略的计划输出

使用多租户策略

没有启用多租户策略,Postgresql 使用索引,而在启用策略后,它不使用索引,无论是 PKey 还是我创建的任何其他索引

Postgresql 中需要哪些设置才能使用我们在启用行级安全性时创建的索引。

0 投票
1 回答
9135 浏览

sql - postgres 中的行级安全性 (RLS) 性能明显较慢。

描述:这是性能问题的示例演示。

我们首先创建了两个表,启用了行级安全性并创建了策略。

表定义:

索引创建:

启用行级安全性:

创建角色:

创建策略:我想要一个策略来选择其中tenant_id 列值具有与已登录用户相同的角色的数据。

创建样本数据:

问题:下面的查询没有使用 primary_key 索引。

问题:如果我禁用 RLS 则使用主键索引。为什么启用 RLS 时不使用主键索引扫描?

注意: A.
如果我禁用行级安全性并运行上述查询,它将使用索引。
B.下面是禁用低级安全性时的解释计划输出。

C.如果我启用低级安全性并运行它不使用索引的查询。
以下是启用低级别安全性时的解释计划输出。

请帮我解决这个问题..