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 的用户。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 中所述的命名规则。这些限制是在定义帐户的外部设施中起作用的限制之外增加的。新闻热点
疑难解答