1
我试图创建的PostgreSQL 9.3.6一个PL/pgSQL函数,但使用内部函数体中传递的参数时,怪异的行为。这里是 '非常简单' 的功能:函数参数不解释体内
CREATE OR REPLACE FUNCTION myschema.test (myarg text) RETURNS text AS $$
DECLARE
entity text;
buffer text;
BEGIN
CREATE ROLE myarg;
RETURN myarg;
END;
$$ LANGUAGE plpgsql;
所以,如果例如myarg
等于 '测试':
- 名为 'myarg' 角色创建(错误的)
- '测试' (正确)
我搜索了几个小时,为什么这可能是和没有线索......安全参数?为什么myarg
不能解释为创建角色?
测试与phpPgAdmin的通过SQL文件,如果这有任何影响。
请务必在此上下文(角色名称)中将'myarg'作为标识符进行转义,或者您已经开放给SQL注入。除非已经安全地转义了标识符,否则使用'%I'格式()。 http://stackoverflow.com/questions/10705616/table-name-as-a-postgresql-function-parameter/10711349#10711349 – 2015-04-06 11:54:17