簡體   English   中英

無法使用 execBatch() 在 Hana 數據庫中創建用戶

[英]Unable to create users in Hana Database Using execBatch()

我有一個 XSA 系統和 XSA 數據庫用戶。 此 XSA 數據庫用戶將用於在 XSA 中創建新的 Hana 數據庫用戶。 我試圖在 execBatch() 功能的幫助下創建一批用戶。 我有一個 node.js 項目的上限。

我在 node.js 文件中執行 sql 查詢。 下面是代碼——

console.log("Targeting User Creation")
try{
       let createuserstatement = await xsaDbConn.preparePromisified("CREATE USER ? PASSWORD AbcYes NO FORCE_FIRST_PASSWORD_CHANGE")
       await createuserstatement.execBatch(createusersarr)
       console.log(`Users created.`) 
}catch(err){
       console.log(err.stack)
}

createusersarr 是包含要創建的用戶列表的數組。 數組看起來像這樣 -

[ [ 'SAC_XSA_HDB_USER_ABC1' ], [ 'SAC_XSA_HDB_USER_ABC2' ], 
  [ 'SAC_XSA_HDB_USER_ABC3' ], [ 'SAC_XSA_HDB_USER_ABC4' ], 
  [ 'SAC_XSA_HDB_USER_ABC5' ], [ 'SAC_XSA_HDB_USER_ABC6' ], 
  [ 'SAC_XSA_HDB_USER_ABC7' ], [ 'SAC_XSA_HDB_USER_ABC8' ], 
  [ 'SAC_XSA_HDB_USER_ABC9' ], [ 'SAC_XSA_HDB_USER_ABC10' ] ]

當我運行我的節點應用程序時,

它不會創建用戶,並且顯示的錯誤未定義如下 -

ERROR - Targeting User Creation

undefined

我不確定為什么這會失敗? 當我使用 exec() 而不是 execBatch() 並在創建用戶查詢(基本循環機制)中一一提供用戶名時,它運行良好。

要找出問題,您可以使用 HANA Studio 或 XSA SQL 控制台查看該語句CREATE USER ? PASSWORD "qwe" CREATE USER ? PASSWORD "qwe"不能使用占位符。 這里的用戶名是一個對象,占位符只是參數,不能代替對象名。

我沒有找到文檔鏈接(這是 SAP,所以並不感到驚訝),但它在其他數據庫中以這種方式工作。

編輯:“對象”是指在數據庫系統表中持久存在的東西:表、視圖、序列、函數、用戶、角色、權限等。它是一個實體,它是您的模型的一部分或系統的一部分,您可以“使用”(調用、選擇、創建、更改等)。 它是語法的一部分(在文檔中你會找到它)。 數據是您可以操作的內容,可以用占位符代替。 當然,元數據也存儲在某個地方,但它是另一個抽象層次。

要使您的用戶名成為數據,您應該編寫一些采用用戶名的過程,創建 SQL 語句並使用EXECUTE IMMEDIATE發出它(因此它要求 SQL 解析器按原樣解析整個字符串)。 那么你應該用 ? 作為用戶名參數並傳遞要創建的動態用戶名。

create procedure p_create_user( in p_uname nvarchar(20))
language sqlscript
sql security invoker
as
begin
  declare lv_sql nvarchar(1000);
  lv_sql := replace('create user <uname> password "QWEasd!23"', '<uname>', p_uname);
  execute immediate lv_sql;
end;

call p_create_user('demo');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM