Access denied for user 'root'@'xxx.xxx.xxx.xxx' (using password: NO)

【 使用环境 】测试环境
【 OB or 其他组件 】
【 使用版本 】4.3.2BP1
【问题描述】清晰明确描述问题
使用同样的命令行和密码,在不同网络的主机上通过obproxy连接集群。在和obproxy同网段的主机上可以登陆,和obproxy不同网段的主机上不能登录(登陆主机访问obproxy主机的2883网络是通的)。
登陆的用户为租户root用户,授权如下:

【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

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

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

1 个赞

根据您的描述,问题似乎是关于不同网段的主机通过 obproxy 连接 OceanBase 集群时遇到的连接问题。这个问题可能与网络配置、防火墙规则或 obproxy 的配置有关。

在这种情况下,我们可以先尝试使用 obdiag 工具来收集一些基础信息,以便进一步分析问题的原因。

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

这条命令将会收集集群的基础信息,包括但不限于网络配置、进程状态等,这有助于我们了解 obproxy 和集群的基本状况。

请您执行上述命令并将生成的日志文件发送给我们,以便我们能够更准确地定位问题。

为了更好地帮助您解决问题,请提供以下信息:

  1. 您是否已经为 obproxy 创建了 proxyro 用户并赋予了必要的权限?
  2. 您能否提供 obproxy 的启动命令或配置文件路径?
  3. 您尝试从不同网段连接时,遇到了什么样的错误信息?
  4. 您是否检查过 obproxy 和目标 OceanBase 集群机器上的防火墙规则?是否有任何限制外部访问的规则?
  5. 您是否尝试过直接使用 obclient 等工具从不同网段的主机连接到 OceanBase 集群,而不是通过 obproxy?结果如何?

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

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

2 个赞

你查一下看有几个root用户

1 个赞

在这个租户下就两个用户,一个是root,一个app
我是使用root用户登陆的。

1 个赞

再向您确认几个问题:

  1. 您是否已经为 obproxy 创建了 proxyro 用户并赋予了必要的权限
  2. 您能否提供 obproxy 的启动命令或配置文件路径
  3. 您尝试从不同网段连接时遇到了什么样的错误信息
  4. 您是否检查过 obproxy 和目标 OceanBase 集群机器上的防火墙规则是否有任何限制外部访问的规则
1 个赞

1、obproxy是通过ocp部署的,在sys租户下有proxyro用户;
2、obproxy的启动命令是:/home/admin/obproxy/bin/obproxy -p 2883 -n ob_pro_obproxy_rw -o server_tcp_keepcnt=2,client_tcp_keepcnt=2,client_sock_option_flag_out=3,server_tcp_keepintvl=5,client_tcp_keepidle=5,prometheus_sync_interval=1s,sock_option_flag_out=3,obproxy_config_server_url=http://10.252.158.68:8080/services?User_ID=alibaba&UID=test&Action=GetObProxyConfig&ObproxyClusterName=ob_pro_obproxy_rw,prometheus_listen_port=2884,client_tcp_keepintvl=5,enable_metadb_used=false,skip_proxy_sys_private_check=true,log_dir_size_threshold=10G,proxy_mem_limited=2G,enable_full_username=true,enable_proxy_scramble=true,enable_strict_kernel_release=false,server_tcp_keepidle=5

3、输入同样的密码,不同网段的服务器登陆时报错,如题!
4、防火墙上没有发现访问控制规则。

1 个赞

根据您提供的信息,您已经在 sys 租户下创建了 proxyro 用户,并且 obproxy 是通过 OCP 部署的。您还提供了 obproxy 的启动命令,其中包含了 skip_proxy_sys_private_check=true 参数,这应该已经跳过了对私有地址的检查。

既然您提到在不同网段的服务器上使用相同的密码连接 obproxy 时出现了 Access denied for user 'root'@'xxx.xxx.xxx.xxx' (using password: NO) 错误,我们可以尝试以下几个步骤来进一步排查问题:

1. 确认 root 用户的密码正确性

  • 请再次确认您使用的 root 用户密码是否正确。您可以尝试在同网段的机器上使用相同的命令和密码连接 obproxy,看是否能正常登录。

2. 检查 root 用户的权限

  • 根据您提供的图片信息,root 用户被授予了一些权限,但并没有显示是否具有全局登录权限。请确保 root 用户具有全局登录权限,可以通过以下命令检查:
    $ obclient -h<obproxy-ip> -P2883 -uroot@sys -p******
    obclient [(none)]> SHOW GRANTS FOR 'root'@'%';
    
    如果输出中没有包含 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' 类似的语句,您需要为 root 用户添加全局登录权限:
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';
    FLUSH PRIVILEGES;
    

3. 检查 obproxy 日志

  • 查看 obproxy 的日志文件,看看是否有与连接失败相关的错误信息。日志文件通常位于启动命令中指定的 log_dir_size_threshold 参数所指向的目录中。例如,如果您的启动命令中指定了 log_dir_size_threshold=10G,那么日志文件可能位于 /home/admin/obproxy/log/ 目录下。

4. 检查网络连通性

  • 确保不同网段的服务器能够正常访问 obproxy 的 2883 端口。您可以使用 telnetnc 命令来测试:
    telnet <obproxy-ip> 2883
    # 或者
    nc -zv <obproxy-ip> 2883
    

5. 检查 obproxy 的配置

  • 确认 obproxy 的配置中没有限制某些 IP 地址的连接。您可以通过查看 obproxy 的配置文件来确认这一点。配置文件通常位于 /home/admin/obproxy/conf/ 目录下。

6. 检查 obproxy 的版本

  • 确认 obproxy 的版本与 OceanBase 集群版本兼容。您可以通过运行 obproxy -V 命令来查看 obproxy 的版本信息。

7. 检查 obclient 版本

  • 确认您使用的 obclient 版本与 obproxy 和 OceanBase 集群版本兼容。您可以通过运行 obclient -V 命令来查看 obclient 的版本信息。

如果您按照以上步骤操作后仍然无法解决问题,请提供更多详细的日志信息或者联系 OceanBase 的技术支持团队寻求帮助。

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

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

2 个赞

端口号都是打通的么,确保可以访问
telnet 和ping都试试

2 个赞

我确认网络、用户名和密码都是没有问题的。

1 个赞

我用同网段的多台主机做登陆测试,发现一些问题,希望官方做下验证:
1、能够登陆的主机的mysql客户端的版本都是5.7.xxx
2、不能登录的主机的mysql客户端的版本都是8.0.xxx
是不是现在8.0.xxx的mysql客户端都不能用于登陆oceanbase?

1 个赞

建议使用 MySQL Client 或 OBClient 来连接数据库。
OCEANBASE需要MySQL 客户端能够与 MySQL 5.7 或更高版本兼容,
目前mysql 8.x的客户端确实存在某些无法登录的版本