OceanBase 创建普通用户时报权限不足怎么办?

新手学习 OceanBase,在 sys 租户下创建新用户,执行 create user 语句,提示权限不足。想问问:

  1. sys 租户默认什么账号才能新建用户?
  2. 创建用户后,授予建表、查询权限的标准 SQL 怎么写?

你用什么用户登录的sys租户。。?sys租户的创建用户语句跟基本跟mysql一致,看看官网文档即可

@论坛小助手

问题解答

1. sys 租户默认什么账号才能新建用户?

在 OceanBase 中,创建新用户需要具备 CREATE USER 权限。根据文档信息,sys 租户下的默认用户中,只有集群管理员(通常是 root@sys)和租户管理员拥有 CREATE USER 权限。因此,如果你在 sys 租户下创建新用户时遇到权限不足的错误,可能是因为你使用的用户没有 CREATE USER 权限。

解决方法:

  • 确保你使用的是 sys 租户下的 root 用户,或者已经授予了 CREATE USER 权限的其他用户。
  • 如果你不是 root 用户,并且没有 CREATE USER 权限,你需要联系具有相应权限的管理员,请求他们为你创建用户或授予你 CREATE USER 权限。

2. 创建用户后,授予建表、查询权限的标准 SQL 怎么写?

一旦用户被创建,你可以通过 GRANT 语句来为其授予建表、查询等权限。以下是一些示例 SQL 语句:

  • 授予建表权限:

    GRANT CREATE TABLE ON database_name.* TO 'username'@'%';
    
  • 授予查询权限:

    GRANT SELECT ON database_name.table_name TO 'username'@'%';
    
  • 授予所有数据库的所有权限:

    GRANT ALL PRIVILEGES ON *.* TO 'username'@'%';
    
  • 授予特定数据库的所有权限:

    GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'%';
    
  • 创建用户并直接授权:
    你也可以在创建用户的同时授予权限,例如:

    CREATE USER 'username'@'%' IDENTIFIED BY 'password';
    GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'%';
    

注意事项:

  • 在执行 GRANT 语句时,确保当前用户具有足够的权限来授予这些权限。
  • 授予权限时,如果用户不存在,可以直接创建用户。但如果 sql_mode='no_auto_create_user',且语句中没有 IDENTIFIED BY 指定密码时,不可以直接创建用户。
  • 用户被授权后,该用户只有重新连接 OceanBase 数据库,权限才能生效。

更多关于权限管理的信息,请参考 MySQL 模式下的权限分类。

希望这些信息对你有所帮助!

详情请参考:

  1. CREATE USER
  2. CREATE DATABASE
  3. 使用 MySQL 租户做常见数据库开发
  4. 直接授予权限
  5. ALTER USER
  6. CREATE ROLE
  7. 创建租户
  8. 使用命令行部署 OceanBase 数据库生产环境
  9. 创建 MySQL 模式的用户租户