alter user不能修改密码为密文

【 使用环境 】生产环境
【 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收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

您的问题涉及到了在 OceanBase 4.2.1.8 版本中使用 ALTER USER 命令修改用户密码时遇到了不能设置为密文的情况,而 CREATE USER 命令则可以正常创建带有密文密码的用户。

这个问题可能与 ALTER USER 命令的具体实现方式有关,或者可能是由于某些配置或权限限制导致的。不过,根据提供的信息来看,这并不是一个明显的 obdiag 能够直接诊断的日志或性能问题。但是为了更好地理解问题的本质,我们可以从系统配置和行为上做一些基本的检查。

在这种情况下,使用 obdiag 可能不是最直接的方法来解决您的问题,因为 obdiag 主要针对的是系统层面的日志和性能问题。然而,为了确保这不是由某个系统配置或环境因素引起的间接问题,您可以考虑使用 obdiag 来收集一些基础的集群信息。

日志采集场景: 集群基础信息
日志采集命令: obdiag gather scene run --scene=observer.base

通过上述命令,您可以收集到当前集群的基础配置信息,这有助于我们进一步了解您的环境设置。请将收集到的日志压缩包发送给我们,以便我们能够更深入地分析您的问题。

为了更好地帮助您解决问题,请您提供一些额外的信息:

  1. 当尝试使用 ALTER USER 命令修改密码为密文时,是否收到了任何错误消息或警告?
  2. 您使用的 ALTER USER 命令的具体语法是什么样的?能否提供一个示例?
  3. 您是否有对密码加密方式的相关配置进行过自定义设置?
  4. 是否有可能是在 ALTER USER 时缺少了必要的权限?您当前执行命令的用户角色是什么?

这些问题的答案将有助于我们更准确地定位问题的原因。

具体信息可参考以下文档:

附上敏捷诊断工具 obdiag 使用帮助链接

你这两哪有区别?

贴错了,第二个是alter user username@‘x.x.x.x’ identified by PASSWORD ‘hash_value’;

再向您确认几个问题:

  1. 当您执行 alter user 命令时系统返回的具体错误消息是什么
  2. 您是否确认当前执行 alter user 命令的用户具备 CREATE USER 的权限
  3. 在您的环境中是否对密码策略进行了特殊的配置例如强制要求明文或特定的加密算法
  4. 您能否提供更多关于 hash_value 的信息例如它是如何生成的以及是否符合 OceanBase 的密码策略要求

测试了,可以的。


[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

create user可以,alter user貌似不行,官方文档也没写这种语法。

根据您提供的信息,您在使用 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 USERALTER USER 在处理密码的方式上存在差异。

建议解决方案:

  1. 如果您需要修改用户密码,并且希望使用密文形式,请先使用 CREATE USER 命令创建一个新的用户,然后将原用户的权限和其他相关信息迁移至新用户,并最后删除旧用户。
  2. 如果您希望直接通过 ALTER USER 修改密码,建议使用明文形式的密码,并确保该密码符合您的安全策略要求。
  3. 如果您认为这种情况应该得到支持,可以考虑向 OceanBase 社区反馈这一需求,以便在未来版本中可能得到改进。

希望以上信息对您有所帮助。如果您还有其他疑问或需要进一步的帮助,请随时告知。

具体信息可参考以下文档:

(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)

1 个赞
[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

确实不行,MySQL可以吗?

8.0可以的

ALTER USER 'username'@'hostname' IDENTIFIED WITH 'mysql_native_password' AS 'hash_value';

语法不是这样写的

这个是 5.7 的语法。 应该是来控制 密码属性的 , 比如 过期 lifetime 等

要是想直接指定hash值那就把用户删了,然后创建的时候指定再把权限啥的恢复成原样 :joy:

alter user username@‘x.x.x.x’ identified by PASSWORD ‘hash_value’; 这种语法是不支持的
SET PASSWORD [FOR user_name] = PASSWORD(password);可以使用这样的语法

1 个赞

如何修改用户的密码?麻烦提供一下 SQL 语句 @论坛小助手

根据您提供的信息,您正在尝试在 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 中尝试使用这种语法,可能会遇到不支持的情况。
如果您确实需要使用密文密码来修改用户密码,建议您尝试以下方法之一:

  1. 使用 CREATE USER 创建新用户
    如果您需要保留密文密码,可以先使用 CREATE USER 命令创建一个新用户,并赋予相应的权限,然后再删除旧用户。

    CREATE USER 'new_username'@'hostname' IDENTIFIED BY PASSWORD 'hash_value';
    GRANT ... TO 'new_username'@'hostname';  -- 根据需要授予权限
    DROP USER 'old_username'@'hostname';  -- 删除旧用户
    
  2. 使用明文密码修改
    如果可以接受明文密码,可以直接使用 ALTER USER 命令修改密码。

    ALTER USER 'username'@'hostname' IDENTIFIED BY 'plaintext_password';
    
  3. 联系 OceanBase 支持团队
    如果您认为这是必要的功能,并且希望在未来的版本中支持这种语法,可以向 OceanBase 社区反馈您的需求。

希望以上信息对您有所帮助。如果您还有其他问题或需要进一步的帮助,请随时告知。

详情请参考:

  1. SET PASSWORD
  2. 用户密码错误,错误代码 ERROR 1045
  3. ALTER USER
  4. Druid 连接池连接 OceanBase 数据库示例程序
  5. 密码复杂度
  6. Spring JDBC 连接 OceanBase 数据库示例程序
  7. HikariCP 连接池连接 OceanBase 数据库示例程序
  8. 快速体验 OceanBase 数据库
  9. Commons Pool 连接 OceanBase 数据库示例程序
  10. Go-SQL-Driver/MySQL 连接 OceanBase 数据库示例程序