2008年11月13日 星期四

Create Role using DB2 9


/*
  1) 使用 DB2 9 的新功能建立 ROLE
  2) 建立測試 user: TestingUser
  3) grant ROLE to TestingUser
  4) 由 system table/view 檢視 TestingUser 的權限
*/


/* 1)create role
  以 db administrator 登錄,將安全管理員角色(secadm)授予User Orion
*/


C:\>db2 connect to sample user db2admin using db2admin

  資料庫連線資訊

 資料庫伺服器     = DB2/NT 9.5.0
 SQL 授權 ID     = DB2ADMIN
 本地資料庫別名    = SAMPLE

C:\>db2 grant secadm on database to user orion
DB20000I SQL 指令已順利完成。


/* ※ 否則直接以未授予secadm角色的user orion create role 會出現以下錯誤:
DB21034E 指令被當作 SQL 陳述式處理,因為他不是有效的「指令行處理器」指令。 在SQL 處理程序期間,他已傳回:
SQL0552N "ORION" 沒有執行作業 "CREATE ROLE" 的專用權。 SQLSTATE=42502
*/


/* 以orion登錄 */

C:\>db2 connect to sample

  資料庫連線資訊

 資料庫伺服器    = DB2/NT 9.5.0
 SQL 授權 ID    = ORION
 本地資料庫別名   = SAMPLE

C:\>db2 create role role_o
DB20000I SQL 指令已順利完成。

C:\>db2 grant all on table department to role role_o
DB20000I SQL 指令已順利完成。


/* 2)建立測試 user: TestingUser
   使用「控制台」→「使用者帳戶」建立新的帳戶
   db2 不像 oracle
   db2 沒有create/drop user、或設定password,完全交由 os 來管理
*/




/* 3) grant ROLE to TestingUser */


C:\>db2 grant role_o to user TestingUser
DB20000I SQL 指令已順利完成。


/* 4) 由 system table/view 檢視 TestingUser 的權限 */


C:\>db2 connect to sample user TestingUser using testinguser

  資料庫連線資訊

 資料庫伺服器    = DB2/NT 9.5.0
 SQL 授權 ID    = TESTINGU...
 本地資料庫別名   = SAMPLE

C:\>db2 select rolename from syscat.roleauth where grantee = 'TESTINGUSER'

ROLENAME
-----------------
ROLE_O
  
  已選取 1 個記錄。

C:\>db2 select privilege,grantable,substr(objectname,1,16), \
db2 (續) => => substr(objectschema,1,16),substr(objecttype,1,10), \
db2 (續) => => substr(grantee,1,16) from sysibmadm.privileges, \
db2 (續) => => syscat.roleauth where authid = 'ROLE_O' \
db2 (續) => => and authid = rolename


PRIVILEGE  GRANTABLE 3      4   5    6
----------- --------- ---------- ------ ------- ------------
UPDATE    N     DEPARTMENT ORION TABLE TESTINGUSER
REFERENCE  N     DEPARTMENT ORION TABLE TESTINGUSER
SELECT    N     DEPARTMENT ORION TABLE TESTINGUSER
INSERT    N     DEPARTMENT ORION TABLE TESTINGUSER
INDEX    N     DEPARTMENT ORION TABLE TESTINGUSER
DELETE    N     DEPARTMENT ORION TABLE TESTINGUSER
ALTER    N     DEPARTMENT ORION TABLE TESTINGUSER

  已選取 7 個記錄。