微信公众号:DBA之友 数据库安全是 DBA 工作中的重中之重。除了常规的密码策略和权限管理,限制特定 IP 地址的访问也是一道非常有效的防火墙。今天,我们就来聊聊在 Oracle 中实现 IP 访问控制的两种方法。
方法一:修改 sqlnet.ora 文件
这是最常用也是最直接的方法,通过修改监听配置文件 sqlnet.ora 来实现全局的 IP 地址过滤。这种方法作用于监听层面,能将非法访问直接挡在数据库大门之外。操作步骤:
编辑 sqlnet.ora 文件:
vi $ORACLE_HOME/network/admin/sqlnet.ora
配置 IP 规则(三选一):
方案 A:白名单模式(推荐)只允许特定 IP 访问,其他全部拒绝。这是最安全的模式。
# 开启IP校验功能 tcp.validnode_checking = yes # 允许访问的IP地址列表,多个用逗号隔开 # 也可以配置网段,例如:192.168.1.0/24 tcp.invited_nodes = (192.168.1.110, 10.10.10.10)
注意: 使用白名单时,有时需要将数据库服务器本机IP也加进去,否则可能导致监听启动异常。
方案 B:黑名单模式明确禁止某些 IP 访问,其他默认允许。
# 开启IP校验功能 tcp.validnode_checking = yes # 禁止访问的IP地址列表 tcp.excluded_nodes = (172.17.15.90, 172.17.15.76)
方案 C:混合模式同时设置白名单和黑名单。一般情况下,只用白名单或只用黑名单就足够了,混合使用容易造成管理混乱。
重新加载监听配置使其生效:
lsnrctl reload
方法二:使用登录触发器
如果你的需求更为精细,比如只想限制某些 IP 访问特定的数据库用户(Schema),那么 sqlnet.ora 就显得有点“一刀切”了。这时,登录触发器(LOGON Trigger)就能派上大用场。操作场景:假设我们不希望 172.17.15.90 和 172.17.15.76 这两个 IP 登录 KINGDEE 这个用户。操作步骤:
创建登录触发器:以 sys 或其他有权限的用户登录,执行以下 SQL。
CREATE OR REPLACE TRIGGER disable_specific_login
AFTER LOGON ON KINGDEE.SCHEMA -- 注意:这里指定了在哪个用户上生效
BEGIN
-- 判断来源IP是否在黑名单列表中
IF ORA_CLIENT_IP_ADDRESS IN ('172.17.15.90', '172.17.15.76') THEN
-- 如果是,则抛出异常,阻止登录
RAISE_APPLICATION_ERROR(-20001, '用户 ' || ORA_LOGIN_USER || ' 不允许从此 IP ' || ORA_CLIENT_IP_ADDRESS || ' 登录!');
END IF;
END;
/
扩展用法:限制整个网段如果你想限制一个网段,比如 10.10.10.*,可以把 IN 条件改为 LIKE:IF ORA_CLIENT_IP_ADDRESS LIKE ('10.10.10.%') THEN ...
简单来说:
想简单粗暴地把危险 IP 挡在外面,用 sqlnet.ora。
想实现**“某个IP不能登录某个用户”这样的精细化管理,用登录触发器**。
在实际工作中,两者结合使用,效果更佳!
