TL; DR: Người dùng mới có thể tạo các bảng trong public
lược đồ vì mọi người phàn nàn rằng quá khó khi họ không thể.
Nếu bạn không thích mặc định, có lẽ bạn nên tạo cơ sở dữ liệu mẫu mới với cấu hình ban đầu mà bạn muốn. Ví dụ: bạn có thể:
DROP SCHEMA public;
hoặc là
REVOKE ALL ON SCHEMA public FROM public;
GRANT USAGE ON SCHEMA public TO public;
trong mẫu của bạn.
Nếu bạn muốn public
người dùng không có quyền đối với cơ sở dữ liệu, bạn nên bổ sung:
REVOKE ALL ON DATABASE mydbname FROM public;
GRANT CONNECT ON DATABASE mydbname TO public;
để public
người dùng không thể tạo lược đồ hoặc sử dụng bảng tạm thời.
Cá nhân, nếu tôi đang thiết kế cái này, tôi sẽ cung cấp cho người dùng TEMP
quyền trên cơ sở dữ liệu theo mặc định, nhưng không phải CREATE
(lược đồ trong cơ sở dữ liệu) hoặc CREATE
(bảng trong public
lược đồ). Tôi sẽ dành những thứ đó cho chủ sở hữu.
Tuy nhiên, chúng là những lựa chọn đã được đưa ra từ lâu và thật khó để thay đổi chúng bây giờ.
Như vậy, có những phàn nàn thường xuyên rằng quá khó để bắt đầu với PostgreSQL vì bạn phải tạo tài khoản người dùng và thường cũng muốn tạo cơ sở dữ liệu. Tại sao chúng ta không tự động tạo chúng và mặc định là 'tin tưởng' làm chế độ xác thực để làm cho nó dễ dàng? Tại sao postgres
người dùng không mặc định có mật khẩu postgres
? Tại sao chúng ta không tự động tạo người dùng nếu họ tồn tại trong HĐH? Vân vân.
Có một số vấn đề về khả năng sử dụng thực sự đối với người dùng mới - đặc biệt, hầu hết mọi người không biết peer
auth là gì hoặc tại sao chỉ chạy psql
sau khi cài đặt PostgreQuery nói với họ rằng không có người dùng nào mà họ đăng nhập.
Nó cũng lộn xộn pg_hba.conf
là một tệp cấu hình, nhưng người dùng được tạo ở cấp SQL. Sự phân chia này gây nhầm lẫn cho người dùng.
Mặc dù vậy, có rất nhiều điều là sự thỏa hiệp giữa các mặc định an toàn và các mặc định dễ dàng trong đó dự án sẽ không bao giờ khiến mọi người hài lòng.
revoke create on database [databasename] from [username];
và DB hiện chỉ thực sự được đọc cho [tên người dùng]. Đúng? Tôi sẽ trở lại câu trả lời này một lần nữa khi tôi đã đọc một cuốn sách Postgres hay :)