Security

exec(text) 是做什麼的?

  • August 13, 2014

我剛剛在兩個 RDS PostgreSQL 9.3 DB 中找到了以下函式:

--
-- Name: exec(text); Type: FUNCTION; Schema: public; Owner: adam
--

CREATE FUNCTION exec(text) RETURNS text
   LANGUAGE plpgsql
   AS $_$ BEGIN EXECUTE $1; RETURN $1; END; $_$;


ALTER FUNCTION public.exec(text) OWNER TO adam;

我很確定我沒有寫這個函式,因為exec它看起來像一個安全隱患(它只是執行命令嗎?)它想知道它是怎麼回事。搜尋方法簽名對我沒有幫助。

**這個函式有什麼作用?

這是某種安全風險嗎?

哪個程序/框架可能創建了它?**

這是一個執行任意 SQL 的完全沒有意義的函式。這不是SECURITY DEFINER我認為它可能帶來的唯一風險是,如果您允許使用者執行任意 SQL 謂詞或呼叫任意函式(在這種情況下,您可能已經被填滿)但試圖阻止他們執行他們想要的任何命令。

如您所料,它只是使用 PL/PgSQL 的動態 SQL 工具執行 SQL 輸入。

哦,它還會從簡單的log_statement分析auto_explain等中隱藏語句文本,因為它們只查看頂級語句,而不是通過 PL/pgSQL 執行的語句。

我個人會刪除/重命名它,看看有什麼抱怨。

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