我刚刚创建了一个新的用户dataengineer和用户组data-engineer。
当我尝试使用dbeaver连接用户dataengineer时,我得到以下错误。
SQL Error [4]: Query failed (#20210927_124120_00084_kcmzr): Access Denied: Cannot select from table system.jdbc.tables
Query failed (#20210927_124120_00084_kcmzr): Access Denied: Cannot select from table system.jdbc.tables
Query failed (#20210927_124120_00084_kcmzr): Access Denied: Cannot select from table system.jdbc.tables
io.trino.spi.security.AccessDeniedException: Access Denied: Cannot select from table system.jdbc.tables
Access Denied: Cannot select from table system.jdbc.tables当我尝试使用来自trino cli的同一个用户进行连接时,我会得到以下错误
trino:jdbc> select 1;
_col0
-------
1
(1 row)
Query 20210927_143506_00011_m9sds, FINISHED, 1 node
https://trino.afsouth1ctcld.net/ui/query.html?20210927_143506_00011_m9sds
Splits: 1 total, 1 done (100,00%)
CPU Time: 0,0s total, 0 rows/s, 0B/s, 0% active
Per Node: 0,0 parallelism, 0 rows/s, 0B/s
Parallelism: 0,0
Peak Memory: 0B
0,34 [0 rows, 0B] [0 rows/s, 0B/s]
trino:jdbc> select * from system.jdbc.tables limit 10;
Query 20210927_144444_00018_m9sds failed: Access Denied: Cannot select from table system.jdbc.tables
io.trino.spi.security.AccessDeniedException: Access Denied: Cannot select from table system.jdbc.tables因此,用户可以连接到trino,但不能查询系统表。如果我与另一个名为数据科学的用户连接,它可以正常工作,不会出现任何问题。
这就是我的group.txt和rules.json文件的样子
group.txt: |-
data-science:datascience
data-engineer:dataengineer
rules.json: |-
{
"catalogs": [
{
"user": "dpadmin",
"allow": "all"
},
{
"group": "data-engineering|data-platform-admin",
"catalog": ".*",
"allow": "all"
},
{
"group": "data-science",
"catalog": "(iceberg)",
"allow": "all"
},
{
"group": "data-science",
"catalog": ".*",
"allow": "read-only"
},
{
"catalog": "system",
"allow": "none"
}
],
"schemas": [
{
"user": "dpadmin",
"schema": ".*",
"owner": true
},
{
"group": "data-engineering",
"schema": ".*",
"owner": true
},
{
"group": "data-science",
"catalog": ".*",
"schema": ".*",
"owner": false
},
{
"user": "guest",
"owner": false
}
],
"tables": [
{
"group": "data-science",
"privileges": ["SELECT", "INSERT", "DELETE", "OWNERSHIP"],
"catalog": "(iceberg)",
"schema": "(ds_scratch)"
},
{
"group": "data-science",
"privileges": ["SELECT"],
"catalog": ".*",
"schema": ".*"
}
]
}发布于 2021-09-27 15:18:35
这与trino授权系统的工作方式有关。
从git发行上摘取
您需要在目录级别、架构级别和表级别创建策略,以确保访问。访问确定不会深入到较低的级别。默认策略是拒绝,因此,第一次检查实际上将导致访问被拒绝。
因此,因为我没有为数据工程师组定义表级权限,所以默认拒绝。
我通过在表规则中添加以下内容来修正这个问题。
"tables": [
{
"group": "data-engineering|data-platform-admin",
"privileges": ["SELECT", "INSERT", "DELETE", "OWNERSHIP", "GRANT_SELECT"],
"catalog": ".*",
"schema": ".*"
},我把它放在数据科学规则之前,因为规则是按顺序评估的,我希望数据工程组的用户比数据科学组的用户获得更多的访问权限。但是,可以通过复杂的LDAP用户查询和组匹配在两个组中定义相同的用户。我进行了测试,这就像我期望的那样起作用。
发布于 2023-05-22 14:17:35
谢谢你的回答。我正面临一个类似的问题,但我正在目录级别上这样做,并想知道如何才能授予用户对单个表的访问权限并避免此错误?是否可以创建系统目录访问文件?
https://dba.stackexchange.com/questions/300220
复制相似问题