Db2
授予程序
使用者 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。