Db2

授予程序

  • May 16, 2020

使用者 U 執行的批處理刪除並創建工作表 T。簡化設置:

使用者 U 的權限

db2 grant dataaccess on database to user U
db2 grant all on table T to user U
db2 transfer ownership of table T to user U 

由於程式碼是從多個地方呼叫的,我認為最好從過程 P 中刪除並創建表,以避免不同的程式碼為表創建不同的外觀。

db2 -td@ -f "create procedure P()
  LANGUAGE SQL
  BEGIN
      BEGIN
          -- do nothing if drop table fails
          DECLARE CONTINUE HANDLER FOR SQLSTATE '42704'
          BEGIN
          END;
          execute immediate 'drop table T';
      END;
      execute immediate 'CREATE TABLE T (x int)';
END @"

但是,當使用者 U 呼叫此過程時,它會失敗並顯示:

db2 "call P()"
SQL0551N  The statement failed because the authorization ID does not have the 
required authorization or privilege to perform the operation.  Authorization 
ID: "U". Operation: "CREATE TABLE". Object: T SQLSTATE=42501

是否可以向使用者 U 授予權限(除了 dbadm 或其他核選項:),以便它可以成功執行過程 P?

那我再補充一個答案。mustaccio的評論讓我意識到 U 能夠刪除 T,因為 U 擁有 T。但是一旦 T 被刪除,U 就無法重新創建它,因為CREATIN在架構中沒有授予 U。

解決方案是創建一個模式 S,GRANT CREATIN/DROPIN ON S 給使用者 U,然後將 T 的模式更改為 S。

引用自:https://dba.stackexchange.com/questions/267067