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 中所述的命名規則。這些限制是在定義帳戶的外部設施中起作用的限制之外增加的。新聞熱點
疑難解答