2009年8月4日 星期二

Grant Load authority using DB2 Express-C 9.7


/*
  好不容易終於拿到 DB2 Express-C 9.7
  灌好之後才發現原來它是這麼令人陌生...(是我假放太久了嗎?)
  一是控制中心的選單字體全成了亂碼,二是權限異動頗大
  到現在還是搞不清楚。不過先把弄出來的做一下紀錄...

  在什麼都沒設定之下執行 load,就會有以下錯誤:
  SQL0552N "ADMINISTRATOR" 沒有執行作業 "LOAD" 的專用權。 SQLSTATE=42502

  原來 LOAD 權限已經不再是預設就有的,因此權限設定上還真麻煩,
  特別是我只是單純用本機的 Administrator 去做測試
*/


/* 檢查本機使用者和群組設定 */

「開始」→「程式集」→「系統管理工具」→「電腦管理」
展開「系統工具」接著再展開「本機使用者和群組」
點選「群組」。檢查是否存在名稱為 DB2ADMNS 的群組。
再點選「使用者」。將 Administrator 「成員隸屬」的選單新增DB2ADMNS群組。


/* 建自己的 DB */

不使用「DB2安裝」所建立的DB:SAMPLE,原因是,
我還沒Try出來到底怎麼使Administrator有執行grant的專用權。
另外我也還沒辦法用localsystem account去logon。

如果我要Administrator有SECADM (Manages security within a database)的權限,
目前所能做的就是使 Administrator 成為 db 的 creator。


C:\>db2start
SQL1063N DB2START 處理成功。

C:\>db2 create database orion
DB20000I CREATE DATABASE 指令已順利完成。


C:\>db2 connect to orion

  資料庫連線資訊

 資料庫伺服器      = DB2/NT 9.7.0
 SQL 授權 ID       = ADMINIST...
 本端資料庫別名     = ORION


/* 檢查有哪些權限 */
C:\>db2 get authorizations



  現行使用者的管理權限

 直接 SYSADM 權限       = NO
 直接 SYSCTRL 權限       = NO
 直接 SYSMAINT 權限      = NO
 直接 DBADM 權限        = YES
 直接 CREATETAB 權限      = NO
 直接 BINDADD 權限       = NO
 直接 CONNECT 權限       = NO
 直接 CREATE_NOT_FENC 權限  = NO
 直接 IMPLICIT_SCHEMA 權限   = NO
 直接 LOAD 權限         = NO
 直接 QUIESCE_CONNECT 權限    = NO
 直接 CREATE_EXTERNAL_ROUTINE 權限 = NO
 直接 SYSMON 權限          = NO

 間接 SYSADM 權限        = NO
 間接 SYSCTRL 權限        = YES
 間接 SYSMAINT 權限       = YES
 間接 DBADM 權限        = NO
 間接 CREATETAB 權限      = YES
 間接 BINDADD 權限       = YES
 間接 CONNECT 權限       = YES
 間接 CREATE_NOT_FENC 權限   = NO
 間接 IMPLICIT_SCHEMA 權限   = YES
 間接 LOAD 權限         = NO
 間接 QUIESCE_CONNECT 權限   = NO
 間接 CREATE_EXTERNAL_ROUTINE 權限 = NO
 間接 SYSMON 權限          = YES


/* 自己不能grant自己 */
C:\>db2 grant load on database to administrator
DB21034E 指令被當作 SQL 陳述式處理,因為它不是有效的「指令行處理器」指令。
在SQL 處理程序期間,它已傳回:
SQL0554N 授權 ID 無法授與自身專用權或權限。 SQLSTATE=42502

/* grant權限給群組 */

C:\>db2 grant load on database to db2admns
DB20000I SQL 指令已順利完成。

C:\>db2 create table t1 (c1 integer)
DB20000I SQL 指令已順利完成。

/* 再檢查一下權限 */

C:\>db2 get authorizations

  現行使用者的管理權限

 直接 SYSADM 權限       = NO
 直接 SYSCTRL 權限       = NO
 直接 SYSMAINT 權限      = NO
 直接 DBADM 權限        = YES
 直接 CREATETAB 權限      = NO
 直接 BINDADD 權限       = NO
 直接 CONNECT 權限       = NO
 直接 CREATE_NOT_FENC 權限  = NO
 直接 IMPLICIT_SCHEMA 權限   = NO
 直接 LOAD 權限         = NO
 直接 QUIESCE_CONNECT 權限    = NO
 直接 CREATE_EXTERNAL_ROUTINE 權限 = NO
 直接 SYSMON 權限          = NO

 間接 SYSADM 權限        = NO
 間接 SYSCTRL 權限       = YES
 間接 SYSMAINT 權限      = YES
 間接 DBADM 權限        = NO
 間接 CREATETAB 權限     = YES
 間接 BINDADD 權限      = YES
 間接 CONNECT 權限       = YES
 間接 CREATE_NOT_FENC 權限   = NO
 間接 IMPLICIT_SCHEMA 權限   = YES

 間接 LOAD 權限          = YES

 間接 QUIESCE_CONNECT 權限     = NO
 間接 CREATE_EXTERNAL_ROUTINE 權限 = NO
 間接 SYSMON 權限          = YES


/* 測試load */

C:\>db2 load from t1.del of del insert into t1
SQL3501W 由於禁止資料庫向前回復, 所以表格常駐的表格空間將不放入備份懸置狀態。

SQL3109N 公用程式開始自檔案 "C:\t1.del" 載入資料。

SQL3500W 公用程式在 "2009-08-04 20:27:16.489660" 時開始 "LOAD" 階段。

SQL3519W 開始載入「一致點」。輸入記錄數 = "0"。

SQL3520W 成功載入「一致點」。

SQL3110N 公用程式已完成處理。自輸入檔讀取第 "1" 列。

SQL3519W 開始載入「一致點」。輸入記錄數 = "1"。

SQL3520W 成功載入「一致點」。

SQL3515W 公用程式已在 "2009-08-04 20:27:16.700221" 時完成 "LOAD" 階段。

已讀取的列數        = 1
已略過的列數        = 0
已載入的列數        = 1
已拒絕的列數        = 0
已拒絕的列數        = 0
已確定的列數        = 1