了解 PostgreSQL 和 plpgsql 防御代码注入

Understanding PostgreSQL & plpgsql defense against code injection

this very useful page 上有这样的说法...

CREATE OR REPLACE FUNCTION user_access (p_uname TEXT)
  RETURNS timestamp LANGUAGE sql AS
$func$
    SELECT accessed_at FROM users WHERE username = 
$func$;

...作为如何避免 SQL 注射的说明。我试图理解为什么我会这样安全。 PostgreSQL 对我有什么保护我安全的作用?有人可以给我指出正确的方向吗?

为什么安全?

PostgreSQL(以及任何其他 DBMS)将首先使用 </code> 编译语句,然后才使用用户提供的实际值。因此,值中的任何内容都不能解释为语句的一部分。换句话说,使用参数 <em> 将代码与数据分开 </em>.</p> <h3>为什么我需要一个程序?</h3> <p>在大多数情况下,您不需要。你真正需要的是一种将代码与数据分离的机制,即参数。在大多数语言和数据库连接库中,现在有一个 <em> 参数化查询 </em> 支持,它允许您编写带有占位符的查询(例如 <code>?)并通过单独的参数提供数据.