Tại sao người dùng mới có thể tạo bảng trong PostgreSQL?


13

Tôi đã làm theo hai hướng dẫn để tạo DB với:

  1. một liên kết người dùng hoàn toàn đặc quyền
  2. một liên kết người dùng chỉ đọc

Sau đó tôi đã nhận được một lời khuyên từ hướng dẫn của CJ Estel nói rằng "bạn có thể đã thừa hưởng khả năng tạo bảng mặc dù chúng tôi chưa bao giờ đưa nó cho người dùng mới của chúng tôi". Chắc chắn, người dùng chỉ đọc có thể tạo và sở hữu các bảng!

CJ Estel đã chỉ ra nguyên nhân gốc rễ rất tốt, cụ thể là cơ sở dữ liệu mẫu. Nhưng khả năng tạo bảng làm suy yếu hầu hết các hướng dẫn mà bạn nhận được từ việc "chỉ đọc các bài đăng của người dùng", bao gồm một bài được lưu trữ trên postgresql.org . Người dùng của bạn có nhiều đặc quyền hơn chỉ đọc!

Tại sao một người dùng mới có khả năng này? Sau khi thu hồi đặc quyền này, cơ sở dữ liệu có thực sự chỉ đọc cho người dùng đó không?

Câu trả lời:


13

TL; DR: Người dùng mới có thể tạo các bảng trong publiclượ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 publicngườ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;

để publicngườ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 TEMPquyề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 publiclượ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 postgresngườ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 peerauth là gì hoặc tại sao chỉ chạy psqlsau 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.conflà 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.


Vì vậy, tôi chạy 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 :)
Jesvin Jose

2
Trả lời bình luận trước đó, nó là không.
Jesvin Jose
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.