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 5432tester123即可成功连接。 - 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




