为了更好的理解,SQL查询 中如何控制表权限、列权限、行权限、脱敏规则,写了几个示例进行说明。
1、3个选项必须要开启:
## 原生SQL数据集数据权限
## 原生SQL数据集数据权限 ,系统默认值false
RAW_SQL_APPLY_ROW_PERMISSIONS=true
## 原生SQL数据集资源权限
## 原生SQL数据集资源权限,系统默认值false
RAW_SQL_APPLY_ROW_PERMISSIONS_CHECK_TABLE=true
## 原生SQL数据集脱敏规则
## 原生SQL数据集脱敏规则,系统默认值false
RAW_SQL_APPLY_MASKING_RULE=true
2、具体设置项说明:可查看SQL查询/数据集支持权限控制。
3、更改了设置项值,需要重新启动服务器才能生效。
为了方便讲解示例,先创建一个用户:VerifyUser 密码是1 ,角色:VeriyRole,再给VerifyUser 分配了角色:VeriyRole;如何创建用户、角色可查看:用户管理。
设置操作权限:
1 表权限:某个"表"没有查看、引用权限示例
1、创建了一个演示使用的northwind 库,并通过"数据库管理” ,选择”products“、”categories“、”orders“、”orderdetails“
2、使用admin(有权限的账号,这里为了演示说明用admin) 账号,给”products“设置资源授权;打开资源授权页面可以看到直接从父节点继承了权限,有一个EveryOne的角色,需要把它删除掉,删除操作方式如下:
删除掉的效果,确保VerifyUser 或VeriyRole不在里面,即VerifyUser 、VeriyRole角色对”products“没有引用、查看权限:
3、确认好权限之后,使用VerifyUser 用户登录,并去创建数据模型,添加 SQL查询,在SQL查询中,查询”products“表:
执行、保存时会提示:没有查看权限。
如果用户对表或者字段有 引用 权限,但是没有 查看 权限,如果需要控制不能查看数据,可以开启:
## 原生SQL数据集资源权限
## 原生SQL数据集资源权限,引用表、字段必须有查看权限,系统默认值false
RAW_SQL_APPLY_REFS_REQUIRE_READ_PURVIEW=true
开启之后,”执行时“会抛出异常,但是能正常保存。
原因:是由于产品本身有 引用 权限就能查看数据,该控制项仅仅只是控制数据安全性,用户无法在 SQL查询 中随意输入表、字段 查找没有 查看 权限的数据。
2 列权限:表中字段没有引用、查看权限
1、基于示例1 添加的”categories“表,通过表的设置资源授权,确认”VerifyUser“用户否有引用、查看权限:
表有权限之后,再确认”categoryName“字段是否有引用、查看权限,如果有的话要把”VerifyUser“从列表中删除:
2、确认好权限之后,使用VerifyUser 用户登录,使用去创建数据模型,添加 SQL查询,在SQL查询中查询”categories“表:
执行时:会提示对”categoryName“没有引用权限;但是可以保存成功。
保存成功之后,在数据模型预览或再报表层查看效果:
3 行权限:SQL查询继承源表设置的行权限
1、使用admin(有操作权限的账号即可,这里为了演示说明用admin) 账号登录,基于示例1 添加的”orders“表设置行权限,设置行权限,详情可查看:详情。
设置行权限,这里使用简单模式,使 VerifyUser 用户只能查询 ShipRegion=华南 的数据
2、设置好行权限,使用 VerifyUser 登录系统,使用去创建数据模型,添加 SQL查询,在SQL查询中查询”orders”表
执行成功之后,可以看到VerifyUser 只能查看 华南 的数据:
在报表层也是一样:
4 继承脱敏规则:SQL查询继承源表"字段"设置的脱敏规则
1、使用admin(有操作权限的账号即可,这里为了演示说明用admin) 账号登录,基于示例1 添加的”orderdetails“表创建脱敏规则,脱敏规则创建,详情可查看:详情:
创建脱敏规则,需要选择数据源下面”Quantity“字段,设置脱敏算法为:*;并且应用范围,设置为用户 VerifyUser 适用于此范围,保存。
2、创建好脱敏规则之后,使用VerifyUser 用户登录,使用去创建数据模型,添加 SQL查询,在SQL查询中查询”orderdetails”表
执行成功之后,可以看到Quantity字段变成了*,无法查看它真实的数据。