db2数据库 proc目录_在Linux,Unix和Windows的DB2中使用CONNECT_PROC数据库配置参数来限制数据库连接

db2数据库 proc目录

问题描述

系统管理员要求允许最终用户仅从一组特定的主机或IP地址连接到数据库。 本文介绍如何使用CONNECT_PROC数据库配置参数和全局变量CLIENT_HOST或CLIENT_IPADDR来满足此要求。 出于说明目的,在我们的示例中,我们假设系统管理员希望确保所有用户只能从主机hote53或IP 9.26.120.69连接到数据库。

CONNECT_PROC数据库配置参数

使用此数据库配置参数,您可以输入一个由两部分组成的连接过程名称,该名称将在每次应用程序连接到数据库时隐式执行。 该过程不得使用任何参数。 设置连接过程名称的更新语句立即生效。

此数据库配置参数从DB2 V 9.7.3开始可用。

CLIENT_HOST全局变量

此内置全局变量是系统维护的,包含操作系统返回的当前客户端的主机名。

如果客户端连接源自本地系统上运行的应用程序,则变量的值为NULL。 接受连接后,DB2从网络获取客户机IP地址。 客户端主机名是通过调用TCP / IP GetAddrInfo函数从客户端IP地址获得的。 如果进程不是源自使用TCP / IP的远程系统,则变量的值为NULL。

此全局变量从DB2 V10.1开始可用。

CLIENT_IPADDR全局变量

此内置全局变量包含操作系统返回的当前客户端的IP地址。 如果客户端未使用TCP / IP或SSL协议进行连接,则CLIENT_IPADDR全局变量的值为NULL。 此全局变量从DB2 V10.1开始可用

示例场景

例如,假设您只允许从IP 9.26.120.69(hotel53)连接到9.26.120.69(hotel53)上的TESTDB数据库。 您将按照以下步骤操作。

步骤1:创建数据库

  1. 使用以下命令在9.26.120.69(hotel53)上创建TESTDB数据库:
    清单1.创建数据库
    db2start
    SQL1063N  DB2START processing was successful.
    
    db2 create database TESTDB
    DB20000I  The CREATE DATABASE command completed successfully.
  2. 验证是否已创建数据库:
    清单2.列出数据库目录以查看是否已创建数据库
    db2 list db directory
    
     System Database Directory
    
     Number of entries in the directory = 1
    
    Database 1 entry:
    
     Database alias                       = TESTDB
     Database name                        = TESTDB
     Local database directory             = /home/hotel53/miacob
     Database release level               = 10.00
     Comment                              =
     Directory entry type                 = Indirect
     Catalog database partition number    = 0
     Alternate server hostname            =
     Alternate server port number         =

步骤2:配置通信协议

如下配置TCP / IP:

  1. 在服务器端9.26.120.69 hotel53上,运行以下命令:
    清单3.为TCP / IP更新数据库环境变量和数据库管理器配置
    db2set db2comm=TCPIP
    
    db2 update dbm cfg using SVCENAME xmiacob
    DB20000I  The UPDATE DATABASE MANAGER CONFIGURATION command completed 
    successfully.
    SQL1362W  One or more of the parameters submitted for immediate modification 
    were not changed dynamically. Client changes will not be effective until the 
    next time the application is started or the TERMINATE command has been issued. 
    Server changes will not be effective until the next DB2START command.
    
    db2stop
    SQL1064N  DB2STOP processing was successful.
    
    db2start
    SQL1063N  DB2START processing was successful.
  2. 在客户端9.26.120.31 hotellnx96上,运行:
    清单4.从客户端对节点和数据库进行分类
    db2 catalog tcpip node NT1 remote hotel53 server xmiacob
    DB20000I  The CATALOG TCPIP NODE command completed successfully.
    DB21056W  Directory changes may not be effective until the directory cache is 
    refreshed.
    
    db2 terminate
    DB20000I  The TERMINATE command completed successfully.
    
    db2 catalog database testdb at node nt1
    DB20000I  The CATALOG DATABASE command completed successfully.
    DB21056W  Directory changes may not be effective until the directory cache is 
    refreshed.
    
    db2 terminate
    DB20000I  The TERMINATE command completed successfully.
  3. 验证用户Einstein是否可以连接到TESTDB数据库。
    清单5.从9.26.120.69 hotel53连接
    db2 connect to testdb user einstein using <password>
    
       Database Connection Information
    
     Database server        = DB2/LINUXX8664 10.1.0
     SQL authorization ID   = EINSTEIN
     Local database alias   = TESTDB
    清单6.从9.26.120.31 hotellnx96连接
    db2 connect to testdb user einstein using <password>
    
       Database Connection Information
    
     Database server        = DB2/LINUXX8664 10.1.0
     SQL authorization ID   = EINSTEIN
     Local database alias   = TESTDB

    用户爱因斯坦可以从两个IP地址连接到TESTDB数据库。

步骤3:创建一个过程以允许受限制的连接

下一步是创建一个过程,以仅允许从9.26.120.69 hotel53进行连接。 您有两种选择:

  • 选项1:使用CLIENT_HOST全局变量,如下面的清单所示:
    清单7.使用CLIENT_HOST创建一个过程
    db2 CREATE OR REPLACE PROCEDURE CP.CONNECT_PROCEDURE ()
    LANGUAGE SQL
    BEGIN
       IF ( CLIENT_HOST <> 'hotel53' )
       THEN
          SIGNAL SQLSTATE '42502' SET MESSAGE_TEXT='Connection refused !';
       END IF;
    END;
    DB20000I  The SQL command completed successfully.
  • 选项2:使用CLIENT_IPADDR全局变量,如清单8所示:
    清单8.使用CLIENT_IPADDR创建一个过程
    db2 CREATE OR REPLACE PROCEDURE CP.CONNECT_PROCEDURE ()
    LANGUAGE SQL
    BEGIN
       IF ( CLIENT_IPADDR <> '9.26.120.69' )
       THEN
          SIGNAL SQLSTATE '42502' SET MESSAGE_TEXT='Connection refused !';
       END IF;
    END;
    DB20000I  The SQL command completed successfully.

步骤4:在过程上授予特权

将过程上的EXECUTE授予所有人,并更新CONNECT_PROC数据库配置参数以使用上面创建的CONNECT_PROCEDURE。

清单9.授予特权和更新数据库配置
db2 grant EXECUTE on procedure CP.CONNECT_PROCEDURE to PUBLIC
DB20000I  The SQL command completed successfully.

db2 update db cfg using CONNECT_PROC "CP.CONNECT_PROCEDURE"
DB20000I  The UPDATE DATABASE CONFIGURATION command completed 
successfully.

步骤5:确保根据需要限制连接

确认仅允许从9.26.120.69 hotel53连接。

清单10.从9.26.120.69 hotel53
db2 connect to testdb user einstein using <password>

   Database Connection Information

 Database server        = DB2/LINUXX8664 10.1.0
 SQL authorization ID   = EINSTEIN
 Local database alias   = TESTDB
清单11.从9.26.120.31 hotellnx96
db2 connect to testdb user einstein using <password>
SQL0438N  Application raised error or warning with diagnostic text: 
"Connection refused !".  SQLSTATE=42502

用户爱因斯坦只能从IP地址9.26.120.69连接到TESTDB数据库。

注意,如果DBADM尝试删除,替换或更改连接过程,它们将收到SQL5187N返回代码:

清单12. DBADM尝试删除该过程
db2 drop procedure CP.CONNECT_PROCEDURE
DB21034E  The command was processed as an SQL statement because it was not a 
valid Command Line Processor command.  During SQL processing it returned:
SQL5187N  The "DROP PROCEDURE" operation is not allowed for procedure 
"CP.CONNECT_PROCEDURE" because a connection procedure with the same name 
is defined for the database.  SQLSTATE=429C8

摘要

通过结合数据库配置参数CONNECT_PROC和内置全局变量CLIENT_HOST或CLIENT_IPADDR的功能,我们可以控制用户从何处连接数据库。 请注意,此解决方案不适用于以下超级用户:SYSADM,SYSCTRL和SYSMAINT,因为它们有权更新数据库配置参数CONNECT_PROC。


翻译自: https://www.ibm.com/developerworks/data/library/techarticle/dm-1305db2access/index.html

db2数据库 proc目录

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值