Hãy tiếp tục đọc, lựa chọn tốt nhất đến sau cùng . Nhưng trước tiên hãy làm rõ một số điều.
Chỉ tắt tiếng yêu cầu mật khẩu
Nếu vấn đề của bạn chỉ là lời nhắc mật khẩu, bạn có thể tắt tiếng nó. Tôi trích dẫn sách hướng dẫn ở đây:
-w
--no-password
Không bao giờ đưa ra lời nhắc mật khẩu. Nếu máy chủ yêu cầu xác thực mật khẩu và mật khẩu không khả dụng bằng các phương tiện khác như
.pgpass
tệp, nỗ lực kết nối sẽ không thành công. Tùy chọn này có thể hữu ích trong các công việc hàng loạt và tập lệnh mà không có người dùng nào có mặt để nhập mật khẩu. (...)
Có thể bạn không cần mật khẩu
Bình thường điều này là không cần thiết. Cơ sở dữ liệu mặc định superuser postgres
thường tương ứng với người dùng hệ thống cùng tên. Đang chạy psql
từ tài khoản này không yêu cầu mật khẩu nếu phương thức xác thực peer
hoặc ident
được đặt trong pg_hba.conf
của bạn tập tin. Bạn có thể có một dòng như thế này:
local all postgres peer
Và thường là:
local all all peer
Điều này có nghĩa là, mọi địa phương người dùng có thể đăng nhập vào một tất cả cơ sở dữ liệu với tư cách là người dùng cơ sở dữ liệu có cùng tên mà không có mật khẩu.
Tuy nhiên , có một quan niệm sai lầm phổ biến ở đây. Trích dẫn lại:
Phương pháp này chỉ được hỗ trợ trên kết nối cục bộ .
Tôi nhấn mạnh đậm.
Bạn đang kết nối với localhost
, không phải là "kết nối cục bộ" , mặc dù nó có từ "địa phương" trong đó. Đó là kết nối TCP / IP tới 127.0.0.1. Wikipedia trên localhost:
Trên các hệ thống máy tính hiện đại,
localhost
dưới dạng tên máy chủ sẽ chuyển thành địa chỉ anIPv4 trong127.0.0.0/8
(loopback) khối net, thường là127.0.0.1
hoặc::1
trong IPv6.
Giải pháp đơn giản cho các kết nối cục bộ
Bỏ qua tham số -h
từ psql
sự cầu khẩn. Trích dẫn hướng dẫn sử dụng psql
một lần nữa:
Nếu bạn bỏ qua tên máy chủ, psql sẽ kết nối qua ổ cắm miền Unix tới máy chủ trên máy chủ cục bộ hoặc qua TCP / IP tới
localhost
trên máy không có ổ cắm miền Unix.
Windows
... không có ổ cắm miền Unix, pg_hba.conf
các dòng bắt đầu bằng local
không áp dụng trên Windows. Trên Windows, bạn kết nối qua localhost
theo mặc định, điều này sẽ đưa chúng ta trở lại ban đầu.
Nếu các yêu cầu bảo mật của bạn lỏng lẻo, bạn chỉ có thể tin tưởng tất cả các kết nối qua localhost
:
host all all 127.0.0.1/32 trust
Tôi chỉ làm điều đó để gỡ lỗi khi tắt kết nối từ xa. Để bảo mật hơn, bạn có thể sử dụng xác thực SSPI trên Windows. Thêm dòng này vào pg_hba.conf
cho các kết nối "cục bộ":
host all all 127.0.0.1/32 sspi
Nếu bạn thực sự cần mật khẩu
Bạn có thể đặt một biến môi trường , nhưng điều này không khuyến khích , đặc biệt là đối với Windows. Hướng dẫn sử dụng:
PGPASSWORD
hoạt động giống như tham số kết nối mật khẩu. Việc sử dụng biến môi trường này không được khuyến khích vì lý do bảo mật, vì một số hệ điều hành cho phép người dùng không phải rootus xem các biến môi trường của quá trình thông qua ps; thay vào đó, xem xét bằng cách sử dụng~/.pgpass
tệp (xem Phần 32.15).
Hướng dẫn sử dụng psql
:
A conninfo
string là một sự thay thế để chỉ định các tham số kết nối:
$ psql "user=myuser password=secret_pw host=localhost port=5432 sslmode=require"
Hoặc URI , được sử dụng thay cho tên cơ sở dữ liệu:
$ psql postgresql://myuser:[email protected]:5432/mydb?sslmode=require
Tệp mật khẩu
Nhưng thường tốt hơn nếu thiết lập .pgpass
tập tin chứ không phải đặt mật khẩu vào các tệp script.
Đọc kỹ chương ngắn trong sách hướng dẫn. Đặc biệt, lưu ý rằng tại đây ...
Tên máy chủ của
localhost
khớp với cả TCP (tên máy chủlocalhost
) và ổ cắm miền Unix (pghost
trống hoặc thư mục socket mặc định) các kết nối đến từ máy cục bộ.
Đường dẫn chính xác phụ thuộc vào hệ thống. Tệp này có thể lưu trữ mật khẩu cho nhiều kết hợp vai trò và cổng (cụm DB):
localhost:5432:*:myadmin:myadminPasswd
localhost:5434:*:myadmin:myadminPasswd
localhost:5437:*:myadmin:myadminPasswd
...
Trên Windows máy tìm kiếm tệp trong:
%APPDATA%\postgresql\pgpass.conf
%APPDATA%
thường giải quyết thành:C:\Documents and Settings\My_Windows_User_Name\Application Data\
.