Oracle 安全加固:如何设置 IP 黑白名单,限制数据库访问?

来源:这里教程网 时间:2026-03-03 22:43:53 作者:

微信公众号: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不能登录某个用户”这样的精细化管理,用登录触发器**。

在实际工作中,两者结合使用,效果更佳!

相关推荐