DB2 9部署定制的安全性插件


  介绍

  在获知用户是否被授权进行特定操作之前,DB 2 必须能够获知外部用户的有效数据库授权 ID 及其所属的组。为了找到有效数据库授权 ID,需要确保外部用户就是所声称的用户,然后将其外部用户 ID 映射到内部 DB2 授权 ID。此过程被称为身份验证。DB2 没有用于维护用户 ID 和密码,或用户 ID 组成员关系的机制。

  安全性插件的作用是什么?

  有两个事件需要使用(客户端或服务器端)身份验证插件或组成员查找插件:

  • 连接或实例连接时
  • 实例级操作授权时

  实例级操作是涉及 DB2 实例维护的任何操作。实例级操作的典型例子为更新数据库管理器配置参数和启动数据库管理器。

  首先,我们看一下实例级操作。大多数实例级操作命令不会接受用户 ID 或密码作为输入部分。在这种情况下,DB2 使用客户端身份验证插件(即 client auth 插件)找到发出命令的当前登录用户。(这就是所谓的获得默认登录上下文。登录上下文可以是用户 ID/密码对或 Generic Security Services API [GSS-API] 凭证,如 Kerberos 票据)。一旦获取用户的身份,将使用 DB2 组成员查找插件(即 group plug-in)为用户生成组授权 ID 列表。

  在连接建立或实例连接中,用户 ID 和密码是可选的。如果用户选择不指定用户 ID 和密码,则 DB2 使用客户端身份验证插件来获得默认登录上下文。然后,将登录上下文发送到服务器以获取用户的组授权 ID。如果用户选择指定用户 ID 和密码,且未将身份验证类型数据库管理器配置参数指定为 CLIENT,则 DB2 执行下面的步骤:

表 1. 除 CLIENT 之外的身份验证的信息流

客户机 信息流(如果可用) 服务器
(客户端身份验证插件)
如果已实现 db2secRemapUserid 且身份验证插件是基于用户 ID/密码的,则重新映射用户 ID、密码和名称空间。请注意,该过程也适用于默认登录上下文情况。
   
发送登录上下文到服务器。 登录上下文 -> 服务器接收了登录上下文。
    (服务器端身份验证插件)
验证登录上下文(验证用户 ID 和密码或 GSS-API 凭证,如 Kerberos 票据),并获取用户的授权 ID。
    获取正在使用服务器上组成员查找插件的用户的组授权 ID。

  如果在数据库服务器上将身份验证类型指定为 CLIENT 身份验证,则执行下面的步骤:

表 2. CLIENT 身份验证的信息流

客户机 信息流(如果可用) 服务器
(客户端身份验证插件)
如果已实现 db2secRemapUserid 且身份验证插件是基于用户 ID/密码的,则重新映射用户 ID、密码和名称空间。请注意,该过程也适用于默认登录上下文情况。
   
(客户端身份验证插件)
验证登录上下文(验证用户 ID 和密码或 GSS-API 凭证,如 Kerberos 票据)。
   
发送用户 ID 到服务器。 user ID -> (服务器端身份验证插件)服务器接收了用户 ID 并获取用户的授权 ID。
    获取正在使用服务器上组成员查找插件的用户的组授权 ID。

  建议的最小完备测试

  基于前文所述的安全性插件职责,建议安全性插件至少应进行下面的测试:

  1. 使用未授权的用户,尝试执行实例级操作,如获得数据库管理器配置参数。此操作应该失败。
  2. 使用授权的用户,尝试执行实例级操作。此操作应该成功。
  3. 使用有效的用户 ID 和密码,建立数据库连接,并尝试使用授予其中一个组授权 ID 的特权。此操作应该成功。
  4. 尝试使用无效的用户 ID 或无效的密码进行连接。此操作应该失败。
  5. 尝试不指定用户 ID 和密码而进行连接。此操作仅当客户机和服务器处于同一个机器上时才能进行,且在定制的安全性插件中没有执行任何特殊的限制逻辑。这样确保定制的安全性插件将正确的登录用户凭证返回到 DB2。
  6. 如果正在实现定制的组成员查找插件,则请确保 db2secGetGroupForUser API 了解授权 ID,并且始终是大写的,无论定制的身份验证插件可能返回大小写混合或小写授权 ID。

  安全性插件 loader

  安全性插件 loader 程序允许模拟 DB2 对上述建议测试的响应。这对于断定某个特定问题是由插件中的代码造成的,还是由 DB2 引起的是非常有用的。

  程序输入为:

  • -c option:客户端身份验证插件的全限定路径和插件名称。
  • -s option:服务器端身份验证插件的全限定路径和插件名称。
  • -g option:组成员查找插件的全限定路径和插件名称。
  • -u option:用户 ID。
  • -p option:密码。(对于 GSS-API 或 Kerberos,这是用于获得用户凭证的密码。)
  • -d option:数据库名称。
  • -n option:新密码。
  • -a option:用户授权 ID。

  启动或执行 loader 时,根据需要加入三个指定的安全性插件(客户端身份验证插件、服务器身份验证插件和组成员查找插件),并且确定身份验证插件类型(例如基于用户 ID/密码、基于 Kerberos 或基于 GSS-API)。调用每个插件的初始化函数,且检索每个插件的全部函数指针。

  基于所指定的选项组合,将执行下面四个测试类型。

  为了简单起见,该 loader 不支持客户端身份验证测试,且不为定制的插件(例如 db2secGetConDetails)提供 get Client connection details 回调函数。为插件提供了 db2secLogMessage,但输出直接到达标准输出(屏幕)。

  这个 loader 提供了下面四个测试功能,用来模拟安全性插件在 DB2 环境中调用序列完全相同的 API 的用法。


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3