针对安全插件的错误消息处理

当安全插件 API 发生错误时,此 API 会在 errormsg 字段中返回一个 ASCII 文本字符串,它比返回码能对问题提供更具体的描述。

例如, errormsg 字符串可以包含 "File /home/db2inst1/mypasswd.txt does not exist." Db2® 将此整个字符串写入 Db2 管理通知日志,并且还将在某些 SQL 消息中包含截断版本作为令牌。 因为 SQL 消息中的标记仅长度受到限制,所以应使这些消息保持比较短,并且这些消息的可以改变的重要部分应位于该字符串的前端。 为了帮助调试,可考虑将安全插件的名称添加至错误消息。

对于非紧急的错误(例如,密码到期错误),仅当数据库管理器配置参数 DIAGLEVEL 设置为 4 时才将转储 errormsg 字符串。

安全插件必须分配用于存放这些错误消息的内存。 因此,插件还必须提供以下 API 来释放此内存:db2secFreeErrormsg

仅当 API 返回非零值时, Db2 才会检查 errormsg 字段。 因此,如果没有发生错误,插件就不应为返回的此错误消息分配内存。

在初始化时,会将消息记录函数指针 logMessage_fn 传递给组、客户机和服务器插件。 这些插件可以使用此函数将所有调试信息记录到 db2diag 日志文件中。 例如:
  // Log an message indicate init successful
  (*(logMessage_fn))(DB2SEC_LOG_CRITICAL,
                     "db2secGroupPluginInit successful",
                      strlen("db2secGroupPluginInit successful"));
有关 db2secLogMessage 函数的每个参数的更多详细信息,请参阅每种插件类型的初始化 API。