使用 InfoSphere Guardium 保护和增强 Netezza 数据仓库设备

本文将建立一个固化、受到监控和保护的 Netezza 环境的基础。为实现这样一个环境,我们使用了 IBM 的数据库活动监控和审计解决方案 InfoSphere® Guardium®。使用 Guardium 加固 Netezza 需要多个步骤:第一步是从安全性和用户访问管理角度进行基本的初始设置,包括用户、组和权限的配置。第二步是利用 Guardium Vulnerability Assessment 扫描环境,查看是否具有特定于 Netezza 的不安全配置和权限。第三步是详细介绍如何通过在 Netezza 配置中进行适当调整来解决一些失败的漏洞评估测试。最后一步是确保在第一和第三阶段中构建的最优权限配置未被篡改。Guardium Entitlement Reports 将用于审计 Netezza 用户管理。到现阶段为止,我们已经使用 InfoSphere Guardium 通过持续评估构建了一个固化的 Netezza 设备。

Benjamin G。 Leonhardi, 软件工程师, IBM

作者照片:Benjamin LeonhardiBenjamin Leonhardi 是位于德国 Boeblingen 的 IBM Research & Development Lab 的 InfoSphere Warehouse 数据挖掘方面的软件工程师。他从事挖掘可视化、文本挖掘和挖掘报告解决方案方面的工作。



Saeid Modares, 解决方案专员, IBM

Saeid ModaresSaeid Modares 是 IBM Toronto Lab 的 InfoSphere Optim and Guardium Technology Ecosystem 团队的一名解决方案专员。他是 Guardium 技术主管,负责向新客户交付解决方案。他从事过的工作包括 InfoSphere Guardium 和 InfoSphere Optim 产品的技术销售咨询、概念验证、实现和业务合作伙伴支持。



2012 年 12 月 07 日

保护和加固数据环境

要建立一个安全而固化的数据环境,需要处理数据库安全性的方方面面。使用用户和组权限限制数据访问是需要为任何新的或现有数据环境关注的一个数据库活动示例。类似地,许多开箱即用的设置可能无法为给定数据环境提供最优的安全配置。这些设置中有一些是特定于平台的,需要专家知识才能实现最佳配置。除了持续更新环境和频繁识别数据库应用程序漏洞之外,还建议对影响数据环境安全性的所有组件进行评估。

InfoSphere Guardium Database Vulnerability Assessment 提供一种检测多种数据库漏洞并推荐修复方案的解决方法,其中包括不安全的配置和对象权限,弱密码和补丁缺失。通过数据库保护服务进行定期更新可确保测试基于最新的行业最佳实践,包括 CIS 和 STIG 以及供应商发布的重要更新。

产品基于成熟的 Guardium 架构,运行于安全的、经过加固的 Guardium 设备之上。评估测试和结果存储在设备上,可通过一个安全的 Web 界面加以访问。解决方案的非侵入独立性质消除了对数据服务器的性能影响。它还能确保在数据库活动与数据库管理任务之间真正实现权责分离。

除了全面的 Vulnerability Assessment 解决方案之外,Guardium 还提供 Entitlement Reports 来审核敏感的 Netezza 用户和组权限。这些报告提供了用户和组权限的屏幕截图,包括访问权限、对象权限和特定于 Netezza 数据仓库环境的系统权限。

一个安全的 Netezza 环境需要一个初始的数据库安全配置和相关的操作系统配置,且需要创建用户和组以及访问权限分配。这一过程应当基于安全最佳实践和漏洞评估结果及其建议。在完成初始设置之后,还需要重复测试和评估权限和配置。必须审查权限变更或调优配置偏离,并呈报它们,以便对它们进行修复。

已完成的保护和加固数据环境的过程将应用于 Netezza 数据仓库设备。有关 Netezza 和 Guardium 配置的详细信息,将会随场景示例一同讲解。


Netezza 安全基础

Netezza 安全性类似于其他数据库,并拥有相同的基本概念。主要挑战是准确安全地验证用户身份并设置访问权限,这样一来用户就只能看到和修改其有权限操作的数据库对象。这两个问题的解决方法与其他数据库类似,不过稍有不同。Netezza 与其他数据库之间的一个不同之处在于,它是一个包含服务器硬件、操作系统和数据库软件的设备,因此我们需要讨论所有组件。

OS 安全性

Netezza 数据仓库设备上的 OS 是一个经过修改的 Red Hat Linux®。通常用户只能对 OS 进行初始修改;例如,程序包管理由 Netezza 支持处理。默认情况下,一个 Netezza 设备有两个 OS 用户:

  • ROOT:仅在应用 Netezza 固件和操作系统补丁时使用
  • NZ:数据库软件的所有者

可以创建其他用户,比如进行开发或数据移动的用户。在这种情况下,应当遵循基本的 Red Hat 安全准则。将对设备的直接访问减少到最低很重要。

用户身份验证

Netezza 数据库用户由数据库管理,与 OS 用户无关。默认情况下,用户身份验证由数据库软件本身处理。可以使用 LDAP,不过这不在本文的讨论范围之内。Netezza 数据库软件最初构建于 PostgreSQL 之上,共享了大量特性,尤其是用户安全性等管理特性。Netezza 提供了各种高级功能来限制用户访问,其中一些我们会予以讨论。

用户和组

Netezza 设备在出厂时有一个单用户 ADMIN,这是数据库的超级用户,拥有所有可能的权限和一些特殊优势,比如一套储备的系统资源。ADMIN 仅在进行初始设置和出现突发事件时使用。在一个常规的 Netezza 设备中,您可以创建各种用户。您可以基于任务创建用户,不过他们通常应当与其真实世界的人物角色有关联,以提高审计的可能性。

Netezza 还支持组,使用组来创建具有特定权限集的用户角色。有一个特殊的组 (PUBLIC),每个已创建用户都属于这个组。它始终存在,无法删除。PUBLIC 组是将权限赋予所有数据库用户的一种方式。您应当限制赋予 PUBLIC 组的权限。

Netezza 数据库

每个 Netezza 设备都有一个 Netezza Performance Software (NPS) 运行实例,NPS 是助力 Netezza 数据仓库设备的数据库软件。不过它可以有多个数据库。与其他数据库系统相比之下,这些数据库与物理对象无关。他们是数据库对象的逻辑分组,用于管理和设置权限。例如,您会有一个与应用程序或项目相关的数据库。每个 Netezza 系统都有一个名为 SYSTEM 的特殊数据库。该数据库包含系统目录,从某种程度上讲,它是凌驾于系统中其他数据库之上的一个全局数据库。用户应当拥有对 SYSTEM 数据库的最低限度的访问权。

访问权限

在安全验证用户身份之后,系统需要确保该用户仅能够访问和修改用户有权限操作的数据库对象。和其他数据库系统一样,这是通过访问权限完成的。在 Netezza 中有两种类型的访问权限:管理权限和对象权限。管理权限与备份、还原或硬件管理等管理任务相关。它们没有绑定到特定数据库对象。对象权限与特定数据库对象相关。

可以使用 GRANT 命令授予用户或组权限。权限始终是可以附加的,这意味着每个用户都有直接授予他的所有权限,以及授予给其所属的所有组的所有权限。可以使用 REVOKE 命令删除一个组或用户的权限,不过这会删除属于该组的所有用户的权限。

Netezza 中的访问权限可以是数据库本地的或者全局的,也就是说,可以将它们应用于系统中的每一个数据库。要全局赋予权限,需要在连接到 SYSTEM 数据库的同时授予权限。要赋予仅针对特定数据库的权限,需要在执行 GRANT 之前连接到该数据库。

除了 GRANT 之外,Netezza 中还有第二个用于提供权限的概念:对象所有权。Netezza 中的每个数据库对象都有一个所有者,默认情况下,所有者是对象的创建者。所有者拥有对象的所有权限。这对于数据库特别有用,因为所有者可以充当数据库管理员,而不影响其他数据库或 SYSTEM 数据库。


配置 Netezza 用户访问和安全性

在重新获得一个 Netezza 设备时,OS 层通常提供了很好的安全性默认设置,因此惟一关键的一步是更改 OS 用户帐户的密码。因此,我们将重点设置数据库安全性。我们会创建一些初始用户、组和权限,就像您在接收一个新 Netezza 设备时做的那样。

Netezza 中的用户和组是全局对象,因此可以在每个数据库中看到它们。在创建表和加载数据之前,您需要创建一个数据库。通常,数据库会引用您的仓库环境中的一个项目或应用程序。我们的数据库命名为 REPORTDB,它将包含用于一组商业智能报告的表。

我们将创建三个用户:

  • MARK:该用户将是数据库的所有者,使其成为该数据库的管理员。
  • MARIA:该用户将能够修改数据库中的数据,拥有加载和修改数据的所有权限,但无法更改数据库对象。
  • KARL:该用户将是一个只读用户。例如,他可以从 IBM Cognos 这样的报表软件访问内容。他将能够从数据库中读取数据,但无法修改任何数据库对象或数据。

我们没有直接将权限授予这些用户,而是建立两个组,以便稍后可以随意添加和删除用户。由于我们预计该数据库不会有多个管理用户,所以我们将为该角色创建一个特殊的组。

在这里,我们将创建两个组:

  • REPORTRW:这是该数据库的读写访问组。成员可以修改和读取数据库表中的数据。
  • REPORTRO:这是该数据库的只读访问组。成员只能读取数据库中的数据,无法修改任何数据。

最初,我们需要作为 ADMIN 用户登录。在 NZSQL 控制台的提示中,您可以看到连接的数据库以及您以其身份登录进来的用户。我们首先需要做的是创建 REPORTDB:

SYSTEM(ADMIN)=> CREATE DATABASE REPORTDB;

下面我们将创建三个用户:

SYSTEM(ADMIN)=> CREATE USER MARK WITH PASSWORD 'markspass';
SYSTEM(ADMIN)=> CREATE USER MARIA WITH PASSWORD 'mariaspass';
SYSTEM(ADMIN)=> CREATE USER KARL WITH PASSWORD 'karlspass';

然后我们需要创建组,在创建期间添加用户。我们总是可以使用 ALTER 语句稍后进行修改:

SYSTEM(ADMIN)=> CREATE GROUP REPORTRW WITH ADD USER MARIA;
SYSTEM(ADMIN)=> CREATE GROUP REPORTRO WITH ADD USER KARL;

下面我们可以设置必要的权限。首先,将 MARK 设置为数据库的所有者:

SYSTEM(ADMIN)=> ALTER DATABASE REPORTDB OWNER TO MARK;

MARK 现在是 REPORTDB 的所有者,拥有对数据库以及所包含的所有数据库对象的所有权限。这是委派管理职责的一种便利方式。MARK 可以处理针对该数据库的所有管理任务,而不干扰其他数据库。甚至可以使用工作负载管理减少用户或组可以使用的系统资源量。如果您希望在生产数据库所在的同一系统上运行一些开发数据库,这会非常重要。

下面我们会将必要的权限添加到只读组。我们希望他们能够从 REPORTDB 数据库中的数据库表进行读取,而无需访问其他任何数据库。为此,我们需要连接到 REPORTDB 数据库。在连接到 SYSTEM 数据库时执行的任何 GRANT 语句都将会是全局的,也就是说,会将它应用于设备中的所有数据库:

SYSTEM(ADMIN)=> \c REPORTDB

Netezza 有一个独特的权限 LIST,允许用户查看对象,且是连接到数据库所必需的。使用数据库的所有用户在该数据库上至少需要拥有 LIST 权限:

REPORTDB(ADMIN)=> GRANT LIST, SELECT ON REPORTDB TO REPORTRW, REPORTRO;

对于数据库中的表、视图和同义词,我们的组需要使用 LIST 和 SELECT 权限。对于客户表等特定数据库对象或 TABLE 等对象类,可以赋予对象权限:

REPORTDB(ADMIN)=> GRANT LIST, SELECT ON TABLE, VIEW, SYNONYM TO REPORTRO, REPORTRW;

由于我们在连接到 REPORTDB 时执行了 GRANT 命令,所以它是一个本地权限。这意味着组成员可以列出 REPORTRD 数据库(而非其他数据库)中的所有表并从中进行选择。如果我们希望在所有数据库中全局赋予该权限,我们可以在连接到 SYSTEM 数据库时执行该命令。应当谨慎赋予全局权限。下面我们将设置 REPORTRW 组的权限:

REPORTDB(ADMIN)=> GRANT LIST, SELECT, UPDATE, DELETE, INSERT, TRUNCATE 
                        ON TABLE TO REPORTRW;

该命令允许 REPORTRW 组的成员自由读取和修改 REPORTDB 表的内容,而不会变更表的结构。

我们还将赋予加载数据所需的权限。在 Netezza 中加载数据需要能够创建外部表。在加载过程中,有时需要创建临时表来进行 ELT 数据转换,因此我们还将赋予创建临时表的权限:

REPORTDB(ADMIN)=> GRANT CREATE EXTERNAL TABLE, CREATE TEMP TABLE TO REPORTRW;

最后,我们将允许数据修改用户整理表。当 Netezza 中的行被删除或更新时,不会立即从磁盘中删除它们,而是在本地删除它们。可以使用 GROOM 命令清理这些历史行版本。这也许是 GROOM 命令最重要的任务,但不是它的惟一任务。尽管这是一个管理任务,但也有理由让修改数据库的用户同样运行 GROOM 命令。这会占用相当大的系统资源量,因此,应当让专业用户执行此操作:

REPORTDB(ADMIN)=> GRANT GROOM ON TABLE TO REPORTRW;

我们完成了 REPORTDB 数据库的基本安全设置。我们有能够修改数据库对象的数据库所有者;有可以修改数据的用户组;还有可以运行报告和分析的只读用户组。这是一个典型设置,但它取决于您的要求。Netezza 是一个仓库设备,因此用户数据的修改通常由少量管理用户在一个受控环境下执行,例如在每周的事务数据加载中执行,或者通过自动化的慢速馈送脚本来执行。这一点尤为重要,因为 Netezza 极其易于使用,且仅需要少量管理工作。因此在许多情况下,读写组不是必要的,且数据修改可由数据库所有者处理。

不同的情况可能需要不同的设置,例如开发环境将需要一个高级用户组来修改数据库对象、创建存储过程,等等。

最后,最好创建一个具有最多管理权限的全局管理用户。ADMIN 用户在许多情况下很特殊,应当仅用于突发事件。例如,它有与其相关的一组储备系统资源。因此,一个好的实践方法是创建一个具有所有管理和对象权限的用户,在大多数任务中使用该用户,而非 ADMIN 用户。但该步骤不是必需的:

SYSTEM(ADMIN)=> CREATE USER NEWADMIN WITH PASSWORD 'adminpass';
SYSTEM(ADMIN)=> GRANT ALL ON AGGREGATE, DATABASE, FUNCTION, GROUP, PROCEDURE, 
                USER, TABLE, EXTERNAL TABLE, SYSTEM TABLE, SEQUENCE, 
                SYSTEM VIEW, MANAGEMENT VIEW, MANAGEMENT TABLE, SYNONYM, 
                VIEW, MATERIALIZED VIEW TO NEWADMIN WITH GRANT OPTION;
SYSTEM(ADMIN)=> GRANT all ADMIN TO NEWADMIN WITH GRANT OPTION;

配置并运行 Vulnerability Assessment

Vulnerability Assessment 在 Guardium 设备上运行。可以将设备部署为硬件设备或虚拟设备,部署为 VMware 虚拟机。这不影响 Vulnerability Assessment 的配置或功能。有关如何安装和部署 Guardium 设备的细节,请参阅 安装指南

本文假定 Guardium 设备已经完成基本配置,并且您了解 Guardium 设备基础知识,比如访问设备的方式。

可以通过设备的 Web 界面访问 Vulnerability Assessment。登录到 Web 界面并选择 Assess/Harden 选项卡,然后选择 Vulnerability Assessment 选项卡。如图 1 中所示,可以通过该门户网站访问评估配置和结果。

图 1. Vulnerability Assessment 界面
图中显示 Vulnerability Assessment 界面

Vulnerability Assessment 评估了数据库配置和用户权限。有关数据库这些方面的信息存储在系统表中,或者可以存储在 OS 级别访问的文件和脚本中。只要拥有有效凭据,就可以通过数据库连接访问存储在系统表中的信息。通过脚本和文件提供的配置可能需要 OS 级别的更高访问权限。

为了提供 OS 级别的访问,我们部署了 Configuration Audit System (CAS)。CAS 客户端是安装在数据服务器上的一个小型软件代理,它定期轮询相关配置文件或 OS 脚本输出,并将数据发送到 Guardium 设备上运行的 CAS 服务器。Vulnerability Assessment 使用该信息对数据库系统进行全面评估。

CAS 客户端代理有一个简单的命令行安装。该安装可以通过调用安装脚本、提供 Java™ 路径和安装目录来完成。注意,必须在您的 Netezza 设备上安装 Java 运行时环境。必须在 root 帐户下运行安装。图 2 显示 CAS 客户端代理安装示例。

图 2. CAS 安装
图中显示 CAS 安装

在安装 CAS 之后,需要编辑 guard_tap.ini 配置文件。该文件可以在 %cas_install_dir%/etc/guard_tap.ini 下的 CAS 安装目录中找到。必须编辑两个条目:Guardium 设备的 IP 地址 sqlguard_ip;以及主机 Netezza 设备的 IP 地址 tap_ip。这些参数最初被设置为 NULL。在图 3 中,guard_tap.ini 的 sqlguard_ip 和 tap_ip 条目被编辑为有效的 IP 地址。

图 3. 编辑 guard_tap.ini 配置文件
图中显示了 guard_tap.ini 配置文件的编辑

要验证 CAS 客户端代理的状态,需要以管理员身份登录,并在管理控制台中检查 Local Taps 下的 CAS Status。图 4 显示了已经安装和配置的 CAS 客户端代理的状态。

图 4. CAS 状态
图中显示了 CAS 状态

下面我们应继续配置 Vulnerability Assessment。在作为 Guardium 用户登录之后,通过单击 Assess/Harden 选项卡然后单击 Vulnerability Assessment 访问 Vulnerability Assessment 应用程序,然后确定要评估的数据库。

在 Security Assessment Finder 面板上,单击 New。这会调出 Security Assessment Builder,如图 5 所示。

图 5. Security Assessment Builder
图中显示了 Security Assessment Builder

输入适当的描述。您可以忽略观测测试的参数。观测测试使用审计数据,仅当使用 S-TAP 软件代理和适当安装的安全策略执行数据库活动监控时该数据才可用。对于该场景,假定 Netezza 设备上没有部署 Guardium Database Activity Monitoring (DAM)。

为了能够执行数据库评估,需要具有有效凭据的数据源。要配置数据源,请单击 Add Datasource。在 Datasource Finder 面板上,单击 New。为具有系统表访问权限的用户输入数据凭据。Guardium 提供了一些脚本来创建需要最低权限即可运行漏洞评估测试的 Netezza 用户。这些脚本可作为 Database User Role Definitions 包的一部分进行下载。图 6 显示了数据源定义示例。

图 6. 数据源定义
图中显示了数据源定义

除了数据库连接之外,我们还需要指定哪些数据库和 OS 对象将由 CAS 监控。在评估测试中会使用来自 CAS 监控项的数据。Guardium 为 CAS 要监控的每个数据环境提供了一个项目集。这些集合被称为模板

要应用一个 CAS 模板,请单击 Security Assessment Builder 面板中的 CAS Support。打开 CAS Assessment Support 之后,从 Select a Template Set 下拉菜单中选择 UNIX/Netezza Assessments,然后单击 Add。模板集会被添加到监控的当前实例下方,如图 7 所示。单击 Save 保存配置。

图 7. CAS Assessment Support
图中显示了 CAS Assessment Support

此时我们准备选择并配置将针对 Netezza 设备运行的测试。

有多个测试可供选择作为评估测试来运行。单击 Security Assessment Builder 中的 Configure Tests,调出 Assessment Test Selections 面板。每个数据库平台均由多组测试。选择一个测试并单击 Add Selection,将测试添加到顶部的 Tests for Security Assessment 部分。图 8 显示针对测试选择的所有特定于 Netezza 的测试。

图 8. 评估测试选择
图中显示了 CAS 评估测试选择

可以调整一些测试,覆盖默认设置,或者为用户/组权限评估添加例外情况。例如,调整授予用户和/或组的全局管理权限能够让我们分配例外组,如图 9 所示。这将允许我们指定选择让其拥有全局管理权限的用户列表(在本例中是 Netezza Trusted Users)。因此,具有全局管理权限的这些用户不会触发该评估测试失败。

图 9. 调优评估测试
图中显示了评估测试调优

我们将为所有测试选择默认的设置并运行评估。要运行评估,请选择在 Assessment Finder(如图 10 所示)中创建的漏洞评估,并选择 Run Once Now

图 10. 运行中的评估
图中显示了运行中的评估

评估的状态显示在 Guardium Job Queue 下 Security Assessment Finder 右边的面板中。图 11 显示运行中的评估。当评估完成时状态将变为 “Complete”。

图 11. Guardium Job Queue 中的评估
图中显示了 Guardium Job Queue 中的评估

评估完成之后,在 Security Assessment Finder 中选择评估并单击 View Results。图 12 显示了漏洞评估报告示例。

图 12. 评估结果
图中显示了评估结果

基于测试结果给定合格分数。每个测试都会收到有关是否通过的报告,如果无法完成测试,则会标记为出错。对于失败的测试,还会提供一个建议,指出如何修复导致测试失败的问题。接下来,我们将处理这样一些失败测试,以提高 Netezza 设备的安全性并减少漏洞。


处理 Netezza 设备漏洞

下面我们讨论并处理 Guardium Vulnerability Assessment 识别出的一些漏洞。根据您的环境,您可能不需要处理遇到的所有漏洞,而是可以定义例外情况。

密码长度

Guardium 强调的第一个安全问题是缺少的最小密码长度。Netezza 设备自带好的默认安全设置,不过在具有大量用户且访问量较大的环境中,可能很有必要实施一系列密码控制。

图 13. 密码长度
图中显示了密码长度

Netezza 提供以下功能:

  • 指定最小密码长度
  • 指定密码的复杂程度
  • 在大量失败的登录尝试之后锁定用户帐户
  • 在规定时间段之后进行密码变更
  • 限制用户在特定时间段的访问

为了对所有用户帐户提供一致的密码控制,用户身份验证也可以交给 LDAP 服务器。不过这不在本文的讨论范围之内。

如上所述,Netezza 构建于 PostgreSQL 数据库之上,因此在 PostgreSQL 配置文件中找到许多需要的变更并不足为奇。要更改最小密码长度,需要作为用户 nz 连接到 Netezza 主机。导航到包含配置文件、日志文件、系统目录等的文件夹:cd /nz/data

现在我们需要修改 postgresql.conf 文件。例如,使用 VI,您会找到文件结尾处的参数:

#password_length = 4      # minimum value is 4

取消注释参数,并将值最小设置为 8,以满足 Guardium 要求:

password_length = 8      # minimum value is 4

保存文件之后,需要重启 Netezza 数据库软件来启用设置:

[nz@netezza data]$ nzstop;nzstart

无效尝试

Guardium 检测为漏洞的第二个设置是无效尝试设置。执行该设置是为了确保用户在进行一系列错误的登录尝试之后锁定帐户。这可以确保在强力攻击下,不安全的密码不会被破解。

图 14. 无效尝试
图中显示了无效尝试

该设置可以在与最小密码长度设置相同的配置文件 postgresql.conf 中找到。默认情况下禁用该设置:

#invalid_attempts = 0     # zero - no limit

通过删除 # 字符取消注释代码行,将值改为 3 来满足 Guardium 要求:

invalid_attempts = 3     # zero - no limit

同样您需要重启 Netezza 设备来启用该设置:

[nz@netezza data]$ nzstop;nzstart

如果用户连续三次输入了错误密码,那么帐户会被锁定,需要管理员使用以下命令来解锁:

SYSTEM(ADMIN)=> alter user %username% reset account;

密码身份验证不使用明文

图 15. 密码身份验证不使用明文
密码身份验证不使用明文

这一发现实际上更为复杂。Netezza 允许您为不同的 IP 范围指定不同的连接类型。您可以指定是否以明文或散列形式传输密码,您还可以指定 IP 范围是否需要使用安全加密 SSL 连接来进行连接。连接类型存储在 /nz/data/pg_hba.conf 文件中,可以直接在这里对它们进行编辑,不过不鼓励这么做。您应当使用 Netezza 提供的 SQL 管理命令来管理连接类型。

要显示当前定义的连接,您需要以管理员身份连接到 Netezza 设备。运行以下命令,显示所有可用的连接类型:

SYSTEM(ADMIN)=> show connection;

在新系统上,您应当看到如下所示的内容:

SYSTEM(ADMIN)=> show connection;
CONNID | CONNTYPE | CONNDB | CONNIPADDR |   CONNIPMASK    | CONNAUTH
-------+----------+--------+------------+-----------------+----------
     1 | local    | all    |            |                 | trust
     2 | host     | all    | 127.0.0.1  | 255.255.255.255 | password
     3 | host     | all    | 0.0.0.0    | 0.0.0.0         | md5
(3 rows)

可以为同一 IP 范围定义多个连接类型。在这种情况下会使用第一个相符的条目。在我们的示例中,有三种类型:内部本地类型、面向本地主机用户的明文密码验证,以及面向外部用户的 md5 散列消息认证。

您可以忽视本地连接,因为这由 Netezza 在内部使用。Guardium 对连接类型 2 中主机上的明文(密码)验证发出警告。这不是明显的安全风险,因为无密码通过网络传输。因此,我们可以将该漏洞定义为例外情况。

替代方案是将连接 2 的连接类型改为 md5。我们执行该操作是为了演示如何使用连接类型。记住连接的顺序是非常重要的。将会应用从顶部开始符合入栈调用的 IP 地址的第一个连接。首先需要提供更多限制性连接类型。第二个问题是没有 ALTER CONNECTION TYPE 命令,所以无法更新第二个连接类型。我们只能删除它,然后重新添加。这会改变连接的顺序。

为在保持连接的顺序不变的同时更新连接类型 2,我们需要删除并重新创建连接类型 3,这样一来就能保持顺序不变。删除连接类型 2 和类型 3:

SYSTEM(ADMIN)=> drop connection 3;
SYSTEM(ADMIN)=> drop connection 2;

下面使用改为 md5CONNAUTH 参数重新创建连接类型 2:

SET CONNECTION HOST DATABASE 'all' IPADDR '127.0.0.1' IPMASK '255.255.255.255' AUTH md5;

重新创建之前的连接类型 3:

SET CONNECTION HOST DATABASE 'all' IPADDR '0.0.0.0' IPMASK '0.0.0.0' AUTH md5;

现在您将所有连接(甚至本地连接)的授权改为了 MD5。

图 16. 授予 Public 组的对象权限
图中显示授予 Public 组的对象权限

Netezza 中的 PUBLIC 组是一个包含所有系统用户的特殊用户组。添加到该组的任何权限都可以提供给所有用户。通常您应当尽量少赋予与 PUBLIC 组相关的权限。要了解哪些权限与 PUBLIC 组相关,可以通过 nzsql 执行以下命令:

SYSTEM(ADMIN)=> \dpg PUBLIC
Group object permissions for group 'PUBLIC'
Database Name |           Object Name            | L S I U D T L A D B L G O E
C R X A | D G U T E X Q Y V M I B R C S H F A L P N S
---------------+----------------------------------+-----------------------------
--------+---------------------------------------------
 GLOBAL        | _V_JDBC_TABLETYPES2              | X X
        |
 GLOBAL        | _V_GROUP_PRIV                    | X X
        |
 GLOBAL        | _V_USER_PRIV                     | X X
                ...

您可以看到,在默认情况下,PUBLIC 组可以阅读大量视图。其中一些视图似乎包含敏感信息,比如表名称、用户权限、甚至是系统中运行的查询。这明显违反了安全准则,因为查询可以(比如在 WHERE 条件中)包含敏感信息。然而在从视图中选择数据时,Netezza 确保不 会让用户访问那些不应看到的信息。视图为每个用户返回不同的信息,且不会显示用户不应当访问的信息。

视图是连接 JDBC 和 ODBC 以及使用 NZAdmin 图形用户客户端所必需的,不应从 PUBLIC 组将其删除。我们会将这些对象的例外情况添加到 Guardium VA。这样做是可行的,因为我们仍然希望在添加到 PUBLIC 组的其他任何权限时收到警告,并且可能向每位用户提供对敏感信息的访问权限。

要查看未通过测试的对象的完整列表,请单击 Object privileges granted to public 测试标题。

图 17. 授予 Public 组的对象权限
图中显示了授予 Public 组的对象权限

要创建这些对象的例外情况,从 Assessment Test Selection 列表选择 Assessment Test Tuning for the Object privileges granted to public (Netezza)。从 Exception group 下拉菜单中选择 Netezza Allowed Grants to Public

图 18. 测试调优
图中显示了测试调优

单击下拉菜单右边的小图标可打开组编辑器。将如图 22 所示的列表中的对象添加到该组,如图 24 所示。保存添加有例外组的测试,并重新运行漏洞评估测试。添加到该组的对象会从测试中排除,不过会标记其他未通过测试的对象。

图 19. 例外组
图中显示了例外组

我们看了一下 Guardium 在空系统中识别的一些漏洞。有一些很容易修复;其他的实际上不是漏洞,可以放入例外列表。经过这些初始修改之后,我们可以定期运行漏洞评估报告,并在系统中有新增漏洞时收到通知。


审计 Netezza 使用权限

Vulnerability Assessment 检测不安全的用户权限,并提出改进用户和组权限的建议。不过需要持续审计用户权限。Guardium Entitlement Reports 简化了各种用户权限的审核和审计。可以通过 View 选项卡访问权限报告。

图 20. DB 权限报告
图中显示了 DB 权限报告

下面是特定于 Netezza 的 DB 权限报告列表:

  • Netezza Obj Privs Granted
  • Netezza Admin Privs by DB Username
  • Netezza Obj Privs by DB Username
  • Netezza Obj Privs by Group
  • Netezza Admin Privs Granted
  • Netezza Group/Role Granted to User
  • Netezza Global Admin Privs To Users and Groups
  • Netezza Global Obj Privs To Users and Groups
  • Netezza Admin Privs By DB Username Group
  • Netezza Admin Privs by Group

权限信息基于来自相关系统表的数据。因此,要填充权限报告,需要提供一个具有适当凭据的数据源来访问这些系统表。要配置数据的上传,请打开 Monitor/Audit 选项卡下的 Build Reports 选项卡并单击 Custom table builder

图 21. 图 21. 报告构建选项
图中显示了报告构建选项

从列表中选择需要的权限报告,然后单击 Upload Data

图 22. 图 22. 自定义表
图中显示了自定义表

添加一个数据源,具体操作是单击 Add Datasource 并选择一个现有数据源,或者输入访问相关系统表所需的凭据,创建一个新的数据源。使用 Scheduling 工具安排数据导入频率,或者对于即席数据上传的话,单击 Run Once Now。下图显示配置了 Import Data 面板的示例。

图 23. 图 23. 上传数据
图中显示了数据上传

报告将填充有来自 Netezza 设备的数据。下图显示填充了样例权限数据的 Netezza Group/Role Granted to User 报告示例。

图 24. 图 24. 填充的权限报告
图中显示了已填充的权限报告

接下来我们可以审计用户配置,确保所做的任何变更都是可接受的。


结束语

本文阐述了使用 Guardium 保障 Netezza 设备安全性的基本概念。我们描述了基本的 Netezza 安全模型,提供了一个初始安全性设置示例。然后我们配置了 Netezza 设备并使用 Guardium Vulnerability Assessment 对其执行了漏洞评估测试,讨论并解决了大量识别出的漏洞。最后,我们详细介绍了 Guardium 权限报告。

通过将漏洞评估和权限报告结合使用,企业可以监控和识别对 Netezza 安全设置所做的具有潜在危险的更改,该更改可能使敏感的客户信息处于风险之中。本文阐述了使用 Guardium 保障 Netezza 设备安全性的基本概念。更高级的一些主题包括:实现 LDAP 身份验证,Netezza 中的行级安全性或 SSL 加密,实现审计和更高级的 Guardium 功能,比如限制访问敏感信息的 S-GATE 终止。

参考资料

学习

获得产品和技术

  • 使用可以直接从 developerWorks 下载的 IBM 试用软件 构建您的下一个开发项目。
  • 现在您可以免费使用 DB2。下载 DB2 Express-C,它是面向社区的 DB2 Express Edition 的一个免费版本,提供与 DB2 Express Edition 一样的核心数据特性,并且为构建和部署应用程序提供一个坚实的基础。

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management
ArticleID=851090
ArticleTitle=使用 InfoSphere Guardium 保护和增强 Netezza 数据仓库设备
publish-date=12072012