Answers:
对于少密码登录:
sudo -u user_name psql db_name
要忘记密码,请重设密码:
ALTER USER user_name WITH PASSWORD 'new_password';
rm ~/.psql_history
ALTER USER myuser RENAME TO newname;
...出于某种原因,谷歌在我进行谷歌搜索时将我指给我:)
然后输入:
$ sudo -u postgres psql
然后:
\password postgres
然后退出psql
:
\q
如果这样不起作用,请重新配置身份验证。
编辑/etc/postgresql/9.1/main/pg_hba.conf
(路径会有所不同)并更改:
local all all peer
至:
local all all md5
然后重新启动服务器:
$ sudo service postgresql restart
\p
,它会给我密码;如果我输入\password postgres
密码,则输入密码,然后发出警告\p extra argument "assword" ignored; \p extra argument "postgres" ignored
sudo passwd postgres
您可以并且应该已经加密了用户的密码:
ALTER USER username WITH ENCRYPTED PASSWORD 'password';
The password is always stored encrypted in the system catalogs. The ENCRYPTED keyword has no effect, but is accepted for backwards compatibility.
我相信更改密码的最佳方法就是使用:
\password
在Postgres控制台中。
资源:
使用此命令指定未加密的密码时必须小心。密码将以明文形式传输到服务器,并且也可能会记录在客户端的命令历史记录或服务器日志中。psql包含一个\ password命令,可用于更改角色的密码而不暴露明文密码。
来自https://www.postgresql.org/docs/9.0/static/sql-alterrole.html。
\password username
要使用Linux命令行更改密码,请使用:
sudo -u <user_name> psql -c "ALTER USER <user_name> PASSWORD '<new_password>';"
转到您的Postgresql配置并编辑pg_hba.conf
sudo vim /etc/postgresql/9.3/main/pg_hba.conf
然后更改此行:
Database administrative login by Unix domain socket
local all postgres md5
至 :
Database administrative login by Unix domain socket
local all postgres peer
然后通过SUDO命令重新启动PostgreSQL服务,然后
psql -U postgres
现在您将进入,将看到Postgresql终端
然后输入
\password
并输入Postgres默认用户的新密码,再次成功更改密码后,转到pg_hba.conf并将更改还原为“ md5”
现在您将以
psql -U postgres
用您的新密码。
让我知道您是否在其中找到任何问题。
user@user-NC10:~$ psql -U postgres psql: FATAL: Peer authentication failed for user "postgres"
$version,' /usr/bin/psql: psql: line 26:
my($ version,$ cluster,$ db,$ port ,$ host);' 谢谢你的帮助!
sudo systemctl restart postgresql.service
这是Google在寻找如何重命名用户时的第一个结果,因此:
ALTER USER <username> WITH PASSWORD '<new_password>'; -- change password
ALTER USER <old_username> RENAME TO <new_username>; -- rename user
另外两个对用户管理有用的命令:
CREATE USER <username> PASSWORD '<password>' IN GROUP <group>;
DROP USER <username>;
将用户移至另一个组
ALTER GROUP <old_group> DROP USER <username>;
ALTER GROUP <new_group> ADD USER <username>;
对于我在Ubuntu 14.04上安装了postgres 10.3的情况。我需要遵循以下步骤
su - postgres
切换到 postgres
psql
进入postgres shell\password
然后输入您的密码\q
退出shell会话然后,通过执行以下命令exit
并配置您的pg_hba.conf
(我的位置为/etc/postgresql/10/main/pg_hba.conf
),切换回root用户:
local all postgres md5
service postgresql restart
postgres
用户并再次输入postgres shell。它将提示您输入密码。与语法上的其他答案类似,但是应该知道,您也可以传递密码的md5,这样就不会传输纯文本密码。
这是一些以纯文本方式更改用户密码的意外后果。
log_statement = ddl
或更高版本,则纯文本密码将显示在错误日志中。
话虽如此,这里是我们如何通过构建密码的md5来更改用户密码。
例如:“ md5” + md5(密码+用户名)
在bash中:
~$ echo -n "passwordStringUserName" | md5sum | awk '{print "md5"$1}'
md5d6a35858d61d85e4a82ab1fb044aba9d
[PSCredential] $Credential = Get-Credential
$StringBuilder = New-Object System.Text.StringBuilder
$null = $StringBuilder.Append('md5');
[System.Security.Cryptography.HashAlgorithm]::Create('md5').ComputeHash([System.Text.Encoding]::ASCII.GetBytes(((ConvertFrom-SecureStringToPlainText -SecureString $Credential.Password) + $Credential.UserName))) | ForEach-Object {
$null = $StringBuilder.Append($_.ToString("x2"))
}
$StringBuilder.ToString();
## OUTPUT
md5d6a35858d61d85e4a82ab1fb044aba9d
ALTER USER
命令看起来像 ALTER USER UserName WITH PASSWORD 'md5d6a35858d61d85e4a82ab1fb044aba9d';
密码始终以加密方式存储在系统目录中。ENCRYPTED关键字无效,但是为了向后兼容而被接受。加密方法由配置参数password_encryption确定。如果显示的密码字符串已经采用MD5加密或SCRAM加密的格式,则无论password_encryption如何都将按原样存储(因为系统无法解密指定的加密密码字符串,因此无法以其他格式对其进行加密)。这允许在转储/还原期间重新加载加密的密码。
通常,只需使用pg admin UI来执行与数据库相关的活动。
相反,如果您专注于为本地开发或CI等自动化数据库设置,那么...
例如,您可以使用这样的简单组合。
(a)通过类似于以下命令的jenkins创建一个虚拟超级用户:
docker exec -t postgres11-instance1 createuser --username=postgres --superuser experiment001
这将在您的postgres数据库中创建一个名为Experiment001的超级用户。
(b)通过运行NON-Interactive SQL命令为该用户提供一些密码。
docker exec -t postgres11-instance1 psql -U experiment001 -d postgres -c "ALTER USER experiment001 WITH PASSWORD 'experiment001' "
对于命令行(非交互式)工具而言,Postgres可能是最好的数据库。创建用户,运行SQL,进行数据库备份等...通常,对于postgres来说,这都是非常基本的,将其集成到开发设置脚本或自动CI配置中总体来说是微不足道的。
以及使用bash和Expect的全自动方式(在此示例中,我们在操作系统和postgres运行时级别上都使用新配置的postgres pw来配置新的postgres管理员)
# the $postgres_usr_pw and the other bash vars MUST be defined
# for reference the manual way of doing things automated with expect bellow
#echo "copy-paste: $postgres_usr_pw"
#sudo -u postgres psql -c "\password"
# the OS password could / should be different
sudo -u root echo "postgres:$postgres_usr_pw" | sudo chpasswd
expect <<- EOF_EXPECT
set timeout -1
spawn sudo -u postgres psql -c "\\\password"
expect "Enter new password: "
send -- "$postgres_usr_pw\r"
expect "Enter it again: "
send -- "$postgres_usr_pw\r"
expect eof
EOF_EXPECT
cd /tmp/
# at this point the postgres uses the new password
sudo -u postgres PGPASSWORD=$postgres_usr_pw psql \
--port $postgres_db_port --host $postgres_db_host -c "
DO \$\$DECLARE r record;
BEGIN
IF NOT EXISTS (
SELECT
FROM pg_catalog.pg_roles
WHERE rolname = '"$postgres_db_useradmin"') THEN
CREATE ROLE "$postgres_db_useradmin" WITH SUPERUSER CREATEROLE
CREATEDB REPLICATION BYPASSRLS
PASSWORD '"$postgres_db_useradmin_pw"' LOGIN ;
END IF;
END\$\$;
ALTER ROLE "$postgres_db_useradmin" WITH SUPERUSER CREATEROLE
CREATEDB REPLICATION BYPASSRLS
PASSWORD '"$postgres_db_useradmin_pw"' LOGIN ;
"