Я перехожу из MySQL в PostgreSQL и попал на стену с привилегиями пользователя. Я привык назначать пользователю все привилегии для всех таблиц базы данных со следующей командой:
# MySQL
grant all privileges on mydatabase.* to 'myuser'@'localhost' identified by 'mypassword';
Мне кажется, что решение PostgreSQL 9.x предполагает присвоение привилегий "схеме", но усилия, требуемые от меня, чтобы точно выяснить, что SQL для выдачи, является чрезмерным. Я знаю, что еще несколько часов исследований дадут ответ, но я думаю, что все, переходящие от MySQL к PostgreSQL, могут извлечь выгоду из наличия хотя бы одной страницы в Интернете, которая предоставляет простой и полный рецепт. Это единственная команда, которую мне когда-либо приходилось выпускать для пользователей. Я бы предпочел не вводить команду для каждой новой таблицы.
Я не знаю, какие сценарии нужно обрабатывать по-разному в PostgreSQL, поэтому я расскажу о некоторых сценариях, которые я обычно должен был обрабатывать в прошлом. Предположим, что мы имеем в виду только изменение прав на одну созданную базу данных.
(1a) Не все таблицы уже созданы, или (1b) таблицы уже созданы.
(2a) Пользователь еще не создан или (2b) пользователь уже создан.
(3a) Привилегии еще не назначены пользователю, или (3b) привилегии ранее были назначены пользователю.
(4a) Пользователю нужно только вставлять, обновлять, выбирать и удалять строки или (4b), пользователь также должен иметь возможность создавать и удалять таблицы.
Я видел ответы, которые предоставляют все привилегии для всех баз данных, но это не то, что я хочу здесь. Пожалуйста, я ищу простой рецепт, хотя я бы тоже не возражал против объяснения.
Я не хочу предоставлять права всем пользователям и всем базам данных, как представляется, обычным ярлыком, потому что этот подход компрометирует все базы данных, когда какой-либо один пользователь взломан. Я размещаю несколько клиентов базы данных и назначаю каждому клиенту другой логин.
Похоже, мне также нужна привилегия USAGE
, чтобы получить возрастающие значения столбца serial
, но я должен предоставить ее на какой-то последовательности. Моя проблема усложнилась.