Ошибка нет доступа к отношению

Перейти к контенту

Как решить проблему? и как посмотреть лог puma? не могу найти нигде.

Ситуация такая: хочу сделать staging для проекта.

1) сделал деплой проекта на тестовый сервер (raspberry).

2) Восстановил базу (postgresql) из бэкапа с продакшн. Миграции не накатывал, их 1000 и очень много отваливается, приходится лезть и комментировать код, да и это не вариант.

Использую nginx, который смотрит на puma.
Запускаю

bundle exec puma -e production -b unix:///home/ivanov/www/ivanov/current/apps/www/tmp/sockets/puma.sock

и вываливается ошибка:

DEPRECATION WARNING: You have Rails 2.3-style plugins in vendor/plugins! Support for these plugins will be removed in Rails 4.0. Move them out and bundle them in your Gemfile, or fold them in to your app as lib/myplugin/* and config/initializers/myplugin.rb. See the release notes for more on this: http://weblog.rubyonrails.org/2012/1/4/rails-3-2-0-rc2-has-been-released. (called from <top (required)> at /home/ivanov/www/ivanov/releases/20170622115720/apps/www/config/environment.rb:9)
/home/ivanov/www/ivanov/releases/20170622115720/apps/www/config/initializers/bypass_ssl_verification_for_open_uri.rb:1: warning: already initialized constant OpenSSL::SSL::VERIFY_PEER
/home/ivanov/.rvm/gems/ruby-2.0.0-p247@parts-script-new-admin/gems/actionpack-3.2.13/lib/action_dispatch/http/mime_type.rb:102: warning: already initialized constant Mime::PDF
/home/ivanov/.rvm/gems/ruby-2.0.0-p247@parts-script-new-admin/gems/actionpack-3.2.13/lib/action_dispatch/http/mime_type.rb:102: warning: previous definition of PDF was here
! Unable to load application: ActiveRecord::StatementInvalid: PG::Error: ОШИБКА:  нет доступа к отношению site_configs
: SELECT  "site_configs".* FROM "site_configs"  LIMIT 1
/home/ivanov/.rvm/gems/ruby-2.0.0-p247@parts-script-new-admin/gems/activerecord-3.2.13/lib/active_record/connection_adapters/postgresql_adapter.rb:1161:in `async_exec': PG::Error: ОШИБКА:  нет доступа к отношению site_configs (ActiveRecord::StatementInvalid)
: SELECT  "site_configs".* FROM "site_configs"  LIMIT 1

В database.yml указан owners таблицы, и у него стоит GRANT ALL privileges ON DATABASE

в логах приложения:

Connecting to database specified by database.yml
Connecting to database specified by database.yml
Connecting to database specified by database.yml
Connecting to database specified by database.yml
Connecting to database specified by database.yml
Connecting to database specified by database.yml
Connecting to database specified by database.yml
Connecting to database specified by database.yml

    msm.ru

    Нравится ресурс?

    Помоги проекту!

    !
    информация о разделе

    user posted image Данный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных — обсуждаем в разделе «Базы данных: общие вопросы». Убедительная просьба — соблюдать «Правила форума» и не пренебрегать «Правильным оформлением своих тем». Прежде, чем создавать тему, имеет смысл заглянуть в раздел «Базы данных: FAQ», возможно там уже есть ответ.

    >
    разные пользователи и доступ
    , не могу разобраться с ролями

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему

      


    Сообщ.
    #1

    ,
    13.10.15, 19:17

      Senior Member

      ****

      Рейтинг (т): 13

      Здравствуйте, Господа!
      Сразу предупрежу: в PostgreSQL я пока еще совсем новичок.
      Опишу проблему на примере, думаю так станет понятнее.

      ExpandedWrap disabled

        #psql

        postgres=# CREATE USER user1 WITH password ‘password’;

        postgres=# CREATE DATABASE db1;

        postgres=# GRANT ALL PRIVILEGES ON DATABASE db1 TO user1;

        postgres=# CREATE USER user2 WITH password ‘password’;

        postgres=# GRANT ALL PRIVILEGES ON DATABASE db1 TO user2;

        postgres=# q

        #psql -U user1 db1

        db1=# CREATE SEQUENCE user_ids;

        db1=# CREATE TABLE users (id INTEGER PRIMARY KEY DEFAULT NEXTVAL(‘user_ids’), login CHAR(64), password CHAR(64));

        db1=# INSERT INTO users (login, password) VALUES («u1», «p1»);

        db1=# q

        #psql -U user2 db1

        db1=# INSERT INTO users (login, password) VALUES («u2», «p2»);

        ОШИБКА:  нет доступа к отношению users

      Вот тут я в растерянности. Оба пользователя ALL PRIVILEGES для db1, но второй, т.е. не создатель таблицы, добавлять записи не может.
      Как это побороть?


      grgdvo



      Сообщ.
      #2

      ,
      14.10.15, 12:36

        Member

        **

        Рейтинг (т): 21

        Опция ALL PRIVILEGES для DATABASE подразумевает CREATE, CONNECT и кажется TEMP привилегии для базы данных.
        Так вот CREATE позволяет создавать ТОЛЬКО схемы в рамках базы данных.
        А для схемы вы не предоставили прав, соответственно получили ошибку доступа.


        HighMan



        Сообщ.
        #3

        ,
        14.10.15, 14:57

          Senior Member

          ****

          Рейтинг (т): 13

          Цитата grgdvo @ 14.10.15, 12:36

          Опция ALL PRIVILEGES для DATABASE подразумевает CREATE, CONNECT и кажется TEMP привилегии для базы данных.
          Так вот CREATE позволяет создавать ТОЛЬКО схемы в рамках базы данных.
          А для схемы вы не предоставили прав, соответственно получили ошибку доступа.

          Простите бестолкового, а как для схем предоставить привилегии?
          Если, возможно, напишите запрос на основе моего примера.
          Спасибо!

          Сообщение отредактировано: HighMan — 14.10.15, 14:58


          grgdvo



          Сообщ.
          #4

          ,
          14.10.15, 20:28

            Member

            **

            Рейтинг (т): 21

            Цитата HighMan @ 14.10.15, 14:57

            Простите бестолкового, а как для схем предоставить привилегии?

            В конце я неправ, забываешь как оно работает, когда не пользуешься.
            Для схемы (как объекта) тоже будет недостаточно прав :(

            Нужны команды конкретно на таблицу или ALL TABLES IN SCHEMA.
            И права нужно раздавать после создания таблицы, либо умудриться использовать ALTER DEFAULT PRIVILEGES.

            Для вашего примера скорее всего правильный порядок будет такой

            ExpandedWrap disabled

              ~ # psql -U postgres

              postgres=# CREATE USER user1 WITH password ‘password’;

              postgres=# CREATE USER user2 WITH password ‘password’;

              postgres=# CREATE DATABASE db1;

              postgres=# q

            db1 создается со схемой public по умолчанию, в которой пользователи уже могут создавать таблицы (и т.д.), поэтому user1 и user2 смогут создать свои объекты базы

            ExpandedWrap disabled

              ~ # psql -U user1 db1

              db1=# CREATE SEQUENCE user_ids;

              db1=# CREATE TABLE users (id INTEGER PRIMARY KEY DEFAULT NEXTVAL(‘user_ids’), login CHAR(64), password CHAR(64));

              db1=# INSERT INTO users (login, password) VALUES (‘u1’, ‘p1’);

              db1=# q

            теперь к user_ids и users доступ имеет только user1, ибо он владелец этих объектов.
            Назначаем права user2

            ExpandedWrap disabled

              ~ # psql -U postgres db1

              db1=# GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO user2;

              db1=# GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO user2;

            Теперь user2 имеет все привилегии на таблицы и последовательнсти, которые УЖЕ БЫЛИ СОЗДАНЫ на данный момент в схеме.

            ExpandedWrap disabled

              ~ # psql -U user2 db1

              db1=# INSERT INTO users (login, password) VALUES (‘u2’, ‘p2’);

            Сообщение отредактировано: grgdvo — 14.10.15, 20:28


            HighMan



            Сообщ.
            #5

            ,
            14.10.15, 20:30

              Senior Member

              ****

              Рейтинг (т): 13

              Цитата grgdvo @ 14.10.15, 20:28

              Цитата HighMan @ 14.10.15, 14:57

              Простите бестолкового, а как для схем предоставить привилегии?

              В конце я неправ, забываешь как оно работает, когда не пользуешься.
              Для схемы (как объекта) тоже будет недостаточно прав :(

              Нужны команды конкретно на таблицу или ALL TABLES IN SCHEMA.
              И права нужно раздавать после создания таблицы, либо умудриться использовать ALTER DEFAULT PRIVILEGES.

              Для вашего примера скорее всего правильный порядок будет такой

              ExpandedWrap disabled

                ~ # psql -U postgres

                postgres=# CREATE USER user1 WITH password ‘password’;

                postgres=# CREATE USER user2 WITH password ‘password’;

                postgres=# CREATE DATABASE db1;

                postgres=# q

              db1 создается со схемой public по умолчанию, в которой пользователи уже могут создавать таблицы (и т.д.), поэтому user1 и user2 смогут создать свои объекты базы

              ExpandedWrap disabled

                ~ # psql -U user1 db1

                db1=# CREATE SEQUENCE user_ids;

                db1=# CREATE TABLE users (id INTEGER PRIMARY KEY DEFAULT NEXTVAL(‘user_ids’), login CHAR(64), password CHAR(64));

                db1=# INSERT INTO users (login, password) VALUES (‘u1’, ‘p1’);

                db1=# q

              теперь к user_ids и users доступ имеет только user1, ибо он владелец этих объектов.
              Назначаем права user2

              ExpandedWrap disabled

                ~ # psql -U postgres db1

                db1=# GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO user2;

                db1=# GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO user2;

              Теперь user2 имеет все привилегии на таблицы и последовательнсти, которые УЖЕ БЫЛИ СОЗДАНЫ на данный момент в схеме.

              ExpandedWrap disabled

                ~ # psql -U user2 db1

                db1=# INSERT INTO users (login, password) VALUES (‘u2’, ‘p2’);

              Спасибо большое!
              Постараюсь завтра проверить!

              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

              0 пользователей:

              • Предыдущая тема
              • Базы данных: SQL
              • Следующая тема

              Рейтинг@Mail.ru

              [ Script execution time: 0,0299 ]   [ 15 queries used ]   [ Generated: 31.01.23, 05:32 GMT ]  

              5 ответов

              Вот полное решение для PostgreSQL 9+, недавно обновленное.

              CREATE USER readonly  WITH ENCRYPTED PASSWORD 'readonly';
              GRANT USAGE ON SCHEMA public to readonly;
              ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly;
              
              -- repeat code below for each database:
              
              GRANT CONNECT ON DATABASE foo to readonly;
              c foo
              ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO readonly; --- this grants privileges on new tables generated in new database "foo"
              GRANT USAGE ON SCHEMA public to readonly; 
              GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO readonly;
              GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;
              

              Благодаря http://jamie.curle.io/creating-a-read-only-user-in-postgres/ для нескольких важных аспектов

              Если кто-то найдет более короткий код и, желательно, тот, который способен выполнить это для всех существующих баз данных, добавляет дополнительные преимущества.

              sorin
              22 нояб. 2012, в 12:23

              Поделиться

              Попробуйте добавить

              GRANT USAGE ON SCHEMA public to readonly;
              

              Вероятно, вы пропустили, что у вас должны быть разрешения на использование схем в этой схеме.

              sufleR
              21 нояб. 2012, в 18:36

              Поделиться

              Это сработало для меня:

              Проверьте текущую роль, в которую вы вошли, используя:
              SELECT CURRENT_USER, SESSION_USER;

              Примечание. Он должен совпадать с владельцем схемы.

              Схема | Имя | Тип | Владелец
              ——— + ——— + ——- + ———-

              Если владелец отличается, то предоставите все гранты текущей роли пользователя из роли администратора:

              GRANT ‘ROLE_OWNER’ для «ТЕКУЩЕГО РОЛИНАМА»;

              Затем попробуйте выполнить запрос, он даст результат, так как теперь он имеет доступ ко всем отношениям.

              Dhwani Shah
              25 июнь 2015, в 01:01

              Поделиться

              Вы должны выполнить следующий запрос:

              GRANT ALL ON TABLE mytable TO myuser;
              

              Или, если ваша ошибка в представлении, возможно, у таблицы нет разрешения, поэтому вы должны выполнить следующий запрос:

              GRANT ALL ON TABLE tbm_grupo TO myuser;
              

              yesy
              27 окт. 2015, в 18:09

              Поделиться

              убедитесь, что ваш пользователь имеет атрибуты своей роли. например:

              postgres=# du
                                           List of roles
               Role name |                   Attributes                   | Member of 
              -----------+------------------------------------------------+-----------
               flux      |                                                | {}
               postgres  | Superuser, Create role, Create DB, Replication | {}
              

              после выполнения следующей команды:

              postgres=# ALTER ROLE flux WITH Superuser;
              ALTER ROLE
              postgres=# du
                                           List of roles
               Role name |                   Attributes                   | Member of 
              -----------+------------------------------------------------+-----------
               flux      | Superuser                                      | {}
              postgres  | Superuser, Create role, Create DB, Replication | {}
              

              он исправил проблему.

              см. учебник для ролей и всего здесь: https://www.digitalocean.com/community/tutorials/how-to-use-roles-and-manage-grant-permissions-in-postgresql-on-a-vps—2

              PuN1sh3r
              16 июль 2015, в 07:31

              Поделиться

              Ещё вопросы

              • 1Как безопасно загружать / инициализировать одни и те же дочерние компоненты повторно
              • 0Обоснуйте навигацию внутри Twitter Bootstrap 3
              • 0jquery mobile — динамически добавлять переключатель
              • 1Найти индекс в строке где count (символы) в левой половине = count (символы) в правой половине?
              • 1Можно ли узнать, когда HTTP-ответ поступил клиенту на сервере? (ASP.NET)
              • 0Полноэкранный слайдер li 100% высоты не работает
              • 1Один оператор foreach, который перебирает две коллекции
              • 1Как рассчитать высоту и ширину повернутого изображения IIIF
              • 1Android: панель с центрированным изображением и кнопками справа
              • 1Как указать аргументы SSL JVM для встроенных сертификатов?
              • 1Как реализовать паттерн наблюдателя с CDI Events?
              • 0Скобки в селекторах jQuery
              • 0Как отбросить в моем коде значения «0,000 *», но все остальное пропустить?
              • 1Я пытаюсь нажать на каждую ссылку, используя селен и питон
              • 0Передача объекта в качестве аргумента в конструктор класса
              • 0импортировать локальные подмодули в Android-проект JNI
              • 1Проблема с draw () в MapView ItemizedOverlay
              • 0Как дать условие для псевдонима столбца в SQL
              • 0Вызов функции JJuery AJAX внутри каждого
              • 1Как бы я назвал намерение и поместил его в свой вектор?
              • 1Выполнение работоспособных пакетов в нескольких потоках
              • 0Диалог jquery показывает данные из предыдущего запроса ajax
              • 1Вставка тройных кавычек внутри тройных кавычек в файле cson
              • 0Неопределенная переменная при инициализации в операторе switch?
              • 1Копирование файла с устройства Android?
              • 1Формат даты и времени / Шаблоны в классе Java / SimpleDateFormat
              • 1Как увидеть полную ошибку сборки муравья, которая обрезана
              • 0После вычитания 4 соседних пикселей всегда дают ноль
              • 1Python Matplotlib Heatmap Colorbar из прозрачного
              • 1Запуск и остановка услуг
              • 0Доступ к личным членам класса
              • 1WPF Animation останавливается самопроизвольно
              • 0хотите получить имя файла и его путь, который был загружен с помощью плагина jquery
              • 0easyui «Объект не поддерживает это свойство или метод» в т. е. 9
              • 1Как добавить внешние файлы JS в проект Zurb Foundation 6.4 (веб-пакет)?
              • 0facebook: Как я могу получить ссылки на оригинальные фотографии из сообщений публичной группы
              • 0Сохранение контекста при использовании jQuery.on
              • 0nginx PHP переписывает профиль пользователя
              • 1Android ThreadSafeClientConnManager Тайм-ауты?
              • 1Как использовать служебное свойство в маршруте?
              • 0Добавить Telerik Grid Control на HTML-странице
              • 0Как отобразить сгенерированные результаты системой в виде графика
              • 1изо всех сил, чтобы проверить флягу-танец / фляга-безопасность / фляга-sqlalchemy / pytest
              • 0Безопасное встраивание строки в C-код (Безопасная строка, Безопасный символ *)
              • 0Почему не работает preg replce в iframe?
              • 1Использование модуля XLRD для поиска строки в импортированном Excel-файле
              • 1Группировка данных в сборе в одном формате в другой
              • 1d3.js интерполяция не работает
              • 0Как загрузить изображения тоже phpmyadmin ASP.Net
              • 0Как сделать так, чтобы Basic jQuery Slider останавливался после 1 цикла

              I kept getting this error when using flyway to deploy database changes. I do some manual setup first, such as creating the database, so flyway wouldn’t need those super-admin permissions.

              My Fix

              I had to ensure that the database user that flyway job used had ownership rights to the public schema, so that the flyway user could then assign the right to use the schema to other roles.

              Additional setup Details

              I am using AWS RDS (both regular and Aurora), and they don’t allow super users in the databases. RDS reserves super users for use by AWS, only, so that consumers are unable to break the replication stuff that is built in. However, there’s a catch-22 that you must be an owner in postgres to be able to modify it.

              My solution was to create a role that acts as the owner (‘owner role’), and then assign both my admin user and the flyway user to the owner role, and use ALTER scripts for each object to assign the object’s owner to the owner role.

              I missed the public schema, since that was auto-created when I created the database script manually. The public schema defaulted to my admin role rather than the shared owner role. So when the flyway user tried to assign public schema permissions to other roles, it didn’t have the authority to do that. An error was not thrown during flyway execution, however.

              I kept getting this error when using flyway to deploy database changes. I do some manual setup first, such as creating the database, so flyway wouldn’t need those super-admin permissions.

              My Fix

              I had to ensure that the database user that flyway job used had ownership rights to the public schema, so that the flyway user could then assign the right to use the schema to other roles.

              Additional setup Details

              I am using AWS RDS (both regular and Aurora), and they don’t allow super users in the databases. RDS reserves super users for use by AWS, only, so that consumers are unable to break the replication stuff that is built in. However, there’s a catch-22 that you must be an owner in postgres to be able to modify it.

              My solution was to create a role that acts as the owner (‘owner role’), and then assign both my admin user and the flyway user to the owner role, and use ALTER scripts for each object to assign the object’s owner to the owner role.

              I missed the public schema, since that was auto-created when I created the database script manually. The public schema defaulted to my admin role rather than the shared owner role. So when the flyway user tried to assign public schema permissions to other roles, it didn’t have the authority to do that. An error was not thrown during flyway execution, however.

              Добавляем права на чтение пользователю в postgres. ОШИБКА: нет доступа к отношению

              CREATE ROLE newuser2 WITH LOGIN ENCRYPTED PASSWORD 'newpass';
              ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO newuser2;
              GRANT USAGE ON SCHEMA public to newuser2;
              GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO newuser2;
              GRANT SELECT ON ALL TABLES IN SCHEMA public TO newuser2;
              ALTER ROLE newuser2 WITH Superuser;

                msm.ru

                Нравится ресурс?

                Помоги проекту!

                !
                информация о разделе

                user posted image Данный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных — обсуждаем в разделе «Базы данных: общие вопросы». Убедительная просьба — соблюдать «Правила форума» и не пренебрегать «Правильным оформлением своих тем». Прежде, чем создавать тему, имеет смысл заглянуть в раздел «Базы данных: FAQ», возможно там уже есть ответ.

                >
                разные пользователи и доступ
                , не могу разобраться с ролями

                • Подписаться на тему
                • Сообщить другу
                • Скачать/распечатать тему

                  


                Сообщ.
                #1

                ,
                13.10.15, 19:17

                  Senior Member

                  ****

                  Рейтинг (т): 13

                  Здравствуйте, Господа!
                  Сразу предупрежу: в PostgreSQL я пока еще совсем новичок.
                  Опишу проблему на примере, думаю так станет понятнее.

                  ExpandedWrap disabled

                    #psql

                    postgres=# CREATE USER user1 WITH password ‘password’;

                    postgres=# CREATE DATABASE db1;

                    postgres=# GRANT ALL PRIVILEGES ON DATABASE db1 TO user1;

                    postgres=# CREATE USER user2 WITH password ‘password’;

                    postgres=# GRANT ALL PRIVILEGES ON DATABASE db1 TO user2;

                    postgres=# q

                    #psql -U user1 db1

                    db1=# CREATE SEQUENCE user_ids;

                    db1=# CREATE TABLE users (id INTEGER PRIMARY KEY DEFAULT NEXTVAL(‘user_ids’), login CHAR(64), password CHAR(64));

                    db1=# INSERT INTO users (login, password) VALUES («u1», «p1»);

                    db1=# q

                    #psql -U user2 db1

                    db1=# INSERT INTO users (login, password) VALUES («u2», «p2»);

                    ОШИБКА:  нет доступа к отношению users

                  Вот тут я в растерянности. Оба пользователя ALL PRIVILEGES для db1, но второй, т.е. не создатель таблицы, добавлять записи не может.
                  Как это побороть?


                  grgdvo



                  Сообщ.
                  #2

                  ,
                  14.10.15, 12:36

                    Member

                    **

                    Рейтинг (т): 21

                    Опция ALL PRIVILEGES для DATABASE подразумевает CREATE, CONNECT и кажется TEMP привилегии для базы данных.
                    Так вот CREATE позволяет создавать ТОЛЬКО схемы в рамках базы данных.
                    А для схемы вы не предоставили прав, соответственно получили ошибку доступа.


                    HighMan



                    Сообщ.
                    #3

                    ,
                    14.10.15, 14:57

                      Senior Member

                      ****

                      Рейтинг (т): 13

                      Цитата grgdvo @ 14.10.15, 12:36

                      Опция ALL PRIVILEGES для DATABASE подразумевает CREATE, CONNECT и кажется TEMP привилегии для базы данных.
                      Так вот CREATE позволяет создавать ТОЛЬКО схемы в рамках базы данных.
                      А для схемы вы не предоставили прав, соответственно получили ошибку доступа.

                      Простите бестолкового, а как для схем предоставить привилегии?
                      Если, возможно, напишите запрос на основе моего примера.
                      Спасибо!

                      Сообщение отредактировано: HighMan — 14.10.15, 14:58


                      grgdvo



                      Сообщ.
                      #4

                      ,
                      14.10.15, 20:28

                        Member

                        **

                        Рейтинг (т): 21

                        Цитата HighMan @ 14.10.15, 14:57

                        Простите бестолкового, а как для схем предоставить привилегии?

                        В конце я неправ, забываешь как оно работает, когда не пользуешься.
                        Для схемы (как объекта) тоже будет недостаточно прав :(

                        Нужны команды конкретно на таблицу или ALL TABLES IN SCHEMA.
                        И права нужно раздавать после создания таблицы, либо умудриться использовать ALTER DEFAULT PRIVILEGES.

                        Для вашего примера скорее всего правильный порядок будет такой

                        ExpandedWrap disabled

                          ~ # psql -U postgres

                          postgres=# CREATE USER user1 WITH password ‘password’;

                          postgres=# CREATE USER user2 WITH password ‘password’;

                          postgres=# CREATE DATABASE db1;

                          postgres=# q

                        db1 создается со схемой public по умолчанию, в которой пользователи уже могут создавать таблицы (и т.д.), поэтому user1 и user2 смогут создать свои объекты базы

                        ExpandedWrap disabled

                          ~ # psql -U user1 db1

                          db1=# CREATE SEQUENCE user_ids;

                          db1=# CREATE TABLE users (id INTEGER PRIMARY KEY DEFAULT NEXTVAL(‘user_ids’), login CHAR(64), password CHAR(64));

                          db1=# INSERT INTO users (login, password) VALUES (‘u1’, ‘p1’);

                          db1=# q

                        теперь к user_ids и users доступ имеет только user1, ибо он владелец этих объектов.
                        Назначаем права user2

                        ExpandedWrap disabled

                          ~ # psql -U postgres db1

                          db1=# GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO user2;

                          db1=# GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO user2;

                        Теперь user2 имеет все привилегии на таблицы и последовательнсти, которые УЖЕ БЫЛИ СОЗДАНЫ на данный момент в схеме.

                        ExpandedWrap disabled

                          ~ # psql -U user2 db1

                          db1=# INSERT INTO users (login, password) VALUES (‘u2’, ‘p2’);

                        Сообщение отредактировано: grgdvo — 14.10.15, 20:28


                        HighMan



                        Сообщ.
                        #5

                        ,
                        14.10.15, 20:30

                          Senior Member

                          ****

                          Рейтинг (т): 13

                          Цитата grgdvo @ 14.10.15, 20:28

                          Цитата HighMan @ 14.10.15, 14:57

                          Простите бестолкового, а как для схем предоставить привилегии?

                          В конце я неправ, забываешь как оно работает, когда не пользуешься.
                          Для схемы (как объекта) тоже будет недостаточно прав :(

                          Нужны команды конкретно на таблицу или ALL TABLES IN SCHEMA.
                          И права нужно раздавать после создания таблицы, либо умудриться использовать ALTER DEFAULT PRIVILEGES.

                          Для вашего примера скорее всего правильный порядок будет такой

                          ExpandedWrap disabled

                            ~ # psql -U postgres

                            postgres=# CREATE USER user1 WITH password ‘password’;

                            postgres=# CREATE USER user2 WITH password ‘password’;

                            postgres=# CREATE DATABASE db1;

                            postgres=# q

                          db1 создается со схемой public по умолчанию, в которой пользователи уже могут создавать таблицы (и т.д.), поэтому user1 и user2 смогут создать свои объекты базы

                          ExpandedWrap disabled

                            ~ # psql -U user1 db1

                            db1=# CREATE SEQUENCE user_ids;

                            db1=# CREATE TABLE users (id INTEGER PRIMARY KEY DEFAULT NEXTVAL(‘user_ids’), login CHAR(64), password CHAR(64));

                            db1=# INSERT INTO users (login, password) VALUES (‘u1’, ‘p1’);

                            db1=# q

                          теперь к user_ids и users доступ имеет только user1, ибо он владелец этих объектов.
                          Назначаем права user2

                          ExpandedWrap disabled

                            ~ # psql -U postgres db1

                            db1=# GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO user2;

                            db1=# GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO user2;

                          Теперь user2 имеет все привилегии на таблицы и последовательнсти, которые УЖЕ БЫЛИ СОЗДАНЫ на данный момент в схеме.

                          ExpandedWrap disabled

                            ~ # psql -U user2 db1

                            db1=# INSERT INTO users (login, password) VALUES (‘u2’, ‘p2’);

                          Спасибо большое!
                          Постараюсь завтра проверить!

                          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

                          0 пользователей:

                          • Предыдущая тема
                          • Базы данных: SQL
                          • Следующая тема

                          Рейтинг@Mail.ru

                          [ Script execution time: 0,6314 ]   [ 15 queries used ]   [ Generated: 6.06.23, 01:03 GMT ]  

                          Как решить проблему? и как посмотреть лог puma? не могу найти нигде.

                          Ситуация такая: хочу сделать staging для проекта.

                          1) сделал деплой проекта на тестовый сервер (raspberry).

                          2) Восстановил базу (postgresql) из бэкапа с продакшн. Миграции не накатывал, их 1000 и очень много отваливается, приходится лезть и комментировать код, да и это не вариант.

                          Использую nginx, который смотрит на puma.
                          Запускаю

                          bundle exec puma -e production -b unix:///home/ivanov/www/ivanov/current/apps/www/tmp/sockets/puma.sock
                          

                          и вываливается ошибка:

                          DEPRECATION WARNING: You have Rails 2.3-style plugins in vendor/plugins! Support for these plugins will be removed in Rails 4.0. Move them out and bundle them in your Gemfile, or fold them in to your app as lib/myplugin/* and config/initializers/myplugin.rb. See the release notes for more on this: http://weblog.rubyonrails.org/2012/1/4/rails-3-2-0-rc2-has-been-released. (called from <top (required)> at /home/ivanov/www/ivanov/releases/20170622115720/apps/www/config/environment.rb:9)
                          /home/ivanov/www/ivanov/releases/20170622115720/apps/www/config/initializers/bypass_ssl_verification_for_open_uri.rb:1: warning: already initialized constant OpenSSL::SSL::VERIFY_PEER
                          /home/ivanov/.rvm/gems/ruby-2.0.0-p247@parts-script-new-admin/gems/actionpack-3.2.13/lib/action_dispatch/http/mime_type.rb:102: warning: already initialized constant Mime::PDF
                          /home/ivanov/.rvm/gems/ruby-2.0.0-p247@parts-script-new-admin/gems/actionpack-3.2.13/lib/action_dispatch/http/mime_type.rb:102: warning: previous definition of PDF was here
                          ! Unable to load application: ActiveRecord::StatementInvalid: PG::Error: ОШИБКА:  нет доступа к отношению site_configs
                          : SELECT  "site_configs".* FROM "site_configs"  LIMIT 1
                          /home/ivanov/.rvm/gems/ruby-2.0.0-p247@parts-script-new-admin/gems/activerecord-3.2.13/lib/active_record/connection_adapters/postgresql_adapter.rb:1161:in `async_exec': PG::Error: ОШИБКА:  нет доступа к отношению site_configs (ActiveRecord::StatementInvalid)
                          : SELECT  "site_configs".* FROM "site_configs"  LIMIT 1
                          

                          В database.yml указан owners таблицы, и у него стоит GRANT ALL privileges ON DATABASE

                          в логах приложения:

                          Connecting to database specified by database.yml
                          Connecting to database specified by database.yml
                          Connecting to database specified by database.yml
                          Connecting to database specified by database.yml
                          Connecting to database specified by database.yml
                          Connecting to database specified by database.yml
                          Connecting to database specified by database.yml
                          Connecting to database specified by database.yml
                          

                          Здравствуйте, почему не получается выдать права пользователю, хотя раньше всегда работал данный способ в моем случае.

                          CREATE DATABASE bot;
                          CREATE USER botuser WITH PASSWORD 'botpassword';
                          GRANT ALL PRIVILEGES ON DATABASE bot TO botuser;
                          
                          c bot
                          
                          CREATE TABLE example (id int PRIMARY KEY, name text)
                          
                          #Дальше через пользователя postgres, делаю коннект к базе командой:
                           psql -d bot -U botuser
                          
                          SELECT * FROM example;
                          
                          #Выходит ошибка: нет доступа к таблице example
                          
                          #Но если даю права именно на SELECT то получается под пользователем забирать данные:
                          
                          GRANT SELECT ON ALL TABLES IN SCHEMA public TO botuser;

                          В чем может быть проблема?

                          Понравилась статья? Поделить с друзьями:
                        • Ошибка нет картриджа пантум
                        • Ошибка нет доверия сертификату для wget
                        • Ошибка нет доверия сертификату для dl astralinux ru
                        • Ошибка нет видеосигнала на мониторе
                        • Ошибка нет бумаги hp laserjet p1505