Câu trả lời:
Đối với mật khẩu ít đăng nhập:
sudo -u user_name psql db_name
Để đặt lại mật khẩu nếu bạn quên:
ALTER USER user_name WITH PASSWORD 'new_password';
rm ~/.psql_history
ALTER USER myuser RENAME TO newname;
... vì một số lý do, google đã chỉ cho tôi ở đây khi tôi đang nói về điều đó :)
Sau đó gõ:
$ sudo -u postgres psql
Sau đó:
\password postgres
Sau đó để bỏ psql
:
\q
Nếu điều đó không làm việc, cấu hình lại xác thực.
Chỉnh sửa /etc/postgresql/9.1/main/pg_hba.conf
(đường dẫn sẽ khác nhau) và thay đổi:
local all all peer
đến:
local all all md5
Sau đó khởi động lại máy chủ:
$ sudo service postgresql restart
\p
, nó cung cấp cho tôi mật khẩu; nếu tôi gõ vào \password postgres
nó sẽ cung cấp mật khẩu và sau đó cảnh báo\p extra argument "assword" ignored; \p extra argument "postgres" ignored
sudo passwd postgres
Bạn có thể và nên mã hóa mật khẩu của người dùng:
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.
Tôi tin rằng cách tốt nhất để thay đổi mật khẩu chỉ đơn giản là sử dụng:
\password
trong bảng điều khiển Postgres.
Nguồn:
Cần thận trọng khi chỉ định mật khẩu không được mã hóa bằng lệnh này. Mật khẩu sẽ được truyền đến máy chủ ở dạng văn bản rõ ràng và mật khẩu cũng có thể được ghi vào lịch sử lệnh của máy khách hoặc nhật ký máy chủ. psql chứa một lệnh \ mật khẩu có thể được sử dụng để thay đổi mật khẩu của vai trò mà không làm lộ mật khẩu Cleartext.
từ https://www.postgresql.org/docs/9.0/static/sql-alterrole.html .
\password username
Để thay đổi mật khẩu bằng dòng lệnh Linux, hãy sử dụng:
sudo -u <user_name> psql -c "ALTER USER <user_name> PASSWORD '<new_password>';"
Thay đổi mật khẩu
sudo -u postgres psql
sau đó
\password postgres
Bây giờ hãy nhập Mật khẩu mới và Xác nhận
sau đó \q
để thoát
Chuyển đến Cấu hình Postgresql của bạn và Chỉnh sửa pg_hba.conf
sudo vim /etc/postgresql/9.3/main/pg_hba.conf
Sau đó thay đổi dòng này:
Database administrative login by Unix domain socket
local all postgres md5
đến :
Database administrative login by Unix domain socket
local all postgres peer
sau đó khởi động lại dịch vụ PostgreSQL thông qua lệnh SUDO rồi
psql -U postgres
Bây giờ bạn sẽ được nhập và sẽ thấy thiết bị đầu cuối Postgresql
sau đó nhập
\password
và nhập Mật khẩu MỚI cho người dùng mặc định của Postgres, Sau khi thay đổi thành công Mật khẩu một lần nữa, hãy truy cập pg_hba.conf và hoàn nguyên thay đổi thành "md5"
bây giờ bạn sẽ đăng nhập như
postgres psql
với Mật khẩu mới của bạn.
Hãy cho tôi biết nếu tất cả các bạn tìm thấy bất kỳ vấn đề trong đó.
user@user-NC10:~$ psql -U postgres psql: FATAL: Peer authentication failed for user "postgres"
$version,' /usr/bin/psql: psql: line 26:
của tôi (phiên bản $, $ cluster, $ db, $ port , $ máy chủ); ' Cảm ơn bạn đã giúp đỡ!
Cấu hình mà tôi có trên máy chủ của mình đã được tùy chỉnh rất nhiều và tôi chỉ quản lý để thay đổi mật khẩu sau khi tôi đặt xác thực tin cậy trong pg_hba.conf
tệp :
local all all trust
Đừng quên đổi lại mật khẩu hoặc md5
sudo systemctl restart postgresql.service
Đây là kết quả đầu tiên trên google, khi tôi đang tìm cách đổi tên người dùng, vì vậy:
ALTER USER <username> WITH PASSWORD '<new_password>'; -- change password
ALTER USER <old_username> RENAME TO <new_username>; -- rename user
Một vài lệnh khác hữu ích cho việc quản lý người dùng:
CREATE USER <username> PASSWORD '<password>' IN GROUP <group>;
DROP USER <username>;
Chuyển người dùng sang nhóm khác
ALTER GROUP <old_group> DROP USER <username>;
ALTER GROUP <new_group> ADD USER <username>;
Đối với trường hợp của tôi trên Ubuntu 14.04 được cài đặt với postgres 10.3. Tôi cần làm theo các bước sau
su - postgres
để chuyển người dùng sang postgres
psql
để nhập vỏ postgres\password
sau đó nhập mật khẩu của bạn\q
bỏ phiên vỏSau đó, bạn chuyển trở lại root bằng cách thực hiện exit
và định cấu hình pg_hba.conf
(của tôi là tại /etc/postgresql/10/main/pg_hba.conf
) bằng cách đảm bảo bạn có dòng sau
local all postgres md5
service postgresql restart
postgres
người dùng và nhập vỏ postgres một lần nữa. Nó sẽ nhắc bạn bằng mật khẩu.Tương tự như các câu trả lời khác theo cú pháp nhưng cần biết rằng bạn cũng có thể truyền md5 mật khẩu để bạn không truyền mật khẩu văn bản đơn giản.
Dưới đây là một vài tình huống về hậu quả không lường trước của việc thay đổi mật khẩu người dùng trong văn bản thuần túy.
log_statement = ddl
hoặc cao hơn, thì mật khẩu văn bản đơn giản của bạn sẽ hiển thị trong nhật ký lỗi của bạn.
Như đã nói ở đây là cách chúng ta có thể thay đổi mật khẩu của người dùng bằng cách xây dựng md5 mật khẩu.
ví dụ: "md5" + md5 (mật khẩu + tên người dùng)
Trong 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
lệnh của chúng tôi sẽ trông giống như ALTER USER UserName WITH PASSWORD 'md5d6a35858d61d85e4a82ab1fb044aba9d';
Mật khẩu luôn được lưu trữ được mã hóa trong danh mục hệ thống. Từ khóa ENCRYPTED không có hiệu lực, nhưng được chấp nhận để tương thích ngược. Phương thức mã hóa được xác định bởi tham số cấu hình password_encoding. Nếu chuỗi mật khẩu được trình bày đã ở định dạng MD5 - được mã hóa hoặc mã hóa SCRAM, thì nó được lưu trữ dưới dạng bất kể password_encoding (vì hệ thống không thể giải mã chuỗi mật khẩu được mã hóa đã chỉ định, để mã hóa nó ở định dạng khác). Điều này cho phép tải lại mật khẩu được mã hóa trong quá trình kết xuất / khôi phục.
Nói chung, chỉ cần sử dụng UI quản trị pg để thực hiện hoạt động liên quan đến db.
Thay vào đó, nếu bạn tập trung hơn vào việc tự động hóa thiết lập cơ sở dữ liệu để phát triển cục bộ hoặc CI, v.v ...
Ví dụ, bạn có thể sử dụng một kết hợp đơn giản như thế này.
(a) Tạo một siêu người dùng giả thông qua jenkins với một lệnh tương tự như sau:
docker exec -t postgres11-instance1 createuser --username=postgres --superuser experiment001
điều này sẽ tạo ra một siêu người dùng có tên là Exper001 trong bạn postgres db.
(b) Cung cấp cho người dùng này một số mật khẩu bằng cách chạy lệnh NON-Interactive SQL.
docker exec -t postgres11-instance1 psql -U experiment001 -d postgres -c "ALTER USER experiment001 WITH PASSWORD 'experiment001' "
Postgres có lẽ là cơ sở dữ liệu tốt nhất hiện có cho công cụ dòng lệnh (không tương tác). Tạo người dùng, chạy SQL, tạo bản sao lưu cơ sở dữ liệu, v.v ... Nói chung tất cả đều khá cơ bản với postgres và nói chung là khá đơn giản để tích hợp điều này vào các tập lệnh thiết lập phát triển của bạn hoặc vào cấu hình CI tự động.
và cách hoàn toàn tự động với bash và mong đợi ( trong ví dụ này, chúng tôi cung cấp một quản trị viên postgres mới với các postgres mới được cung cấp ở cả mức độ thời gian chạy của OS và 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:
Trên nhiều hệ thống, tài khoản của người dùng thường chứa một khoảng thời gian hoặc một loại hàm (người dùng: john.smith, horise.johnson). Ở những trường hợp này, một sửa đổi sẽ phải được thực hiện cho câu trả lời được chấp nhận ở trên. Thay đổi yêu cầu tên người dùng phải được trích dẫn kép.
Example:
ALTER USER "username.lastname" WITH PASSWORD 'password';
Hợp lý:
Postgres khá kén chọn khi nào nên sử dụng 'trích dẫn kép' và khi nào nên sử dụng 'trích dẫn đơn'. Thông thường khi cung cấp một chuỗi bạn sẽ sử dụng một trích dẫn.