Trino文件授权下创建角色遇权限问题及组角色配置咨询
Trino 角色与组配置解决方案
核心问题说明
你当前使用的**文件系统访问控制(File System Access Control)**不支持角色创建、角色/组权限配置——Trino的文件系统AC仅能基于用户设置权限规则,不支持角色相关的系统操作(比如CREATE ROLE),也无法识别rules.json里的role字段规则。这就是执行create role admin;报错的根本原因。
要实现角色和组的管理,必须切换到SQL-based Access Control(基于SQL的权限系统),这是Trino官方推荐的支持角色、组权限的方案。
具体操作步骤
1. 切换到SQL-based Access Control
修改Trino的config.properties配置文件(通常在etc/config.properties),替换原有的访问控制配置:
# 注释掉原文件系统AC的配置 # access-control.type=file # access-control.config-file=etc/rules.json # 启用SQL-based Access Control access-control.type=sql security.db.type=h2 security.db.url=jdbc:h2:file:/path/to/trino/security/db;MODE=PostgreSQL;AUTO_SERVER=TRUE security.db.user=admin security.db.password=your_password
注意:
/path/to/trino/security/db需替换为实际存储路径,确保Trino进程有读写权限。
2. 初始化初始管理员权限
SQL AC需要先设置初始管理员,用于创建后续角色、分配权限。在Trino的etc目录下创建access-control.properties文件:
# 初始管理员用户(替换为你的my_user) security.admin.user=my_user
重启Trino服务后,my_user将拥有最高权限。
3. 创建角色与关联组
创建角色
现在可以执行SQL创建角色:
CREATE ROLE admin;
给角色分配权限
例如给admin角色分配所有目录、Schema、表的全权限:
GRANT ALL ON CATALOG * TO ROLE admin; GRANT ALL ON SCHEMA *.* TO ROLE admin; GRANT ALL ON TABLE *.*.* TO ROLE admin;
关联LDAP组与角色
由于你使用LDAP认证,Trino会自动同步LDAP用户的组信息。可将LDAP组关联到Trino角色:
-- 将LDAP的admin_groups组关联到admin角色 GRANT ROLE admin TO GROUP admin_groups;
给用户分配角色
也可直接给单个用户分配角色:
GRANT ROLE admin TO USER my_user;
4. 迁移原有rules.json的权限到SQL
若需保留之前的权限规则,可通过SQL重新配置:
- 给普通用户查询执行权限:
GRANT EXECUTE ON QUERY TO PUBLIC; GRANT VIEW, KILL ON QUERY TO USER my_user;
- 给
my_user目录全权限:
GRANT ALL ON CATALOG * TO USER my_user;
- 表权限配置:
GRANT SELECT, INSERT, DELETE, UPDATE, OWNERSHIP ON TABLE *.*.* TO USER my_user;
注意事项
- 切换权限系统后,原有
rules.json会失效,所有权限需通过SQL语句配置。 - LDAP组名称必须与Trino识别的一致,可执行
SELECT * FROM system.session查看当前用户的groups字段确认。 - 修改权限后无需重启Trino,SQL权限会立即生效。
内容的提问来源于stack exchange,提问作者Nestor
相关产品推荐
相关产品推荐

