2013-06-01 36 views
12

Tôi cố gắng để làm điều này trong một kịch bản:Tạo một người dùng postgres mới programatically, mà không cần sự can thiệp của tương tác

» sudo -u postgres createuser -PE -s user1 
Enter password for new role: 

Tôi không muốn postgres để yêu cầu mật khẩu một cách tương tác, vì vậy tôi muốn làm:

» sudo -u postgres createuser -PE -s user1 < /tmp/xxx 

Nơi /tmp/xxx chứa mật khẩu cho người dùng mới. Nhưng nó không hoạt động. Bất kỳ ý tưởng làm thế nào để có được điều này làm việc?

Trả lời

10

Bạn có thể làm điều đó sử dụng SQL đơn giản sau khi kết nối như một superuser (ví dụ postgres) cơ sở dữ liệu trong câu hỏi:

create user user1 password 'foobar' 

Nếu bạn cần phải làm điều này từ bên trong một kịch bản bạn có thể đặt đó vào một sql nộp và sau đó chuyển thông tin này đến psql:

 
» sudo -u postgres psql --file=create_user.sql 
2

Từ vỏ, bạn có thể sử dụng một tài liệu ở đây-, như:

#!/bin/sh 

psql -U postgres postgres <<OMG 
CREATE USER lutser password '`cat /tmp/xxx`' ; 
OMG 

BTW: Tôi không nghĩ rằng nên lưu trữ mật khẩu trong /tmp/, thậm chí không phải tạm thời.

+0

Tôi hiểu nhưng ... làm thế nào để bạn nhập mật khẩu theo chương trình mà không cần có * ở đâu đó *? Cách tôi làm điều đó: Tôi có chúng trong một tập tin địa phương (văn bản thuần túy) được lập chỉ mục bởi id mật khẩu (có nghĩa là, các tập tin mật khẩu là password_id: mật khẩu. Tập tin này được bảo vệ, và tôi truy cập nó với sudo. quản lý mật khẩu của tôi, bằng cách có một dịch vụ đơn giản cung cấp quyền truy cập vào tệp này. – dangonfast

Các vấn đề liên quan