如何在 Windows 上使用 DB2 9.7 向本地 db2admin 授予所有權限?
我有一台裝有 OS Windows XP Professional Edition Service Pack 3 的筆記型電腦作為我的開發人員站。
我已經下載並安裝了 Express-C 版本的 IBM DB2 UDB 9.7 修訂包 4。
我有一個名為 db2admin 的本地 Windows 帳戶,我將其用作本地數據庫管理員,用於本地安裝 DB2(僅用於開發人員)。
執行命令行視窗時,我可以毫無問題地執行以下命令:
db2 attach to db2 user db2admin using xxxxxxxxxx
這允許我附加到我的名為 DB2 的實例。
我可以執行我的創建數據庫命令。
然後我嘗試連接到數據庫以授予我在 DB2 中的 db2admin 帳戶的所有權限。
db2 CONNECT TO MYDB; SET SCHEMA DB2ADMIN; db2 GRANT DBADM,CREATETAB,BINDADD,CONNECT,CREATE_NOT_FENCED_ROUTINE,IMPLICIT_SCHEMA,LOAD,CREATE_EXTERNAL_ROUTINE,QUIESCE_CONNECT,SECADM ON DATABASE TO USER DB2ADMIN; CONNECT RESET;
但是,當我執行它時,DB2 告訴我我的實際 Windows 使用者帳戶 (synprgcma) 無權授予使用者 db2admin 權限。
因此,如果我將第二個腳本更改為以下內容:
db2 CONNECT TO MYDB USER db2admin USING xxxxxxxx; SET SCHEMA DB2ADMIN; db2 GRANT DBADM,CREATETAB,BINDADD,CONNECT,CREATE_NOT_FENCED_ROUTINE,IMPLICIT_SCHEMA,LOAD,CREATE_EXTERNAL_ROUTINE,QUIESCE_CONNECT,SECADM ON DATABASE TO USER DB2ADMIN; CONNECT RESET;
然後 DB2 告訴我 db2admin 不能撤銷或授予自己權限(實際上它告訴我一個 id 不能撤銷或授予自己權限)。
所以我很難過。我之前安裝的 DB2(9.5,我不記得我使用的是哪個修訂包)沒有這個問題。
如何向本地管理員帳戶授予必要的權限?我相信我需要這個才能執行我接下來需要執行的綁定命令:
db2 CONNECT TO MYDB; db2 bind @db2cli.lst blocking all grant public sqlerror continue CLIPKG 20; db2 CONNECT RESET;
任何幫助,將不勝感激。
**編輯:**我發現了一些與此相關的以下連結。仍然不確定如何讓它工作,但至少我找到了一些文件。
- http://www.db2teamblog.com/2009/06/whats-new-in-db2-97.html
- http://lpetr.org/blog/archives/simplify-the-db2-9-7-security-model
- http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=%2Fcom.ibm.db2.luw.sql.ref.doc%2Fdoc%2Fr0000958.html
- http://www.ibm.com/developerworks/forums/thread.jspa?messageID=14288459
- http://publib.boulder.ibm.com/infocenter/tivihelp/v4r1/index.jsp?topic=%2Fcom.ibm.tpc_V422.doc%2Ffqz0_t_preparing_to_install_db2_windows.html
- http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=%2Fcom.ibm.db2.luw.admin.sec.doc%2Fdoc%2Fc0055206.html
- http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=%2Fcom.ibm.db2.luw.admin.sec.doc%2Fdoc%2Fc0005479.html
根據我對問題的編輯中的最後一個連結,我找到了答案。我無法調整系統帳戶,因為我們的系統登錄來自 LDAP,我無法控制組和其他什麼。
所以我做了以下事情:
- 打開 DB2 GUI(這樣做最容易)。
- 以 db2admin 身份連接到所需的數據庫。
- 將我作為使用者登錄到數據庫。
- 授予該 ID(我的 ID)的所有權限。
- 斷開。
- 以我的身份連接到所需的數據庫。
- 將所有權限授予 db2admin。
- 斷開。
瞧!db2admin 現在以所有權限登錄。
**編輯:**我將離開上面的內容,因為它幫助我學習瞭如何在 DB2 中做一些有趣的事情。但是,我了解到具有 DATAACCESS 和 ACCESSCTRL 權限的 DBADM/SECADM 授予實例所有者(在我的情況下為 db2admin id)具有與數據庫互動所需的所有權限。實際上,我本可以在腳本中註釋掉上面的那些授權行。這些是針對舊版本 DB2 執行的腳本遺留下來的。我還發現,如果在從數據庫 B 還原到數據庫 A 後需要實例所有者 DBADM,最簡單的方法是將系統資料庫變數 DB2_RESTORE_GRANT_ADMIN_AUTHORITY 設置為 YES(在 Fix Pack 2 及更高版本中可用)。然後我不必嘗試授予實例所有者 DBADM。它會自動授予恢復到實例中的任何數據庫。