创建用户步骤

创建用户

权限要求

数据库在运行过程中,往往需要创建不同的用户,并为用户赋予相应的权限,一般被授予 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)
2 个赞

应该发博客文章

审核不过关,审核的很严

估计是怕注水文章太多,影响博客文章整体质量。

1 个赞

应该是的

好文,学习了