Чому новий користувач може створювати таблиці в PostgreSQL?


13

Я дотримувався двох навчальних посібників для створення БД з:

  1. повністю привілейоване посилання користувача
  2. посилання користувача лише для читання

Тоді я отримав підказку з підручника CJ Estel, в якому зазначається, що "ви, можливо, успадкували можливість створювати таблиці, хоча ми ніколи прямо не давали її новому користувачеві". Впевнений, що користувач, який лише для читання, може створювати та володіти таблицями!

CJ Estel дуже добре вказав на першопричину, а саме на базу даних шаблонів. Але можливість створювати таблиці підриває більшість навчальних посібників, які ви отримуєте з googling "читати лише postgres користувачів", включаючи один, розміщений на postgresql.org . Ваш користувач має більше, ніж лише права читання!

Чому новий користувач має таку можливість? Після відкликання цього привілею, чи справді база даних читається лише для цього користувача?

Відповіді:


13

TL; DR: Нові користувачі можуть створювати таблиці в publicсхемі, оскільки люди скаржилися, що це занадто важко, коли вони не могли.

Якщо ви не любите налаштування за замовчуванням, вам, мабуть, слід створити нову базу даних шаблонів із початковою конфігурацією, яку ви хочете. Наприклад, ви можете:

DROP SCHEMA public;

або

REVOKE ALL ON SCHEMA public FROM public;
GRANT USAGE ON SCHEMA public TO public;

у вашому шаблоні.

Якщо ви бажаєте, щоб publicкористувач не мав прав на базу даних, вам слід додатково:

REVOKE ALL ON DATABASE mydbname FROM public;
GRANT CONNECT ON DATABASE mydbname TO public;

так що publicкористувач не може створювати схеми або використовувати темп-таблиці.


Особисто, якщо я розробляв це, я дав би користувачам TEMPправо на базу даних за замовчуванням, але не CREATE(схеми в базі даних) або CREATE(таблиці в publicсхемі). Я б зарезервував їх для власника.

Це вибір, який було зроблено дуже давно, і зараз їх досить важко змінити.


Як правило, є регулярні скарги на те, що розпочати роботу з PostgreSQL занадто важко, оскільки вам потрібно створити обліковий запис користувача, а також часто потрібно створити базу даних. Чому ми просто не створимо їх автоматично та за замовчуванням «довіримось» як авторизований режим, щоб зробити його легшим? Чому postgresкористувач за замовчуванням не має пароля postgres? Чому ми не можемо просто створити користувачів, якщо вони існують в ОС? тощо.

Існують деякі справжні проблеми юзабіліті для нових користувачів - зокрема, більшість людей не мають уявлення про те, що таке peerauth, або чому лише запущений psqlпісля встановлення PostgreSQL повідомляє їм, що немає користувача за іменем, на яке вони увійшли.

Також безладним pg_hba.confє конфігураційний файл, але користувачі створюються на рівні SQL. Цей розкол заплутує користувачів.

Однак багато речей - це компроміси між безпечними типовими та простими типовими настройками, коли проект ніколи не зробить всіх щасливими.


Отже, я запускаю, revoke create on database [databasename] from [username];і БД тепер справді читається лише для [ім'я користувача]. Правильно? Я знову повернусь до цієї відповіді, коли прочитав гарну книгу Postgres :)
Jesvin Jose

2
У відповідь на попередній коментар, його немає ні.
Джесвін Хосе
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.