教你怎么从外网连上Oracle数据库,步骤和注意点全讲清楚
- 问答
- 2026-01-06 06:49:23
- 20
默认情况下,Oracle数据库为了安全,只允许从它所在的服务器本机进行连接,你直接在服务器上输入sqlplus用户名/密码就能进去,那是因为连接没有经过网络,要想从外网(比如你的个人电脑)连上去,就需要进行一系列配置,把数据库的“大门”打开,并告诉它允许来自外部网络的连接请求,这个过程主要涉及三个文件的修改和一个关键的网络概念。
第一步:确认数据库的监听器和服务名 在你开始任何操作之前,需要先知道两个关键信息,第一是“监听器”,你可以把它想象成数据库的“门卫”,所有网络连接请求都要先经过它,第二是“服务名”,这是你具体要连接的那个数据库的标识,就像你要去一栋大楼里的某个公司,得告诉门卫公司名字。
怎么查呢?你需要先登录到Oracle数据库所在的服务器。
- 查看监听器状态:在服务器的命令行里,输入
lsnrctl status,你会看到一长串信息,找到类似“服务摘要”的部分,里面会列出可用的服务名,ORCL”、“XE”等等,记下你想连接的那个服务名,注意监听器正在哪个端口上工作,通常是1521。 - 查看TNS名称:另一个方法是查看一个叫
tnsnames.ora的文件,这个文件通常在$ORACLE_HOME/network/admin目录下,用文本编辑器打开它,你会看到一些配置块,每个块都有一个名字,那个名字通常就是服务名或者网络服务名。
第二步:修改监听器配置文件(listener.ora) 这是关键一步,目的是告诉“门卫”(监听器)不要只监听服务器内部的连接请求,也要监听来自外部IP地址的请求。
- 找到文件:这个文件也在
$ORACLE_HOME/network/admin目录下。 - 备份文件:修改前,最好先复制一份备份,以防改错了。
- 找到类似下面的配置段落:
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) )你需要在这个DESCRIPTION_LIST里面添加一个新的DESCRIPTION,指明监听所有IP地址,修改后大概是这样:
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521)) ) )这里的
HOST = 0.0.0.0非常关键,它代表监听所有网络接口的1521端口,包括外网IP,如果你只想监听特定IP,比如服务器的内网IP,也可以把0.0.0.0换成那个IP地址。
第三步:修改本地网络服务配置文件(tnsnames.ora) 这个文件的作用是给客户端一个“地址簿”,告诉它如何找到数据库,虽然服务器上这个文件可能已经配置好了,但为了确保万无一失,特别是HOST的设置,可以检查一下。

- 打开同一个目录下的
tnsnames.ora文件。 - 找到对应你服务名的那个配置块,
ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL) ) )检查这里的
HOST,如果它写的是localhost或0.0.1,那么它只接受本机连接,你需要把它修改为服务器的实际IP地址,最好是固定的内网IP或者公网IP。HOST = 192.168.1.100。
第四步:修改数据库初始化参数(local_listener) 这一步是告诉数据库实例本身,它的“门卫”(监听器)在哪里,有时候数据库只知道本机的监听器,需要明确指出来。
- 用sqlplus以管理员身份(sysdba)登录数据库。
sqlplus / as sysdba。 - 执行以下命令查看当前设置:
show parameter local_listener。 - 如果结果为空或者不是指向正确IP和端口,就需要修改,执行:
ALTER SYSTEM SET LOCAL_LISTENER='(ADDRESS=(PROTOCOL=TCP)(HOST=你的服务器IP)(PORT=1521))' SCOPE=BOTH;然后别忘了提交更改:
ALTER SYSTEM REGISTER;这个命令是让数据库立即向监听器注册新的服务信息。
第五步:重启监听器服务 修改了监听器的配置,必须重启它才能生效。 在服务器命令行执行:

lsnrctl stop
lsnrctl start
然后再次用 lsnrctl status 检查,确认你的数据库服务已经成功注册到监听器,并且监听地址是0.0.0.0或你的服务器IP。
第六步:配置服务器的防火墙 这是最容易被忽略但至关重要的一步,服务器的操作系统防火墙(比如Windows防火墙或Linux的iptables/firewalld)很可能默认阻止了1521端口的进入流量,你必须手动创建一个规则,允许外部设备访问服务器的1521端口。
- Linux(使用firewalld,如CentOS/RHEL 7+):
firewall-cmd --permanent --add-port=1521/tcp firewall-cmd --reload - Linux(使用iptables): 需要添加一条规则并保存。
- Windows: 进入“高级安全Windows防火墙”,添加入站规则,允许端口1521的TCP连接。
第七步:从外网测试连接 你可以在你的个人电脑上测试了。
- 确保你的电脑上安装了Oracle客户端或即时客户端(Oracle Instant Client)。
- 在你的电脑上也配置一个
tnsnames.ora就和你在服务器上修改的那个一样,HOST填写服务器的公网IP地址(如果你的电脑和服务器在同一个内网,就填内网IP)。 - 使用连接工具(如sqlplus、SQL Developer等),输入用户名、密码和网络服务名进行连接。
最重要的注意点:
- 安全风险! 将数据库暴露在外网是极其危险的,会引来黑客扫描和攻击,这绝对不适用于生产环境,仅建议在测试或学习环境中临时使用。
- 使用强密码! 确保所有数据库用户(特别是SYS、SYSTEM等管理账户)都使用了非常复杂的密码。
- 考虑端口映射(NAT): 如果你的服务器在路由器后面,你还需要在路由器上设置端口转发(Port Forwarding),将公网IP的1521端口转发到服务器内网IP的1521端口。
- 考虑SSH隧道: 一种更安全的方式是使用SSH隧道,你先通过SSH加密连接到服务器,然后在本地建立一个端口映射,这样你连接本地的某个端口,数据就会通过加密的SSH通道转发到服务器的数据库端口,这种方法数据库本身不需要直接暴露在外网。
- 云服务器安全组: 如果你用的是阿里云、腾讯云等云服务商的服务器,除了操作系统防火墙,还必须配置“安全组”规则,放行1521端口的入站流量。
整个过程就是这样,核心就是配置监听器、配置网络地址、打通防火墙,每一步都要仔细,任何一步出错都可能导致连接失败,如果连不上,就要从服务器内网开始逐层测试,先确保服务器本机用IP能连上,再确保同局域网其他电脑能连上,最后再测试外网。
本文由钊智敏于2026-01-06发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://www.haoid.cn/wenda/75419.html
