标签: row-level-security

Postgresql 行级安全性根据手动插入的 WHERE 子句生成不同的查询计划

(从我的帖子复制到 postgresql 邮件列表https://www.postgresql.org/message-id/CADBa3wZpuYXwdry2g68NxYmAXOPvx0DLvdAU4kdo2GoPtxKu+Q@mail.gmail.com。不幸的是,我需要至少 10 声誉才能发布 2 个以上链接,因此请参考到原始帖子以获取更多链接)

问题的基本摘要:在 12GB 表中的一列上使用行级安全过滤器会导致位图堆扫描缓慢,而不是作为表所有者执行的查询所使用的快速索引扫描(没有任何行级安全过滤器)。安全)。手动写入过滤条件也可以实现快速索引扫描。比照。https://gist.github.com/charles-cooper/abccf41ce5a1175635414321622fba57查看本文中的所有代码。

表说明如下:

 Table "data.sm2dvmoam"
  Column   |            Type             | Modifiers | Storage | Stats target | Description 
-----------+-----------------------------+-----------+---------+--------------+-------------
 item      | smallint                    | not null  | plain   |              | 
 secid     | integer                     | not null  | plain   |              | 
 startdate | timestamp without time zone | not null  | plain   |              | 
 enddate   | timestamp without time zone |           | plain   |              | 
 value_    | real                        |           | plain …
Run Code Online (Sandbox Code Playgroud)

performance execution-plan row-level-security postgresql-9.5 query-performance

5
推荐指数
0
解决办法
476
查看次数

行级安全性 Microsoft SQL Server 的优缺点

行级安全的优缺点是什么?

我们正在将数据库从桌面应用程序移植到网络应用程序,并想知道确保敏感数据受到保护的最佳方法。

对于我们的应用程序,登录系统的用户数量是有限的,例如受信任的承包商而不是公众成员。

我们当然可以编写查询以逐个检查权限,或者设置行以便只有该组织的承包商才能看到该行。

使用什么标准来决定什么是最佳实践?

sql-server row-level-security

4
推荐指数
1
解决办法
5536
查看次数

优化 Postgres 中的行级安全表达式

我有一个包含数百万行的表,分为几个类别(比如数字 1-5)。访问数据库的应用程序使用一个单一的数据库帐户。但是,该应用程序有自己的用户帐户,每个应用程序用户只能访问某些类别。因此,允许的类别列表通过会话变量传递给数据库:

SET SESSION mydb.allowed_categories = '1,3,5';
Run Code Online (Sandbox Code Playgroud)

我使用 RLS 根据会话变量过滤行:

CREATE POLICY table_select_policy ON big_table
FOR SELECT
USING (ARRAY[category] && string_to_array(current_setting('mydb.allowed_categories'),',')::int[]));
Run Code Online (Sandbox Code Playgroud)

问题在于,使用这种方法,RLS 行过滤需要花费大量时间。另一方面,当我通过以下方式进行实验时:

CREATE POLICY table_select_policy ON big_table
FOR SELECT
USING (category = 1 OR category = 3 OR category = 5);
Run Code Online (Sandbox Code Playgroud)

RLS 过滤几乎快了 10 倍。当然,这种硬编码是行不通的,因为我想在应用程序中动态更改允许的类别列表。

category列有一个 btree 索引,但是由于类别的数量相当少,查询计划器总是倾向于对 RLS 过滤器进行顺序扫描。

所以我的问题是 - 有没有办法优化 RLS 表达式,使其至少更接近硬编码方法?你会建议一个不同的解决方案吗?该应用程序有很多用户,所以我不想为每个用户都创建一个数据库帐户。

postgresql security optimization row-level-security

3
推荐指数
1
解决办法
2525
查看次数

SQLServer 行级安全性 - 从数据库内实施

在单个 SQL Server 2016 数据库上运行多租户应用程序。我有一个 RLS(行级安全性)谓词customer_id(每个租户唯一)并且该列存在于所有表中。

CREATE FUNCTION dbo.[RLSPredicate] (@CustomerId bigint)
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN SELECT 1 AS RLSPredicateResult WHERE (@CustomerId = 
CAST(SESSION_CONTEXT(N'customer_id') AS bigint))

GO

 -- two table example
 CREATE SECURITY POLICY [dbo].[RLSPolicy] 
 ADD FILTER PREDICATE [dbo].[RLSPredicate] ([customer_id]) ON [dbo].[user],  
 ADD FILTER PREDICATE [dbo].[RLSPredicate] ([customer_id]) ON [dbo]. 
  [user_email]
  WITH (STATE = ON, SCHEMABINDING = ON)
  GO

  -- Sample Query 
  EXEC sp_set_session_context @key=N'customer_id', @value='1231312'
  select top 1000 * from [user] where customer_id = 1231312
Run Code Online (Sandbox Code Playgroud)

使用上面的设计,EXEC …

sql-server row-level-security sql-server-2016

3
推荐指数
1
解决办法
381
查看次数

Oracle 行级安全设置?

如何配置表,以便用户可以修改该用户“拥有”的行,但不能修改其他用户“拥有”的行?

oracle row-level-security

1
推荐指数
1
解决办法
299
查看次数