跳到主要内容
版本: 最新版本-3.5

权限常见问题

即使已将所需的角色分配给用户,为什么仍然报告错误消息“no permission”?

如果角色未激活,则可能会发生此错误。您可以运行 select current_role(); 来查询当前会话中为用户激活的角色。如果所需的角色未激活,请运行 SET ROLE 来激活此角色,并使用此角色执行操作。

如果您希望在登录时自动激活角色,则 user_admin 角色可以运行 SET DEFAULT ROLEALTER USER DEFAULT ROLE 来为每个用户设置默认角色。设置默认角色后,用户登录时将自动激活。

如果您希望在登录时自动激活所有用户的所有已分配角色,您可以运行以下命令。此操作需要 System 级别的 OPERATE 权限。

SET GLOBAL activate_all_roles_on_login = TRUE;

但是,我们建议您遵循“最小权限”原则,通过设置具有有限权限的默认角色来防止潜在风险。例如

  • 普通用户可以将只具有 SELECT 权限的 read_only 角色设置为默认角色,同时避免将具有 ALTER、DROP 和 INSERT 等权限的角色设置为默认角色。
  • 管理员可以将 db_admin 角色设置为默认角色,同时避免将具有添加和删除节点权限的 node_admin 角色设置为默认角色。

这种方法有助于确保为用户分配具有适当权限的角色,从而降低意外操作的风险。

您可以运行 GRANT 将所需的权限或角色分配给用户。

我已经授予用户对数据库中所有表的权限(GRANT ALL ON ALL TABLES IN DATABASE <db_name> TO USER <user_identity>;),但用户仍然无法在数据库中创建表。为什么?

在数据库中创建表需要数据库级别的 CREATE TABLE 权限。您需要将权限授予用户。

GRANT CREATE TABLE ON DATABASE <db_name> TO USER <user_identity>;;

我已经使用 GRANT ALL ON DATABASE <db_name> TO USER <user_identity>; 授予用户数据库的所有权限,但当用户在此数据库中运行 SHOW TABLES; 时,没有任何返回。为什么?

SHOW TABLES; 仅返回用户具有任何权限的表。如果用户对表没有权限,则不会返回此表。您可以将此数据库中所有表的任何权限(例如 SELECT)授予用户

GRANT SELECT ON ALL TABLES IN DATABASE <db_name> TO USER <user_identity>;

上述语句等效于 v3.0 之前的版本中使用的 GRANT select_priv ON db.* TO <user_identity>;