如果没有数据库,如何验证postgresql用户和密码是否有效?
我正在创建一个自动安装,它将创建一个数据库并运行sql脚本来创建表。安装需要在运行脚本之前验证用户和密码。自动安装调用Windows批处理文件。首先我设置密码,设置PGPASSWORD=mypassword
。
设置密码后,哪个命令可以验证用户和密码并返回错误代码或消息?
其他数据库程序(如IBM和db2)具有attach命令,该命令允许用户连接到服务器或实例,而无需指定db名称。我找不到PostgreSQL的等价物。
如何在命令行上登录PostgreSQL而不指定数据库名称?
答案 0 :(得分:3)
使用系统表pg_roles
Postgres总是会安装一个名为“postgres”的数据库。 postgres是您未连接到数据库时连接的数据库。在一个名为pg_roles
的表中。
使用此命令:
psql -U pgadmin -d postgres -c 'select * from pg_roles'
返回此内容:
rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcatupdate | rolcanlogin | rolreplication | rolconnlimit | rolpassword | rolvaliduntil | rolconfig | oid
----------+----------+------------+---------------+-------------+--------------+-------------+----------------+--------------+-------------+---------------+-----------+-------
postgres | t | t | t | t | t | t | t | -1 | ******** | | | 10
pgadmin | t | t | t | t | t | t | t | -1 | ******** | | | 16384
(2行)
请参阅此答案:How to check if a postgres user exists?
登录
进行测试尝试使用提供的用户名/密码登录并使用try / catch将其包围,如果您可以登录,则它有效,否则无效。
改变用户
如果您更改不存在的用户,您可能会收到错误消息:http://www.postgresql.org/docs/8.0/static/sql-alteruser.html
ALTER USER postgres WITH PASSWORD 'tmppassword';
删除并重新添加用户
如果您尝试删除并重新添加用户,则可能会收到错误消息。因此,如果它无效,那么当您尝试删除非用户时,它会抛出错误。 http://www.postgresql.org/docs/8.0/static/sql-createuser.html
答案 1 :(得分:1)
这是一种从命令行检查用户名/密码组合是否有效的方便方法。这是从puppetlabs-postgresql模块中提取的:
su - username
env PGPASSWORD=somepass psql -h localhost -c 'select 1'
echo $?
...其中'somepass'是正在测试的密码,'username'是正在测试的帐户(通常是postgres用户本身)。
如果$?为0,用户/密码组合有效。如果$?是1,密码错误或用户不存在。无论哪种方式,都存在问题。
这是Linux / bash方式。 Windows的方式类似于:
(run under the user account you're interested in)
set PGPASSWORD=somepass
psql -h localhost -c 'select 1'
if errorlevel 1 (
echo Failure Reason Given is %errorlevel%
exit /b %errorlevel%
)
psq上的-h强制本地基于TCP的连接,默认情况下(来自pg_hba.conf)强制进行密码检查,无密码用户无法绕过。
我很抱歉没有发布经过全面测试的Windows解决方案,但上面的代码很可能会直接运行,或只需要一点点修复。
答案 2 :(得分:-2)
只需在终端中使用此命令:
psql postgres