gpt4 book ai didi

sql - CREATE FUNCTION 后面的代码是一个字符串意味着什么?

转载 作者:行者123 更新时间:2023-11-29 12:52:22 26 4
gpt4 key购买 nike

来自 a great reply :

in PostgreSQL, CREATE FUNCTION is indeed a "SQL statement" but is is merely a "wrapper" to specify a block of code that is executed by something different than the SQL query "engine". Postgres (unlike other DBMS) supports multiple "runtime engines" that can execute the block of code that was passed to the "CREATE FUNCTION" statement - one artifact of that is that the code is actually a string so CREATE FUNCTION only sees a string, nothing else.

“代码实际上是一个字符串,所以 CREATE FUNCTION 只看到一个字符串,没有别的”的后果是什么?

这算是动态 SQL 吗?与动态 SQL 相比,它是否可以防止或引入 SQL 注入(inject)风险?

这与“代码不是字符串”的其他 RDBMS(如果有的话)有何不同?

谢谢。

最佳答案

PostgreSQL 具有高度可扩展性,例如,您可以定义自己的过程语言来编写函数。

PostgreSQL 除了必须调用特定的语言处理程序 来执行函数外,对该语言一无所知。

选择实现此方法的方法是简化将代码作为字符串传递。

这只是一个实现细节,不会使 PostgreSQL 函数比其他 RDBMS 更容易或更不容易受到 SQL 注入(inject)的攻击。<​​/p>

您必须在几个层面上保护自己免受注入(inject):

  • 函数参数:此处应尽可能选择非字符串数据类型。

  • 函数内的 SQL 语句:此处应尽可能避免使用动态 SQL,如果必须使用动态 SQL,则应使用 %L 模式插入变量 format 函数。

同样,无论函数体是否指定为字符串,这都是一样的。

关于sql - CREATE FUNCTION 后面的代码是一个字符串意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50867972/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com