PostgreSql пользователь не нашел никаких отношений - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь настроить разрешения базы данных следующим образом. 1. Пользователь postgres будет владельцем postgres и будет отвечать только за создание базы данных и ролей 2. Создайте схему для базы данных и сделайте пользователя app_ root схема и владелец таблицы 3. Создайте пользователя api_user , который будет иметь доступ только к DML

Вот команды, которые я выполнил. Я не хочу, чтобы у apiuser было больше привилегий, чем SELECT / INSERT / UPDATE / DELETE и ТОЛЬКО при раскрытии схемы. И app_ root user, и api_user не должны иметь доступа к схеме publi c.

Но когда я вхожу в базу данных как api_user, я получаю Permission Denied. Я не могу понять:

  1. Как предоставить минимальный набор разрешений для api_user
  2. Как убедиться, что эти разрешения сохраняются для любых новых таблиц, созданных в будущем

Вот команды, которые я использовал для настройки базы данных, схемы, таблицы и пользователей.

Переключитесь на пользователя postgres и подключитесь к базе данных

~$ sudo su postgres
~$ psql

Создать нового пользователя и базу данных

-- Create the schema owner
CREATE USER app_root WITH PASSWORD 'approot';
-- Create database
CREATE DATABASE apps;
-- Connect to the apps database
\connect apps;
-- Create new schema for the apps
CREATE SCHEMA apps AUTHORIZATION app_root;
-- Remove ability for all users to do everything in public schema
REVOKE ALL ON SCHEMA public FROM public;
-- Ensure users can list down objects in public schema
GRANT USAGE ON SCHEMA public TO public;

Отключить базу данных и теперь подключиться как пользователь app_ root, который мы создали для выполнения табличных операций с базой данных и схемой.

~$ psql -hlocalhost -Uapp_root -dapps -W
(enter your database user password to login)
-- Create a table for contacts in the apps schema
CREATE TABLE apps.contacts
(
    id serial,
    customer_code text,
    contact_name text,
    contact_email text,
    contact_phone text
);
-- Insert some sample data into the table
INSERT INTO apps.contacts(customer_code, contact_name, contact_email, contact_phone) VALUES('apollo', 'John Doe', 'jdoe@apollo.com', '536-847-5857');
INSERT INTO apps.contacts(customer_code, contact_name, contact_email, contact_phone) VALUES('apollo', 'David Brown', 'dbrown@apollo.com', '254-457-8452');
INSERT INTO apps.contacts(customer_code, contact_name, contact_email, contact_phone) VALUES('ryndall', 'Mary Miller', 'mmiller@ryndall.com', '235-654-7845');
INSERT INTO apps.contacts(customer_code, contact_name, contact_email, contact_phone) VALUES('ryndall', 'Tommy Smith', 'tsmith@ryndall.com', '854-965-6514');

Подключитесь к базе данных с помощью postgres пользователя и создайте нового пользователя БД с правами только DML (SELECT / INSERT / UPDATE / DELETE).

CREATE USER api_user WITH PASSWORD 'apiuser';
\connect apps;
GRANT USAGE ON SCHEMA apps TO api_user;

1 Ответ

0 голосов
/ 16 июня 2020

Вам необходимо явно предоставить привилегии для таблиц схемы (usage on schema недостаточно):

Например:

grant all privileges on all tables in schema apps to api_user;
...