PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Chạy tệp hàng loạt bằng lệnh psql mà không cần mật khẩu

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 trong 127.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\ .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chọn hàng ngẫu nhiên từ bảng PostgreSQL với xác suất hàng có trọng số

  2. Nhập CSV PostgreSQL từ dòng lệnh

  3. Tại sao PostgreSQL hợp nhất người dùng và nhóm thành vai trò?

  4. Cách kiểm tra xem một bảng có tồn tại trong một lược đồ nhất định hay không

  5. Cách tìm khoảng thời gian giữa hai ngày trong PostgreSQL