You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

PostgreSQL加密密码场景下数据库连接方法及密码加密禁用方案咨询(附Ant脚本示例)

解答你的PostgreSQL连接及Ant脚本问题

先确认你的基础操作

你已经成功创建了tester超级用户和test数据库,对应的SQL语句是正确的:

CREATE ROLE "tester" WITH LOGIN SUPERUSER CREATEDB CREATEROLE INHERIT REPLICATION CONNECTION LIMIT -1 VALID UNTIL '2999-12-31T14:00:40-06:00' PASSWORD 'tester123';
CREATE DATABASE "test" WITH OWNER = "tester" ENCODING = 'UTF8' LC_COLLATE = 'English_United States.1252' LC_CTYPE = 'English_United States.1252' TABLESPACE = ag_table_data CONNECTION LIMIT = -1;
GRANT ALL ON DATABASE "test" TO "tester" WITH GRANT OPTION;

你的疑问解答

1. 如何用tester正常连接test数据库?

PostgreSQL加密存储密码是后端的安全机制,完全不影响你用明文密码连接。数据库会自动将你输入的明文密码加密后,和存储的密文进行比对验证,你根本不需要手动处理加密后的密码。

你可以通过以下方式连接:

  • 命令行工具psql
    psql -U tester -d test -h usspvwscemtn33 -p 5432
    
    执行后输入密码tester123即可成功连接。
  • JDBC/Ant脚本:直接使用你定义的明文密码tester123就行,数据库驱动会帮你完成加密验证的过程。

2. 是否可以禁用PostgreSQL的密码加密功能?

首先强烈不建议这么做——明文存储密码会带来极大的安全风险,任何能访问数据库系统表的人都能直接获取用户密码。

如果是测试环境等特殊场景非要禁用,操作方式分版本:

  • PostgreSQL 9.x-13:创建角色时可以使用UNENCRYPTED关键字指定明文存储密码:
    CREATE ROLE "tester" WITH LOGIN ... UNENCRYPTED PASSWORD 'tester123';
    
    或者修改postgresql.conf中的password_encryption参数为off,然后重启数据库服务。
  • PostgreSQL 14+UNENCRYPTED关键字已被移除,官方彻底不支持明文存储密码,所以无法禁用加密。

修复你的Ant脚本问题

你的Ant脚本存在几个明显的错误,修正后就能正常连接:

<project name="connect-db-test" default="set-name">
    <property name="driver" value="org.postgresql.Driver"/>
    <property name="db-host" value="usspvwscemtn33"/>
    <property name="db-name" value="test"/>
    <property name="db-user" value="tester"/>
    <property name="db-port" value="5432"/>
    <property name="db-password" value="tester123"/>
    <!-- 修复变量名错误:将i1db-xxx改为db-xxx -->
    <property name="db-url" value="jdbc:postgresql://${db-host}:${db-port}/${db-name}"/>

    <target name="set-name">
        <!-- 修复拼写错误:connnect-db → connect-db -->
        <connect-db/>
    </target>

    <macrodef name="connect-db">
        <sequential>
            <!-- 添加classpath指定PostgreSQL JDBC驱动jar包路径 -->
            <sql driver="${driver}" url="${db-url}" userid="${db-user}" password="${db-password}">
                <classpath>
                    <!-- 替换为你的postgresql.jar实际路径 -->
                    <pathelement location="/path/to/postgresql-xxx.jar"/>
                </classpath>
                select * from tst.products;
            </sql>
        </sequential>
    </macrodef>
</project>

关键修正点:

  • 变量名错误db-url中误用了${i1db-host}等未定义的变量,改为你实际定义的${db-host}${db-port}${db-name}
  • 拼写错误<connnect-db/>多写了一个n,改为<connect-db/>匹配macrodef的名称。
  • 驱动依赖:添加<classpath>指定PostgreSQL JDBC驱动jar包的路径,确保Ant能找到驱动类。

内容的提问来源于stack exchange,提问作者john smith

火山引擎 最新活动