创建用户
权限要求
数据库在运行过程中,往往需要创建不同的用户,并为用户赋予相应的权限,一般被授予 CREATE USER 权限的用户可以创建用户。
由于 CREATE USER 权限较大,默认仅集群管理员和租户管理员 拥有此系统权限 ,其他用户如果需要创建用户,则需要被授予 CREATE USER 权限,授权相关操作请参见 直接授予权限。
用户名称的规则
为用户指定名称时,需要注意以下限制:
- 用户名的唯一性:每个用户名需要保证在租户内唯一。
 
用户名称在租户内是唯一的,不同租户下的用户可以同名,故通过 用户名@租户名 的形式可以在系统全局唯一定位一个租户用户。
由于系统租户与 MySQL 租户属于同一兼容模式 ,为区别系统租户和普通租户下的用户,建议对系统租户下的用户名称使用特定前缀。
- 
用户名的命名约定:
- 使用 OBClient 、ODC 等客户端创建用户时,要求用户名长度不超过 64 个字节 。
 - 使用 OCP 创建用户时,要求用户名以英文字母开头,可包含大写字母、小写字母、数字和下划线,且长度为 2~64 个字符 。
 
 
连接集群
使用 root 用户登录集群的 mysql_tenant 租户。
obclient -h192.168.63.201 -P2881 -uroot@mysql_tenant -p'ggj0F8Yt0MzZ3mnGy8r8' -Doceanbase -A
创建一个拥有最小数据库权限的用户和拥有超级权限的用户
可以使用 CREATE USER 语句创建用户。创建用户必须拥有 CREATE USER 的系统权限。在创建用户时,建议坚持最小权限原则,即所有用户只拥有执行其任务所需的最小权限。
创建一个拥有最小数据库权限的用户
示例:创建一个拥有最小数据库权限的用户 test2
创建用户 test
CREATE USER 'test' IDENTIFIED BY 'test';
授予用户权限
授予用户 test 访问数据库 testdb 中所有表的权限
GRANT SELECT ON testdb.* TO test;
查看已创建的用户
select user from mysql.user WHERE user='test';
返回结果如下:
obclient(root@mysql_tenant)[test]> select user from mysql.user WHERE user='test';
+------+
| user |
+------+
| test |
+------+
1 row in set (0.037 sec)
创建一个超级权限的用户
示例:创建一个拥有超级权限的用户 dba_test ,用户进行高权限操作。
创建用户 dba_test
CREATE USER 'dba_test' IDENTIFIED BY 'dbatest';
授予用户 dba_test 超级权限
注意:不建议生产环境创建如此高权限的用户。
GRANT all on *.* TO dba_test;
查看用户权限
用户创建成功后,可以根据需要查看用户的权限。
查看指定用户被授予的权限
SHOW GRANTS FOR test;
输出如下:
obclient(root@mysql_tenant)[test]> SHOW GRANTS FOR test;
+--------------------------------------+
| Grants for test@%                    |
+--------------------------------------+
| GRANT USAGE ON *.* TO 'test'         |
| GRANT SELECT ON `testdb`.* TO 'test' |
+--------------------------------------+
2 rows in set (0.012 sec)
查看用户所拥有的用户级权限
管理员可 以通过 mysql.user 视图 查看某个用户所拥有的用户级权限 。
普通用户可以通过 mysql.user 视图查看自己所拥有的用户级权限。
SELECT * FROM mysql.user WHERE user='test'\G
输出结果如下:
obclient(root@mysql_tenant)[test]> SELECT * FROM mysql.user WHERE user='test'\G
*************************** 1. row ***************************
                     host: %
                     user: test
                 password: *94bdcebe19083ce2a1f959fd02f964c7af4cfc29
              select_priv: N
              insert_priv: N
              update_priv: N
              delete_priv: N
              create_priv: N
                drop_priv: N
              reload_priv: N
            shutdown_priv: N
             process_priv: N
                file_priv: N
               grant_priv: N
          references_priv: N
               index_priv: N
               alter_priv: N
             show_db_priv: N
               super_priv: N
    create_tmp_table_priv: N
         lock_tables_priv: N
             execute_priv: N
          repl_slave_priv: N
         repl_client_priv: N
         create_view_priv: N
           show_view_priv: N
      create_routine_priv: N
       alter_routine_priv: N
         create_user_priv: N
               event_priv: N
             trigger_priv: N
   create_tablespace_priv: N
                 ssl_type: 
               ssl_cipher: 
              x509_issuer: 
             x509_subject: 
            max_questions: 0
              max_updates: 0
          max_connections: 0
     max_user_connections: 0
                   plugin: ob_native_password
    authentication_string: 
         password_expired: 
           account_locked: N
  drop_database_link_priv: N
create_database_link_priv: N
         create_role_priv: N
           drop_role_priv: N
1 row in set (0.009 sec)
查看用户所拥有的数据库级权限
管理员可以通过 mysql.db 视图查看某个用户所拥有的数据库级权限。
普通用户可以通过 mysql.db 视图查看自己所拥有的数据库级权限。
SELECT * FROM mysql.db WHERE user='test'\G
输出结果如下:
obclient(root@mysql_tenant)[test]> SELECT * FROM mysql.db WHERE user='test'\G
*************************** 1. row ***************************
                 host: %
                   db: testdb
                 user: test
          select_priv: Y
          insert_priv: N
          update_priv: N
          delete_priv: N
          create_priv: N
            drop_priv: N
           grant_priv: N
      references_priv: N
           index_priv: N
           alter_priv: N
create_tmp_table_priv: N
     lock_tables_priv: N
     create_view_priv: N
       show_view_priv: N
  create_routine_priv: N
   alter_routine_priv: N
         execute_priv: N
           event_priv: N
         trigger_priv: N
1 row in set (0.011 sec)