gpt4 book ai didi

sql-server - 同一个表上的多个安全谓词 (FILTER|BLOCK)

转载 作者:行者123 更新时间:2023-12-05 05:19:22 24 4
gpt4 key购买 nike

我正在对我的数据库实现 RBAC-RLS 安全性,但我有一个问题。这是场景:

我有一个函数,它有一个输入参数 @PermissionId,它检查登录的用户是否拥有该权限。数据库中的每个角色都关联了多个权限,每个用户可以拥有多个角色。

假设我有一个表 Products,我希望只有拥有 ReadProducts 权限的用户才能查看表的内容。

CREATE SECURITY POLICY ReadProducts
ADD FILTER PREDICATE HasPermission('ReadProducts') ON Products

没关系,但现在我也有权限 SystemAdministrator 并且他还需要有权限查看 Products 表的内容。

如果我添加另一个策略

CREATE SECURITY POLICY ReadProducts
ADD FILTER PREDICATE HasPermission('SystemAdministrator') ON Products

它会像预期的那样工作吗,或者这两个政策之间是否会发生冲突?

或者其他情况,如果我在第一个策略中添加另一个过滤谓词会怎么样。所以它会像:

CREATE SECURITY POLICY ReadProducts
ADD FILTER PREDICATE HasPermission('ReadProducts') ON Products
ADD FILTER PREDICATE HasPermission('SystemAdmin') ON Products

这会好吗?我的意思是,如果我作为用户拥有这两个权限之一,我是否能够看到 Products 表的内容?

最佳答案

我想通了。所以这里是:

你不能在同一个数据库表上有 2 个安全策略,它不会让你创建第二个。 - 你会得到一个错误。

此外,在同一个安全策略的同一个表上不能有 2 个 FILTER 谓词。 - 你会得到一个错误

解决方法:使用 1 个过滤器和 3-4 个 block 谓词为数据库中的每个表创建安全策略,如下所示:

CREATE SECURITY POLICY [Log]
ADD FILTER PREDICATE [dbo].[HasSecurityPermission]('ReadLog') ON [dbo].[table],
ADD BLOCK PREDICATE [dbo].[HasSecurityPermission]('AddLog') ON [dbo].[table] AFTER INSERT,
ADD BLOCK PREDICATE [dbo].[HasSecurityPermission]('EditLog') ON [dbo].[table] BEFORE UPDATE,
ADD BLOCK PREDICATE [dbo].[HasSecurityPermission]('RemoveLog') ON [dbo].[table] BEFORE DELETE

所以你需要为每个数据库表提供 4 个权限,最后你创建与用户类型(公共(public)用户、演示、系统管理员、 super 用户......)一样多的角色,并将它们与你希望他们拥有的权限相关联.

就是这样!

关于sql-server - 同一个表上的多个安全谓词 (FILTER|BLOCK),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46324385/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com