SQL30082N Attempt to establish connection failed with security
reason "24" ("USERNAME AND/OR PASSWord
INVALID"). SQLSTATE=08001
DB2 UDB 服务器上的 DB2 UDB 诊断日志(db2diag.log)中也会出现类似于下面这样的记录: 清单 2. 用户身份验证失败时 DB2 诊断日志中的消息:2005-07-09-16.18.33.546000-240 I729347H256
LEVEL: Severe
PID : 3888
TID : 604
FUNCTION: DB2 Common, Security,
Users and Groups, secLogMessage, PRobe:20
DATA #1 : String, 44 bytes
check password failed with rc = -2146500502
在 Windows 上,诊断日志可以在数据库实例主目录中找到,默认为 C:Program FilesIBMSQLLIBDB2。在 UNIX 上默认位置是 /DB2/db2dump,其中 是实例所有者的路径。 上一页1234567下一页 假如碰到这样的消息,一定要确认连接到数据库的用户或应用程序是否提供了合法的用户 ID 和口令。该用户 ID 和口令必须存在于执行用户身份验证的设施中(由目标 DB2 UDB 实例的 AUTHENTICATION 参数决定)。 授权 授权是决定指定用户 ID 对特定数据库对象和动作的访问和特权信息的过程。DB2 UDB 在内部存储和维护用户/组的授权信息。每当提交一个命令时,DB2 UDB 执行授权检查以保证您有执行该动作的正确特权。 特权可以授予特定的用户或者用户组。用户和组的定义本身同样在 DB2 UDB 外部定义。作为组成员的用户自动继续该组的特权。授予用户的特定权限优先于和该用户参与的任何组关联的特权,并且一直有效,即使后来从组中删除了用户。就是说,明确授予用户的特权必须明确收回。 多数数据库对象都由一组相关的权限,可使用 SQL 语句 GRANT 和 REVOKE 分配给用户和组。比如,下面的 SQL 语句将 ADM.ACCTABC 表的 SELECT 权限授予用户 bob:GRANT SELECT ON TABLE ADM.ACCTABC TO USER BOB。 一旦发出该语句,用户 bob 就可以提交引用该表的 SELECT 语句。类似的,下面的 SQL 语句从 clerks 组收回 ADM.LEGERS 视图的 INSERT 权限:REVOKE INSERT ON VIEW ADM.LEGERS FROM GROUP CLERKS。 只能收回以前授予的权限。关于能够授予用户和组的各种数据库对象特权的具体信息,请参阅 DB2 UDB 文当。 必须指出,非凡是对 DB2 UDB 新用户,GRANT 语句不会检验用户和组帐户是否存在于外部设施中。这意味着,可以把权限和数据库中存储的信息授予不存在的用户和组帐户。这就造成了一种错误的印象,即可以在 DB2 UDB 中定义用户和组。比方说,连接到 finance 数据库时可以发出下面的语句: 上一页12345678下一页 GRANT SELECT ON TABLE ADM.TAXCODE TO USER XYZ。 其中的 xyz 是一个任意的字符串,没有映射为外部安全设施中的已有用户,然后 DB2 UDB 就会在其 GUI 工具或者某些目录表中显示 xyz,如图 2 所示。但这并不意味着存在或创建了名为 xyz 的用户。 图 2. 向未定义用户授权后的表特权 图 1 下方显示了一个授权场景的例子。这个用户叫 bob,已经成功连接到数据库,现在尝试对表 ADM.TAXCODES 执行 SELECT 语句。DB2 UDB 查看其目录表,看看该用户是否被授予了这个表的 SELECT 权限。因为此权限已经授予 bob,DB2 UDB 答应执行 SELECT 语句。 假如用户未经授权而对某个对象执行一种操作,DB2 UDB 就会拒绝操作并向客户机应用程序返回错误信息。比方说,假如用户 bob 尝试向 ADM.TAXCODES 表中插入一行,但是没有足够的权限,就会返回下面的错误消息: 清单 3. 用户授权失败时 DB2 UDB 返回的消息:DB21034E The command was processed
as an SQL statement because it
was not a valid Command Line
Processor command. During SQL
processing it returned:
SQL0551N "BOB" does not
have the privilege to perform
Operation "INSERT" on object "ADM.TAXCODES".
SQLSTATE=42501
假如碰到类似的消息,一定要确认连接到数据库所提供的用户 ID 是否具有执行目标操作的适当权限。必须明确授予该用户此特权,或者该用户属于拥有该特权的组,或者该用户是超级用户。 超级用户 上一页123456789下一页 可以为某些用户组分配特定的实例和数据库权限。DB2 UDB 定义了超级用户授权的层次结构(SYSADM、SYSCTRL、SYSMAINT、SYSMON),每一种都具有执行治理操作子集的能力,比如创建数据库、迫使用户离开系统和对数据库进行备份。关于授权级别的具体讨论请参阅 DB2 UDB 文当(参见 参考资料)。 可以使用相关的实例级参数配置实例的授权(SYSADM_GRP、SYSCTRL_GRP、SYSMAIN_GRP、SYSMON_GRP)。每个参数可以设置为具有该授权的用户组名(在 DB2 UDB 外部定义)。 比如,假如定义组 snrdba 包含所有高级 DBA 用户帐户,就可使用下面的命令将 SYSADM_GRP 实例参数值设为 snrdba,从而使所有这些用户成为 SYSADM 超级用户: 清单 4. 更新 SYSADM_GRP 实例参数UPDATE DBM CFG USING SYSADM_GRP snrdba
db2stop
db2start
snrdba 组中的所有用户都将拥有和 SYSADM 授权级别关联的全部特权,从而能够执行授权级别所需要的全部治理任务。 以这种方式定义授权就可以区分 DB2 UDB 治理员和系统/网络治理员。比如,DBA 可能要求拥有 DB2 UDB 实例的全部治理授权,但不需要本地机器或网络的治理授权。在这种情况下,可以将该 DBA 的用户帐户添加到对系统/网络没有完全访问权限、但是对 DB2 UDB 实例有完全访问权限的组,只要在 SYSADM_GRP 实例参数中指定该组名即可。 在 Windows 上的 DB2 UDB 默认安装中,这些实例级超级用户授权参数(SYSADM_GRP、SYSCTRL_GRP、SYSMAIN_GRP、SYSMON_GRP))的值默认设为 NULL。这意味着超级用户权限被授予属于本地 Administrators 组的所有合法帐户。我们强烈建议明确将这些参数值改为合法的组名,以便防止未授权的访问。在 linux 和 UNIX 安装中,这不是一个大问题,因为 NULL 值默认为实例所有者的基本组,而基本组在安装后只包含实例所有者的用户 ID。 上一页12345678910下一页 还可以为用户分配一组数据库级的授权。数据库授权使用标准的 SQL GRANT 和 REVOKE 语句。关于这些数据库授权级别的更多信息,请参阅 DB2 UDB 文档(参见 参考资料)。 DB2 UDB 系统命令,如 db2、db2ilist、db2start、db2stop、db2iupdt 等,都是操作系统可执行文件。因此,运行这些命令的安全机制以文件的操作系统权限为基础。这些文件的权限在 DB2 UDB 安装时设置。 DB2 UDB 用户和组帐户命名规则 在 DB2 UDB 中,用户和组帐户必须遵守表 1 和 2 中所述的命名规则。这些限制是在定义帐户的外部设施中起作用的限制之外增加的。 表 1. 平台约束和限制 限制 Windows Linux/UNIX (1) Windows NT®、Windows 2000®、Windows xp® 和 Windows Server® 2003 现在实际上限制为 20 个字符。 (2) 假如不使用 Client 身份验证,对于连接到 Windows NT、Windows 2000、Windows XP 和 Windows Server 2003 的非 Windows 32 位客户机,在明确指定用户名和口令时支持使用超过 8 个字符的用户名。 表 2 显示了对所有平台的命名限制。 (3) DB2 UDB 内部使用名为 PUBLIC 的伪组,可以为其授权或者收回特权。PUBLIC 不是外部安全设施中定义的真正的组。它是把特权授予通过身份验证的任何用户的一种方式。 (4) 还有其他一些非凡字符也能使用,这取决于操作系统和在哪里使用 DB2 UDB。但是为了避免不一致性和潜在的问题,在数据库中命名对象时不要使用其他非凡字符。 上一页234567891011下一页 用默认用户 ID(如 db2admin)安装 DB2 UDB 并使用弱口令(或者根本没有)可能将系统置于风险中。很多计算机病毒、蠕虫和特洛伊木马的设计都利用了弱口令。比方说,很多这类程序都尝试使用常见口令如 “password”、“123456”、“111111”、“db2admin” 等获得对系统的访问。因此不要使用简单的口令很重要。 在验证用户时口令也很重要。比如,在 Linux 和 UNIX 操作系统上,未定义口令被作为 NULL 处理。没有定义口令的任何用户都被视作使用 NULL 口令。从操作系统的角度来看,这是一种匹配,用户经过验证后就能连接到数据库。 DB2 UDB 安装需要和创建的用户/组帐户 DB2 UDB 需要一个具有治理权的用户帐户来执行安装。该用户所需要的具体权限依靠于安装 DB2 UDB 的平台。默认情况下,DB2 UDB 在安装过程中要创建多个用户和组帐户。这些帐户用于 “拥有” 和启动在服务器上运行的各种 DB2 UDB 服务和进程。 这一节介绍在 Windows、Linux 和 UNIX 环境中安装 DB2 UDB 所需要的用户特权。还说明在 DB2 UDB 默认安装过程中创建的各种用户和组。 Microsoft Windows 操作系统上需要的用户和组帐户: 假如在 Windows 操作系统上安装 DB2 UDB,将需要下列用户帐户: 1、Installation 用户帐户。 2、DB2 Administration Server(DAS)用户帐户 。 3、DB2 UDB 实例所有者用户帐户。 Installation 用户帐户: 在运行 DB2 安装向导之前,需要定义一个安装用户帐户。该帐户可以是一个本地或域用户帐户。该帐户必须属于要进行安装的机器上的 Administrators 组。假如使用域帐户,安装帐户必须属于将要创建其他安装用户帐户的域的 Domain Administrators 组。也可使用内置的 LocalSystem 帐户进行 DB2 UDB Enterprise Server Edition 之外的其他所有产品的安装。 上一页3456789101112下一页 可以在安装之前定义其他用户帐户,也可以让 DB2 安装向导为您创建。所有用户帐户名必须遵守系统的命名规则和 DB2 UDB 命名规则。 DB2 Administration Server 用户帐户: DB2 Administration Server(DAS)需要使用本地或域帐户。DAS 是一种非凡的服务,支持 GUI 工具并帮助完成治理任务。DAS 有一个分配的用户帐户,在 DB2 UDB 加载时用于启动该服务。在 DB2 安装向导中,其中有一个屏幕(如图 3 所示)提示选择用于启动 DAS 服务的用户帐户。 图 3. 在 DB2 安装向导中指定 DAS 用户帐户 可以在安装 DB2 UDB 之前创建该用户帐户,然后在这里指定,也可以让 DB2 安装向导为您创建该帐户。默认情况下,向导将创建一个名为 db2admin 的新帐户(但是可以随意命名)。DAS 用户帐户也必须属于执行安装的机器上的 Administrators 组。假如让 DB2 安装向导创建新的域用户帐户,用于执行安装的用户帐户必须有创建域用户帐户的权限。 安装向导创建该帐户时自动授予下列用户权限: 1、作为操作系统的一部分。 2、调试程序。 3、创建 token 对象。 4、增加配额。 5、锁定内存页。 6、作为服务登录。 7、代替进程级的 token。 假如创建或指定了不同的帐户,一定要保证该帐户具有上述用户权限。为了保证正确设置了这些权限,打开 Windows 控制面板(Start > Settings > Control Panel)并双击 Administrative Tools 图标。双击 Local Security Policy 图标。对于上面列出的每种策略,保证该用户包含在授权的用户和组列表中。提供的口令不正确可能造成 DB2 UDB 启动过程中不能加载某些服务,有可能禁止执行特定的操作。 上一页45678910111213下一页 在安装过程中,还要告诉 DB2 安装向导使用同一个帐户(及指定给 DAS 的帐户)拥有和启动其他所有 DB2 UDB 服务。为此,一定要选中 “Use the same user name and password for the remaining DB2 UDB services(其他 DB2 UDB 服务使用同一用户名和口令)” 复选框(参见 图 3)。假如没有选中该复选框,向导就会提示选择拥有和启动创建的默认实例的用户帐户。其他所有 DB2 UDB 服务将使用内置的 Windows LocalSystem 帐户启动。 还要保证 DAS 用户帐户对环境中每个 DB2 UDB 系统具有 SYSADM 权限,这样在需要的时候可以启动或停止其他实例。默认情况下,在 Windows 环境中安装 DB2 UDB 后,属于 Administrators 组的任何用户都具有 SYSADM 权限。DAS 服务名称为 DB2DAS - DB2DAS00。 DB2 UDB 实例所有者用户帐户: 要拥有和启动 DB2 UDB 实例,需要一个本地或域帐户。可以在安装 DB2 UDB 之前创建 DB2 UDB 实例所有者用户帐户,也可以让 DB2 安装向导来创建。假如让 DB2 安装向导创建新的域用户帐户,执行安装使用的用户帐户必须具有创建域用户帐户的权限。该用户帐户也必须是执行安装的机器上 Administrators 组的成员。DB2 安装向导创建该帐户时自动授予下列用户权限: 作为操作系统的一部分: 调试程序、创建 token 对象、增加配额、锁定内存页、作为服务登录、代替进程级的 token。 假如创建或指定了不同的帐户,一定要赋予该帐户上述用户权限。为了保证正确设置了这些权限,打开 Windows 控制面板(Start > Settings > Control Panel)并双击 Administrative Tools 图标。双击 Local Security Policy 图标。对于上面列出的每种策略,保证该用户包含在授权的用户和组列表中。提供的口令不正确会造成 DB2 UDB 启动过程中无法加载服务,有可能禁止执行特定的动作。 上一页567891011121314下一页 在默认 Windows 安装中将自动创建一个名为 DB2 的实例。可以分别使用 db2icrt 和 db2idrop 工具程序创建其他实例或删除已有的实例。这些工具放在 DB2PATHsqllibin 目录中,其中 DB2PATH 是安装 DB2 UDB 的位置。运行这些工具程序必须使用具有本地 Administrator 权限的用户帐户。假如创建实例时通过参数提供用户帐户和口令,那么将使用该帐户拥有和启动该服务。假如没有提供用户帐户和口令,则使用 LocalSystem 帐户。比如,下面的命令将创建一个新实例 devinst,并赋予 LocalSystem 帐户拥有和启动该实例进程的权限: 清单 5. 在 Windows 中创建新的 DB2 UDB 实例db2icrt devinst。 修改帐户信息: 安装后可以修改与每个 DB2 UDB 服务关联的用户帐户。此外,从 DB2 UDB Version 8.2 开始,可以使用内置的 LocalSystem Account(LSA)帐户启动 DB2 UDB 服务。在使用严格口令策略的系统上,使用 LSA 可能比较有利,因为 LSA 没有关联的口令。比如在有些环境中,要求用户每两个月换一次口令,否则其帐户就会被暂时锁住。这一策略要求修改指定用户帐户的口令来启动 DB2 UDB 服务。假如配置成启动某些服务的用户帐户被锁住,或者用户帐户的口令被修改了,但是没有在服务启动属性配置中更新,这些服务将无法启动。 在将任何 DB2 UDB 服务从专门的用户帐户移交给 LocalSystem 帐户之前,必须考虑到 LocalSystem 帐户不能访问 LAN 共享,因为不能在其他计算机上验证身份。因此必须保证 DB2 UDB 系统不使用其他机器上的任何文件资源。 在 LocalSystem Account(LSA)上下文中运行的应用程序使用本地的 DB2 UDB 隐式连接。假如开发在该帐户下运行的应用程序,必须知道 DB2 UDB 关于对象模式名以 “SYS” 开头的限制。假如应用程序包含创建 DB2 UDB 对象的语句,应该这样写: 上一页6789101112131415下一页 新闻热点
疑难解答