Validation 在不使用数据库的情况下验证PostgreSQL用户和密码

Validation 在不使用数据库的情况下验证PostgreSQL用户和密码,validation,postgresql,authentication,passwords,Validation,Postgresql,Authentication,Passwords,在没有数据库的情况下,如何验证postgresql用户和密码是否有效 我正在创建一个自动安装,它将创建一个数据库并运行sql脚本来创建表。在运行脚本之前,安装需要验证用户和密码。自动安装调用Windows批处理文件。首先我设置密码,设置PGPASSWORD=mypassword 设置密码后,什么命令可以验证用户和密码并返回错误代码或消息 其他数据库程序(如IBM和db2)有一个attach命令,允许用户附加到服务器或实例,而无需指定db名称。我找不到PostgreSQL的等效项 如何在不指定数据

在没有数据库的情况下,如何验证postgresql用户和密码是否有效

我正在创建一个自动安装,它将创建一个数据库并运行sql脚本来创建表。在运行脚本之前,安装需要验证用户和密码。自动安装调用Windows批处理文件。首先我设置密码,设置
PGPASSWORD=mypassword

设置密码后,什么命令可以验证用户和密码并返回错误代码或消息

其他数据库程序(如IBM和db2)有一个attach命令,允许用户附加到服务器或实例,而无需指定db名称。我找不到PostgreSQL的等效项


如何在不指定数据库名称的情况下在命令行上登录PostgreSQL?

使用系统表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排)

看看这个答案:

通过登录进行测试

只需尝试使用提供的用户名/密码登录,并用try/catch括起来,如果您可以登录,则它是有效的,否则它是无效的

更改用户

如果更改了不存在的用户,则可能会捕获错误消息:

删除并重新添加用户


如果尝试删除并重新添加用户,则可能会捕获错误消息。因此,如果它是无效的,那么当您尝试删除非用户时,它将抛出一个错误

这里有一种从命令行检查用户名/密码组合是否有效的简便方法。这是从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%
)
psql上的-h强制基于TCP的本地连接,默认情况下(从pg_hba.conf)强制进行密码检查,无密码用户不可能绕过


很抱歉没有发布经过全面测试的Windows解决方案,但是上面的代码很有可能直接工作,或者只需稍加修改即可工作。

只需在终端中使用以下命令:

psql postgres

那么您想在设置postgresql系统表之前验证用户是否有效?这似乎有点奇怪,但还行。自动安装是创建一个新的数据库,然后运行脚本来创建表和加载数据。屏幕提示输入凭据,并需要在调用createdb命令之前进行身份验证。不需要使用错误的凭据运行其他命令。这是数据库安装的标准做法。登录到PostgreSQL:其他数据库程序(如IBM db2)有一个attach命令,允许用户附加到服务器或实例,而无需指定数据库名称。我找不到PostgreSQL的等效项。如何在不指定数据库名称的情况下在命令行上登录PostgreSQL?连接到数据库:postgres。它是您不连接数据库时连接的数据库。Postgres始终安装一个名为“Postgres”的数据库。用这个回答@Eric,你会没事的。
psql postgres