首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在trino中,我一直被“拒绝访问:无法从表system.jdbc.tables`中选择”

在trino中,我一直被“拒绝访问:无法从表system.jdbc.tables`中选择”
EN

Database Administration用户
提问于 2021-09-27 15:18:35
回答 2查看 2.6K关注 0票数 2

我刚刚创建了一个新的用户dataengineer和用户组data-engineer

当我尝试使用dbeaver连接用户dataengineer时,我得到以下错误。

代码语言:javascript
复制
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的同一个用户进行连接时,我会得到以下错误

代码语言:javascript
复制
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文件的样子

代码语言:javascript
复制
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": ".*"
    }
  ]
}
EN

回答 2

Database Administration用户

发布于 2021-09-27 15:18:35

这与trino授权系统的工作方式有关。

git发行上摘取

您需要在目录级别、架构级别和表级别创建策略,以确保访问。访问确定不会深入到较低的级别。默认策略是拒绝,因此,第一次检查实际上将导致访问被拒绝。

因此,因为我没有为数据工程师组定义表级权限,所以默认拒绝。

我通过在表规则中添加以下内容来修正这个问题。

代码语言:javascript
复制
  "tables": [
    {
      "group": "data-engineering|data-platform-admin",
      "privileges": ["SELECT", "INSERT", "DELETE", "OWNERSHIP", "GRANT_SELECT"],
      "catalog": ".*",
      "schema": ".*"
    },

我把它放在数据科学规则之前,因为规则是按顺序评估的,我希望数据工程组的用户比数据科学组的用户获得更多的访问权限。但是,可以通过复杂的LDAP用户查询和组匹配在两个组中定义相同的用户。我进行了测试,这就像我期望的那样起作用。

票数 2
EN

Database Administration用户

发布于 2023-05-22 14:17:35

谢谢你的回答。我正面临一个类似的问题,但我正在目录级别上这样做,并想知道如何才能授予用户对单个表的访问权限并避免此错误?是否可以创建系统目录访问文件?

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/300220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档