ฉันจะเปลี่ยนรหัสผ่านสำหรับผู้ใช้ PostgreSQL ได้อย่างไร
ฉันจะเปลี่ยนรหัสผ่านสำหรับผู้ใช้ PostgreSQL ได้อย่างไร
คำตอบ:
สำหรับรหัสผ่านเข้าสู่ระบบน้อย:
sudo -u user_name psql db_name
ในการรีเซ็ตรหัสผ่านหากคุณลืม:
ALTER USER user_name WITH PASSWORD 'new_password';
rm ~/.psql_history
ALTER USER myuser RENAME TO newname;
... ด้วยเหตุผลบางอย่าง google ก็ชี้ให้ฉันที่นี่เมื่อฉัน googling ที่ :)
จากนั้นพิมพ์:
$ 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
ที่มา:
ต้องใช้ความระมัดระวังเมื่อระบุรหัสผ่านที่ไม่ได้เข้ารหัสด้วยคำสั่งนี้ รหัสผ่านจะถูกส่งไปยังเซิร์ฟเวอร์ใน cleartext และมันอาจถูกบันทึกไว้ในประวัติคำสั่งของลูกค้าหรือบันทึกเซิร์ฟเวอร์ psql มี command \ password ที่สามารถใช้ในการเปลี่ยนรหัสผ่านของบทบาทโดยไม่ต้องเปิดเผยรหัสผ่าน cleartext
จาก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>';"
เพื่อเปลี่ยนรหัสผ่าน
sudo -u postgres psql
แล้วก็
\password postgres
ตอนนี้ป้อนรหัสผ่านใหม่และยืนยัน
จากนั้น\q
เพื่อออก
ไปที่การตั้งค่า 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
จากนั้นเริ่มบริการ PostgreSQL อีกครั้งผ่านคำสั่ง SUDO จากนั้น
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:
ของฉัน ($ version, $ cluster, $ db, $ port , โฮสต์ $); ' ขอบคุณสำหรับความช่วยเหลือของคุณ!
ในการขอรหัสผ่านใหม่สำหรับผู้ใช้postgres (โดยไม่แสดงในคำสั่ง):
sudo -u postgres psql -c "\password"
การกำหนดค่าที่ฉันมีบนเซิร์ฟเวอร์ของฉันได้รับการปรับแต่งเป็นจำนวนมากและฉันสามารถเปลี่ยนรหัสผ่านได้หลังจากตั้งค่าการตรวจสอบความน่าเชื่อถือในpg_hba.conf
ไฟล์แล้ว :
local all all trust
อย่าลืมเปลี่ยนกลับเป็นรหัสผ่านหรือ md5
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\password
จากนั้นป้อนรหัสผ่านของคุณ\q
เพื่อออกจากเซสชันเชลล์จากนั้นคุณสลับกลับไปที่รูทโดยดำเนินการexit
และกำหนดค่าpg_hba.conf
(ของฉันอยู่ที่/etc/postgresql/10/main/pg_hba.conf
) โดยทำให้แน่ใจว่าคุณมีบรรทัดต่อไปนี้
local all postgres md5
service postgresql restart
postgres
ผู้ใช้และป้อนเปลือก postgres อีกครั้ง มันจะพร้อมท์ให้คุณใส่รหัสผ่านใช้สิ่งนี้:
\password
ป้อนรหัสผ่านใหม่ที่คุณต้องการสำหรับผู้ใช้นั้นแล้วยืนยัน หากคุณจำรหัสผ่านไม่ได้และต้องการเปลี่ยนรหัสผ่านคุณสามารถเข้าสู่ระบบเป็น postgres แล้วใช้สิ่งนี้:
ALTER USER 'the username' WITH PASSWORD 'the new password';
คล้ายกับคำตอบอื่น ๆ ในไวยากรณ์ แต่ควรทราบว่าคุณสามารถส่งผ่าน md5 ของรหัสผ่านเพื่อที่คุณจะไม่ส่งรหัสผ่านแบบข้อความธรรมดา
ต่อไปนี้เป็นสถานการณ์บางประการที่ไม่ได้ตั้งใจจากการแก้ไขรหัสผ่านผู้ใช้ในข้อความธรรมดา
log_statement = ddl
หรือสูงกว่ารหัสผ่านข้อความธรรมดาของคุณจะปรากฏในบันทึกข้อผิดพลาดของคุณ
ด้วยที่กล่าวไว้ที่นี่เป็นวิธีที่เราสามารถเปลี่ยนรหัสผ่านของผู้ใช้โดยการสร้าง md5 ของรหัสผ่าน
เช่น "md5" + md5 (รหัสผ่าน + ชื่อผู้ใช้)
ในทุบตี:
~$ 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 ไม่มีผลกระทบ แต่ได้รับการยอมรับสำหรับความเข้ากันได้ย้อนหลัง วิธีการเข้ารหัสนั้นกำหนดโดยพารามิเตอร์การกำหนดค่ารหัสผ่าน หากสตริงรหัสผ่านที่นำเสนอมีอยู่แล้วในรูปแบบที่เข้ารหัส MD5 หรือเข้ารหัส SCRAM ก็จะถูกเก็บไว้เป็น - ไม่คำนึงถึง password_encryption (เนื่องจากระบบไม่สามารถถอดรหัสสตริงรหัสผ่านที่เข้ารหัสที่ระบุเพื่อเข้ารหัสในรูปแบบที่แตกต่างกัน) วิธีนี้ช่วยให้สามารถโหลดรหัสผ่านที่เข้ารหัสระหว่างการถ่ายโอนข้อมูล / คืนค่าได้
โดยทั่วไปเพียงใช้ pg admin UI สำหรับทำกิจกรรมที่เกี่ยวข้องกับฐานข้อมูล
หากคุณมุ่งเน้นไปที่การตั้งค่าฐานข้อมูลอัตโนมัติสำหรับการพัฒนาในท้องถิ่นของคุณหรือ CI เป็นต้น
ตัวอย่างเช่นคุณสามารถใช้คอมโบง่าย ๆ เช่นนี้
(a) สร้างผู้ใช้ dummy super ผ่าน jenkins ด้วยคำสั่งที่คล้ายกับสิ่งนี้:
docker exec -t postgres11-instance1 createuser --username=postgres --superuser experiment001
สิ่งนี้จะสร้างผู้ใช้ขั้นสูงที่เรียกว่า experiment001 ในตัวคุณ postgres db
(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 และคาดหวัง ( ในตัวอย่างนี้เราให้ผู้ดูแลระบบ postgres ใหม่พร้อมกับ postgres ที่จัดเตรียมใหม่ pw ทั้งบน OS และ 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 ;
"
TLDR:
ในหลาย ๆ ระบบบัญชีผู้ใช้มักจะมีจุดหรือจุดแยก (ผู้ใช้: john.smith, horise.johnson) ในกรณีเหล่านี้จะต้องทำการแก้ไขคำตอบที่ได้รับการยอมรับข้างต้น การเปลี่ยนแปลงจะต้องมีชื่อผู้ใช้เป็นสองเท่า
Example:
ALTER USER "username.lastname" WITH PASSWORD 'password';
มีเหตุผล:
Postgres ค่อนข้างจู้จี้จุกจิกเมื่อใช้ 'double quote' และเมื่อใช้ 'single quote' โดยทั่วไปเมื่อระบุสตริงคุณจะใช้เครื่องหมายคำพูดเดี่ยว