【 使用环境 】生产环境
【 OB or 其他组件 】OB
【 使用版本 】4.2.1.8
【问题描述】OB alter user不能修改密码为密文,提示语法错误,create user可以
create user username@‘x.x.x.x’ identified by PASSWORD ‘hash_value’; --正常执行
alter user username@‘x.x.x.x’ identified by PASSWORD ‘hash_value’; --提示语法错误
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):
[root@xxx:2883][oceanbase][10:24:11]> create user hqh identified by 'hqh123';
Query OK, 0 rows affected (0.209 sec)
[root@xxx:2883][oceanbase][10:27:26]> select user,password from mysql.user where user='hqh;
+----------------------+-------------------------------------------+
| user | password |
+----------------------+-------------------------------------------+
| hqh | *69b7cb7acf9a5e7897d325ef1a98cc517e070659 |
+----------------------+-------------------------------------------+
1 rows in set (0.037 sec)
[root@xxx:2883][oceanbase][10:27:37]> create user hqh2 identified by PASSWORD '*69b7cb7acf9a5e7897d325ef1a98cc517e070659';
Query OK, 0 rows affected (0.047 sec)
[root@xxx:2883][oceanbase][10:28:01]> \q
Bye
[admin@test-ob-tools-ocp-odc-oms02 ~]$ obclient -uhqh@cubc#dp_ob_poc -phqh123
Welcome to the OceanBase. Commands end with ; or \g.
Your OceanBase connection id is 2031431
Server version: OceanBase 4.2.1.8 (r108000052024072217-77f9516419866bc291fc79b950b0865f2f4194e0) (Built Jul 22 2024 17:41:00)
Copyright (c) 2000, 2018, OceanBase and/or its affiliates. All rights reserved.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
[hqh@xxx:2883][(none)][10:28:52]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
+--------------------+
1 row in set (0.010 sec)
[hqh@xxx:2883][(none)][10:28:58]> \q
Bye
Bye
[admin@test-ob-tools-ocp-odc-oms02 ~]$ obclient -uhqh2@cubc#dp_ob_poc -phqh123
Welcome to the OceanBase. Commands end with ; or \g.
Your OceanBase connection id is 1324505
Server version: OceanBase 4.2.1.8 (r108000052024072217-77f9516419866bc291fc79b950b0865f2f4194e0) (Built Jul 22 2024 17:41:00)
Copyright (c) 2000, 2018, OceanBase and/or its affiliates. All rights reserved.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
[hqh2@xxx:2883][(none)][10:29:40]> \q
Bye
[admin@test-ob-tools-ocp-odc-oms02 ~]$ obclient oceanbase -uroot@cubc#dp_ob_poc
Welcome to the OceanBase. Commands end with ; or \g.
Your OceanBase connection id is 1324450
Server version: OceanBase 4.2.1.8 (r108000052024072217-77f9516419866bc291fc79b950b0865f2f4194e0) (Built Jul 22 2024 17:41:00)
Copyright (c) 2000, 2018, OceanBase and/or its affiliates. All rights reserved.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
[root@xxx:2883][oceanbase][10:29:18]> select user,password from mysql.user;
+----------------------+-------------------------------------------+
| user | password |
+----------------------+-------------------------------------------+
| hqh | *69b7cb7acf9a5e7897d325ef1a98cc517e070659 |
| hqh2 | *69b7cb7acf9a5e7897d325ef1a98cc517e070659 |
+----------------------+-------------------------------------------+
12 rows in set (0.011 sec)
[root@xxx:2883][oceanbase][10:29:22]> \q
根据您提供的信息,您在使用 ALTER USER 命令时遇到的问题似乎是由于 OceanBase 对于 ALTER USER 语法支持的限制。从您提供的信息来看,ALTER USER 命令似乎并不支持使用 IDENTIFIED BY PASSWORD 'hash_value' 这种形式来直接指定密文密码。
在 OceanBase 中,ALTER USER 通常用于修改用户的密码、锁定或解锁用户等操作。然而,根据现有文档,ALTER USER 命令通常接受的是明文密码,而不是密文形式的密码。例如:
ALTER USER username@'x.x.x.x' IDENTIFIED BY 'plaintext_password';
当您尝试使用 IDENTIFIED BY PASSWORD 'hash_value' 形式时,ALTER USER 命令可能不识别这种语法,因此导致了语法错误。
相比之下,CREATE USER 命令确实支持创建时指定密文密码,如您所述:
CREATE USER username@'x.x.x.x' IDENTIFIED BY PASSWORD 'hash_value';
这表明 CREATE USER 和 ALTER USER 在处理密码的方式上存在差异。
建议解决方案:
如果您需要修改用户密码,并且希望使用密文形式,请先使用 CREATE USER 命令创建一个新的用户,然后将原用户的权限和其他相关信息迁移至新用户,并最后删除旧用户。
如果您希望直接通过 ALTER USER 修改密码,建议使用明文形式的密码,并确保该密码符合您的安全策略要求。
[root@xxx:2883][oceanbase][10:38:04]> alter user hqh2 identified by 'hqh123';
Query OK, 0 rows affected (0.071 sec)
[root@xxx:2883][oceanbase][10:38:14]> alter user hqh2 identified by PASSWORD '*69b7cb7acf9a5e7897d325ef1a98cc517e070659';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your OceanBase version for the right syntax to use near 'PASSWORD '*69b7cb7acf9a5e7897d325ef1a98cc517e070659'' at line 1
根据您提供的信息,您正在尝试在 OceanBase 中使用类似于 MySQL 的语法来修改用户的密码,并且您提到在 8.0 版本中是可以使用 IDENTIFIED WITH 'mysql_native_password' AS 'hash_value' 这种语法的。然而,您在当前环境中遇到了问题。
在 OceanBase 中,修改用户密码的标准语法通常是使用明文密码的形式。以下是标准的语法示例:
ALTER USER 'username'@'hostname' IDENTIFIED BY 'plaintext_password';
然而,您提到的 IDENTIFIED WITH 'mysql_native_password' AS 'hash_value' 语法确实是在 MySQL 中用来指定密文密码的一种方式。考虑到您提到的 8.0 版本,这可能是 MySQL 8.0 的特性。
对于 OceanBase,目前的文档并没有明确提到支持 IDENTIFIED WITH 'mysql_native_password' AS 'hash_value' 这种语法。因此,如果您在当前版本的 OceanBase 中尝试使用这种语法,可能会遇到不支持的情况。
如果您确实需要使用密文密码来修改用户密码,建议您尝试以下方法之一:
使用 CREATE USER 创建新用户:
如果您需要保留密文密码,可以先使用 CREATE USER 命令创建一个新用户,并赋予相应的权限,然后再删除旧用户。
CREATE USER 'new_username'@'hostname' IDENTIFIED BY PASSWORD 'hash_value';
GRANT ... TO 'new_username'@'hostname'; -- 根据需要授予权限
DROP USER 'old_username'@'hostname'; -- 删除旧用户
使用明文密码修改:
如果可以接受明文密码,可以直接使用 ALTER USER 命令修改密码。
ALTER USER 'username'@'hostname' IDENTIFIED BY 'plaintext_password';