Navicat 17 连接 OceanBase 必须严格按租户兼容模式(MySQL 或 Oracle)选择对应驱动类型,不能凭端口或习惯猜测;选错即报 Access denied 或 Unknown database,即使密码、IP、端口全正确。
Navicat 17 连接 OceanBase 时必须按租户兼容模式选驱动,不能凭端口或习惯猜
navicat 17 不是自动识别 oceanbase 模式的“智能客户端”,它只认你手动指定的连接类型。选错驱动模式(mysql vs oracle)是连接失败的第一大原因,哪怕端口填对、密码正确、ip放行,照样报 access denied 或 unknown database。
- 如果 OceanBase 实例在控制台显示兼容模式为 MySQL:Navicat 新建连接时,类型必须选
MySQL - 如果兼容模式为 Oracle:类型必须选
Oracle,哪怕端口是 2883、账号带@tenant后缀也不行 - Navicat for MySQL / Navicat for Oracle / Navicat Premium 都支持,但驱动类型必须和租户模式严格一致
- 不要指望 Navicat 自动切换协议——它不会读取 OceanBase 的 handshake 包来判断后端真实模式
MySQL 模式下连不上,别急着换驱动,先检查 ob_mysql_compatibility_mode 是否开启
Navicat 启动时默认执行 SELECT DATABASE() 和查询 information_schema,而 OceanBase 4.x+ 的 MySQL 租户默认关闭该兼容开关,导致直接报 Unknown database 'information_schema'。这不是驱动问题,是服务端元数据暴露策略问题。
- 最快验证方式:在 Navicat 「连接」→「初始化命令」栏填入:
SET SESSION ob_mysql_compatibility_mode = ON; - 更彻底方案:用
root@sys登录后执行:ALTER SYSTEM SET ob_mysql_compatibility_mode = ON;(需 SYS 权限) - 替代绕过法:在「高级」页签勾选
Use SSL(即使不启用 SSL),Navicat 会跳过部分元数据探测逻辑 - 注意:这个开关只影响 MySQL 协议行为,对 Oracle 模式租户完全无效
Oracle 模式下 Navicat 显示“无数据库”或右键建表失败,本质是 schema 和大小写没对齐
Oracle 模式下没有 SHOW DATABASES,Navicat 自动调用的元数据接口(如 getCatalogs())在 OceanBase 中不可用,所以界面里看不到库列表、右键建表弹窗为空、甚至提示 ORA-00942。
- 手动查可用 schema:
SELECT * FROM ALL_USERS;(不是DBA_USERS,普通用户只能看这个) - 建表必须显式指定 owner:
CREATE TABLE admin.t1 (id NUMBER);,不能只写t1 - Navicat 右键 →「新建表」时,「Owner」字段必须填用户名(如
ADMIN),留空即失败 - 表名默认大写,避免用双引号;一旦写了
"T1",后续所有引用都得严格匹配大小写,极易触发ORA-00942
SSL 连接失败不是证书路径填错了,而是 Navicat 版本或 OBProxy 配置没对上
Navicat 17 要求 OpenSSL 1.1.1+ 和 TLS 1.2+ 支持,而 OceanBase 的 SSL 控制权在 OBProxy 层,不是 OBServer。
- 先确认 OBProxy 真开了 SSL:执行
show proxyconfig like 'enable_ssl';,返回True才算生效 - Navicat 「高级」页签勾选
Use SSL connection后,必须填三个 PEM 文件的本地绝对路径:ca.pem、client-cert.pem、client-key.pem -
client-key.pem不能加密(即不能有 passphrase),否则 Navicat 报SSL handshake failed - 旧版 Navicat(≤16.x)自带老 OpenSSL 库,务必升级到
17.0.5+,否则 TLS 握手必败
真正容易被忽略的是:OceanBase 的 MySQL 模式租户和 Oracle 模式租户,底层协议栈、权限模型、元数据组织方式完全不同。Navicat 只是前端,它不会帮你做模式适配——你填什么驱动,它就发什么协议包,错一点,后端就拒收。











