【问题标题】:Function to dynamically change postgres password动态更改postgres密码的功能
【发布时间】:2022-01-12 21:48:47
【问题描述】:

我正在尝试创建一个动态更改客户端密码的函数,但我收到错误“错误:在或附近出现语法错误”=“ALTER USER postgres WITH PASSWORD = '$1';”

我该如何解决这个问题?感谢您的宝贵时间

CREATE OR REPLACE FUNCTION public."Change_password"(
    password character varying)
    RETURNS void
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE PARALLEL UNSAFE
AS $BODY$
BEGIN
   ALTER USER postgres WITH PASSWORD= '$1';

END
$BODY$;

ALTER FUNCTION public."Change_password"(character varying)
    OWNER TO postgres;
    
    SELECT public."Change_password"(
    '10'
)

【问题讨论】:

    标签: postgresql function settings alter


    【解决方案1】:

    除了多余的= 的细微语法错误之外,您不能在ALTER 语句中使用参数。您将不得不使用动态 SQL:

    EXECUTE format(
               'ALTER ROLE postgres PASSWORD %L',
               $1
            );
    

    让我补充一点,从这样的应用程序更改超级用户的密码看起来不像是一个理智的安全概念。您没有使用数据库超级用户运行您的应用程序,是吗?

    【讨论】:

    • 我正在为客户端运行本地主机服务器,我希望客户端在需要时轻松更改密码。
    【解决方案2】:

    一个简单的语法错误,根据ALTER USER documentationPASSWORD 之后没有= 应该是:ALTER USER postgres WITH PASSWORD '$1';

    编辑: 在深入研究问题后,似乎整个语句必须动态运行。 查看类似问题的答案:How to change user password in postgreSQL

    【讨论】:

    • 这对我的版本不正确。它将密码设置为 $1
    • 好吧,所以错误不再出现并且代码有效。如果您希望它动态更改,只需将“$1”替换为“密码”参数
    • 这也不起作用,它将密码设置为不带引号的字符串“password”。将输入参数更改为 pass 之类的其他参数也不起作用。
    • ALTER USER postgres WITH PASSWORD 密码; - 那是你尝试过的吗?
    • 它抛出语法错误。
    猜你喜欢
    • 2015-12-11
    • 2016-09-07
    • 2012-05-25
    • 2016-05-29
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    • 2019-10-11
    • 2013-10-29
    相关资源
    最近更新 更多