Insufficient privilege 7 error permission denied for relation

I am trying to query a database table in postgresql, but every time I run the below query it gives me the INSUFFICIENT PRIVILEGE error. What possibly could be the reason for such permission denied ...

I am trying to query a database table in postgresql, but every time I run the below query it gives me the INSUFFICIENT PRIVILEGE error. What possibly could be the reason for such permission denied error. Also, I am using pgadmin tool in windows to connect the database which is in Linux environment. Below is the query I am running

> > SELECT appid,hash 
>       FROM app
>       WHERE appid=1;

While running the same query I am getting the below Error

ERROR:  permission denied for relation app

********** Error **********

ERROR: permission denied for relation app
SQL state: 42501

asked Aug 12, 2013 at 17:53

AKIWEB's user avatar

AKIWEBAKIWEB

18.6k66 gold badges177 silver badges287 bronze badges

1

The user running the query will need permissions to that table. You can grant them to that user with the GRANT statement. The below is an example that grants to PUBLIC

GRANT SELECT ON tablename TO PUBLIC;

Also I have seen SELinux cause isses and places such as here mention it. I am not exactly sure of the command to turn SELinux off but you can see if it is running by using

selinuxenabled && echo enabled || echo disabled

answered Aug 12, 2013 at 17:58

sealz's user avatar

sealzsealz

5,3385 gold badges38 silver badges70 bronze badges

3

It simply means that you have no permission to access app table. Request your root or database administrator to grant you the permission to access app table. if your are the root or have granting privilege you can use grant command to grant your self permission to use all sql statements on table or database
For Example:

               grant all privileges on database money to cashier;

before that you have to login as root or user that have granting privileges

for more details on this command refer to
http://www.postgresql.org/docs/8.1/static/sql-grant.html

answered Aug 12, 2013 at 18:12

Himanshu Pandey's user avatar

If it’s DB2 then go to command console of DB2, select your respective Database and select Authorities option by right click on the Database then add your respective DB2 user and grant required access.

answered Aug 1, 2016 at 12:20

user6663265's user avatar

You need to make sure that the user with which you are connecting with also has the «USAGE» access on the schema you are trying to access with the user. I have recently faced an error where I got the dump restored into a database and then had some users to whom I was only supposed to provide the read-only access. I have followed the following steps —

CREATE ROLE myapp_readonly;
GRANT CONNECT ON DATABASE {database} TO myapp_readonly;
GRANT USAGE ON SCHEMA {schema} TO myapp_readonly;
GRANT SELECT ON TABLE {schema}.{table_name} TO myapp_readonly;
GRANT myapp_readonly TO {usre};

After performing these steps when I tried to access the table, had received the following error —

SQL Error [42501]: ERROR: permission denied for schema {schema}

In my case, my users were available already and the schemas and the database were restored recently. After I have provided the «USAGE» access to the schema to the user the error was resolved.

answered Jul 7, 2020 at 23:38

Shaounak Nasikkar's user avatar

Содержание

  1. Quick fix for PostgreSQL error 42501
  2. When does PostgreSQL error 42501 occur?
  3. 1. Insufficient privilege for the user
  4. 2. SELinux setting
  5. Fix for 42501 permission denied error
  6. 1.Granting Privilege to a user
  7. 2. Disabling SELinux
  8. Conclusion
  9. PREVENT YOUR SERVER FROM CRASHING!
  10. Not able to use a different connection for the database when using Postgres: Insufficient privilege #1109
  11. Comments
  12. Bug Report
  13. Summary
  14. Current behavior
  15. How to reproduce
  16. Expected behavior
  17. 42501: НЕДОСТАТОЧНАЯ ОШИБКА ПРИВИЛЕГИИ при запросе в Postgresql
  18. There are a lot of PostgreSQL errors out there. Way too much, right?
  19. 1. PostgreSQL error
  20. “Error: syntax error at or near ‘grant’”
  21. Quick fix
  22. Proper fix
  23. 2. PostgreSQL error
  24. “Error 42501” or “Permission Denied”
  25. Quick fix
  26. Proper fix
  27. 3. PostgreSQL error
  28. “Error 1053” or “The service did not respond to the start or control request in a timely fashion”
  29. Quick fix
  30. Proper fix
  31. 42501: НЕДОСТАТОЧНАЯ ОШИБКА ПРИВИЛЕГИИ во время запроса в Postgresql
  32. 3 ответа

Quick fix for PostgreSQL error 42501

by Sijin George | Sep 9, 2019

A last-minute website error is always frustrating.

PostgreSQL database queries often end up in errors with code 42501.

This PostgreSQL error 42501 usually occurs when an underprivileged user queries a database. This can be tricky to troubleshoot.

That’s why we often get requests to fix PostgreSQL errors as a part of our Server Management Services.

Today, let’s have a look into the error 42501 and see how our Support Engineers fix it for our customers.

When does PostgreSQL error 42501 occur?

Before moving on to the error 42501, let’s first see more about PostgreSQL.

PostgreSQL is one of the versatile database management systems. It comes handy for developers to build applications, server administrators to protect data and so on. In other words, PostgreSQL is a highly extensible database system.

The error code 42501 denotes insufficient privilege for the database user. But, there can be many reasons that lead to this error.

1. Insufficient privilege for the user

Usually, the 42501 error occurs when a PostgreSQL user with insufficient privileges makes a query on a database.

This indicates that the database user executed an operation, for which the user has no rights.

For database management, the user needs enough rights over the database.

When one of our customers was trying to query a database table in a PostgreSQL tool like pgAdmin, it ended up in error 42501.

The error message was

By default, in the PostgreSQL database, the user restoring the database will have the database ownership. For instance, when restoring a database as the root user, all objects will be under root ownership. And if another user is running any query on this database, it shows the 42501 error.

2. SELinux setting

Sometimes, the SELinux setting in the server can also cause an insufficient privilege error.

SELinux is a security architecture that is a part of Linux kernel. In SELinux, access and transition rights of a user, application, process, and file are all defined. Thus, if SELinux is enabled it affects the user privileges then the database query can end up in a 42501 error.

Fix for 42501 permission denied error

When our customers approach us with this error, our Support Team first checks the reasons that cause this error. The major reasons are insufficient user privilege and SELinux settings.

Now, let’s see how our Support Team fixes this error.

1.Granting Privilege to a user

First and foremost, when a customer approaches us with a 42501 error, we check the database user privileges already given.

If the user lacks enough permission, then we change it accordingly.

Mostly, the user does not have privileges over the requested tables.

In this case, we give privileges to the user over the requested tables using the command.

This command gives all privileges over the table to the public, hence anyone can use it.

But, some customers prefer giving privileges only to a few users.

In this case, to give table access only to certain users, we use the command.

After giving privileges to the user, our Support Team executes the query once again. This ensures that the error is fixed.

Similarly, if the root user restored the dump file, this can cause insufficient privilege for the database user.

That is, if the root user restores the database using pg_dump —no-owner then the root user who restored the database will have all privileges.

So, we always restore the database using the login of the desired user. Then, this user will have all privileges over the database.

2. Disabling SELinux

In some cases, the user has enough privilege over the database and still the database query show 42501 error. Here, the SELinux can be the reason causing the error.

After considering other security settings, our Support Team disables this feature using the command.

[Still having trouble in fixing PostgreSQL errors? – We will fix it for you.]

Conclusion

In short, the PostgreSQL error 42501 occurs mainly due to insufficient privileges for database user for running query. We saw how our Support Engineers fixed this error for our customers.

PREVENT YOUR SERVER FROM CRASHING!

Never again lose customers to poor server speed! Let us help you.

Our server experts will monitor & maintain your server 24/7 so that it remains lightning fast and secure.

Источник

Not able to use a different connection for the database when using Postgres: Insufficient privilege #1109

Bug Report

Q A
BC Break yes/no
Version 3.0.2

Summary

Even if many connections are configured, Doctrine doesn’t use the specified connection in the doctrine_migrations.yaml file. Possibly related to #1062 .

Current behavior

When running php bin/console doctrine:migrations:migrate , the command returns the following error:

I have tried allowing the regular user to create the doctrine_migration_versions table, as I suspected that maybe the issue had something to do with that. But with no luck. Reproducible with the following commands:

  • GRANT ALL PRIVILEGES ON SCHEMA application TO all privileges on schema application to app_user
  • php bin/console doctrine:migrations:migrate
  • REVOKE ALL PRIVILEGES ON SCHEMA application FROM app_user;
  • php bin/console doctrine:migrations:migrate

How to reproduce

  • Minimum working repository at https://github.com/MikelAlejoBR/doctrinebug . Just do docker-compose up and try to run php bin/console doctrine:migrations:migrate .

Otherwise, the manual steps are:

  1. Create a new empty Postgres database with version 13.1
  2. Create a pair of users in that database, one with only USAGE privileges with the following script:
  1. Create a new Symfony installation with symfony new —full mybugtest
  2. Configure the connections in config/packages/doctrine.yaml :
  1. Configure the URLs in the .env file:
  1. Set the manager connection in config/packages/doctrine_migrations.yaml :
  1. Try to php bin/console doctrine:migrations:migrate

Expected behavior

The doctrine_migration_versions table is created, and the corresponding migrations run with the specified connection in the doctrine_migrations.yml file.

The text was updated successfully, but these errors were encountered:

Источник

42501: НЕДОСТАТОЧНАЯ ОШИБКА ПРИВИЛЕГИИ при запросе в Postgresql

Я пытаюсь запросить таблицу базы данных в postgresql, но каждый раз, когда я запускаю приведенный ниже запрос, он выдает ошибку INSUFFICIENT PRIVILEGE. Что, возможно, может быть причиной такой ошибки отказа в разрешении. Кроме того, я использую инструмент pgadmin в Windows для подключения базы данных, которая находится в среде Linux. Ниже приведен запрос, который я запускаю

При выполнении того же запроса я получаю следующую ошибку

Пользователю, выполняющему запрос, потребуются разрешения на доступ к этой таблице. Вы можете предоставить их этому пользователю с помощью инструкции GRANT. Ниже приведен пример, который предоставляет PUBLIC

Также я видел, как SELinux вызывает проблемы, и такие места, как здесь, упоминают об этом. Я не совсем уверен в команде для отключения SELinux, но вы можете увидеть, работает ли она, используя

Это просто означает, что у вас нет разрешения на доступ к таблице приложений. Попросите своего корневого администратора или администратора базы данных предоставить вам разрешение на доступ к таблице приложений. если вы являетесь пользователем root или имеете привилегию предоставления, вы можете использовать команду предоставления, чтобы предоставить себе разрешение на использование всех операторов sql в таблице или базе данных
. Например:

перед этим вы должны войти в систему как пользователь root или пользователь, у которого есть права на предоставление прав.
Для получения более подробной информации об этой команде обратитесь к http://www.postgresql.org/docs/8.1/static/sql-grant.html

Если это DB2, перейдите в командную консоль DB2, выберите соответствующую базу данных и выберите параметр «Власти», щелкнув правой кнопкой мыши базу данных, затем добавьте соответствующего пользователя DB2 и предоставьте требуемый доступ.

Вы должны убедиться, что пользователь, с которым вы подключаетесь, также имеет доступ «ИСПОЛЬЗОВАНИЕ» к схеме, к которой вы пытаетесь получить доступ с пользователем. Недавно я столкнулся с ошибкой, когда я восстановил дамп в базу данных, а затем у некоторых пользователей я должен был предоставить доступ только для чтения. Я выполнил следующие шаги —

После выполнения этих действий, когда я пытался получить доступ к таблице, я получил следующую ошибку —

В моем случае мои пользователи уже были доступны, а схемы и база данных были недавно восстановлены. После того, как я предоставил пользователю доступ «USAGE» к схеме, ошибка была устранена.

Источник

There are a lot of PostgreSQL errors out there.
Way too much, right?

You as a sysadmin know that for sure – Syntax Errors, Relation Errors, Server Connection Errors, and other Error Codes.

Here you’ll find a list of the most common PostgreSQL errors and proven quick fix solutions:

And you’ll find the solution to get rid of ALL PostgreSQL errors – forever: Test PRTG as your new monitoring tool and get started within minutes!

1. PostgreSQL error

“Error: syntax error at or near ‘grant’”

Quick fix

The error message “syntax error at or near ‘grant’” is one of the most common PostgreSQL database errors. However, it can easily be identified and resolved.

To understand this issue, you need to know that SQL distinguishes between reserved and non-reserved key word tokens. Reserved key words, such as “grant”, are never allowed as identifiers. Most reserved tokens are not allowed as column or table names, but may be allowed as an “AS” column label name.

If you come across this error message, check your code and make sure that the reserved keyword, for example “grant”, is quoted. Without using quotes, the error message will pop up in the PostgreSQL database.

Proper fix

Switch to PRTG: Professional database monitor PRTG is an all-in-one database monitoring tool to monitor your PostgreSQL database, avoid downtimes, and optimize performance.

Find out how PRTG’s Database Monitoring can help you get rid of PostgreSQL errors: www.paessler.com/database-monitoring and www.paessler.com/postgresql-monitoring

2. PostgreSQL error

“Error 42501” or “Permission Denied”

Quick fix

PostgreSQL error 42501 is a common error that sometimes occurs in response to a PostgreSQL database query. In most cases, error code 42501 implies that the user has insufficient privilege for the database. As soon as a user with insufficient privileges make a query, PostgreSQL responds with the error message.

To fix the problem, check the database user privileges. If the user who attempted the query lacks permission, simply change the privileges accordingly. You can give privileges for a table either to the public using “GRANT SELECT ON table_name TO PUBLIC;” or to only a few users using the command “GRANT SELECT ON table_name to user_name;”.

Proper fix

Switch to PRTG: Professional database monitor PRTG is an all-in-one database monitoring tool to monitor your PostgreSQL database, avoid downtimes, and optimize performance.

Find out how PRTG’s Database Monitoring can help you get rid of PostgreSQL errors: www.paessler.com/database-monitoring and www.paessler.com/postgresql-monitoring

3. PostgreSQL error

“Error 1053” or “The service did not respond to the start or control request in a timely fashion”

Quick fix

Are you facing error code 1053 while working with the PostgreSQL database? Then you have come across a common PostgreSQL error. The error code is usually accompanied by the message “the service did not respond to the start or control request in a timely fashion”.

There are several possible causes for error 1053, such as low timeout values, firewall restrictions, corrupted files and permission of files. The solution for PostgreSQL error 1052 depends on the individual cause:

  1. If caused by a low timeout value, get rid of error code 1053 by setting a ServicesPipeTimeout DWORD value in the registry editor to override the default timeout time of your database.
  2. If your firewall prevents your PostgreSQL database from working correctly, disable your firewall or change the settings to allow all database requests to run smoothly.
  3. If corrupted files or permission of files are the cause of this error to occur, use the file checking tools to check the system file structure and replace corrupted files to eliminate of error 1053.

Proper fix

Switch to PRTG: Professional database monitor PRTG is an all-in-one database monitoring tool to monitor your PostgreSQL database, avoid downtimes, and optimize performance.

Источник

42501: НЕДОСТАТОЧНАЯ ОШИБКА ПРИВИЛЕГИИ во время запроса в Postgresql

Я пытаюсь запросить таблицу базы данных в postgresql, но каждый раз, когда я запускаю приведенный ниже запрос, он выдает мне сообщение INSUFFICIENT PRIVILEGE. В чем, возможно, может быть причина такого разрешения, отказано в ошибке. Также я использую инструмент pgadmin в Windows для подключения к базе данных, которая находится в среде Linux. Ниже приведен запрос, который я выполняю

При выполнении того же запроса я получаю сообщение об ошибке ниже

3 ответа

Пользователю, выполняющему запрос, потребуются разрешения на эту таблицу. Вы можете предоставить их этому пользователю с помощью инструкции GRANT. Ниже приведен пример, который предоставляет PUBLIC

Также я видел, как SELinux вызывает иссы и такие места, как здесь, об этом упоминают. Я не совсем уверен, что команда отключит SELinux, но вы можете увидеть, работает ли он, используя

Это просто означает, что у вас нет прав доступа к таблице приложения. Запросите у администратора root или базы данных разрешение на доступ к таблице приложений. если вы являетесь пользователем root или у вас есть привилегия предоставления, вы можете использовать команду grant, чтобы предоставить себе разрешение на использование всех операторов SQL в таблице или базе данных.
Например:

перед этим вы должны войти в систему как пользователь root или пользователь, который имеет привилегии
Для получения более подробной информации об этой команде см. http://www.postgresql.org/docs/8.1/static/sql-grant.html

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

Вам необходимо убедиться, что пользователь, с которым вы подключаетесь, также имеет доступ «USAGE» к схеме, к которой вы пытаетесь получить доступ с пользователем. Недавно я столкнулся с ошибкой, когда я восстановил дамп в базе данных, а затем у меня было несколько пользователей, которым я должен был предоставить доступ только для чтения. Я выполнил следующие шаги —

После выполнения этих шагов, когда я попытался получить доступ к таблице, получил следующую ошибку:

В моем случае мои пользователи уже были доступны, а схемы и база данных были недавно восстановлены. После того как я предоставил пользователю доступ к схеме «ИСПОЛЬЗОВАНИЕ», ошибка была устранена.

Источник

Ever needed to create a bunch of tables for a newly created user to access in PostgreSQL and see the following error message pop up, ‘permission denied for relation some_table_name’? You are in luck, in this tutorial, I am going to guide you guys through it to make the error message goes away.

Let me give you guys an example on how this error message might occur (at least this is how I found out),

Check out this following sql file,

  CREATE DATABASE "database";
  CREATE USER someuser WITH PASSWORD 'securepassword';
  GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO someuser;
  CREATE TABLE "some_table_name"(
    "id" int NOT NULL,
    "data" text NOT NULL
  );
  INSERT INTO "some_table_name" values(0, "some text");

source code hosted on GitHub

As one can imagine, when you login as ‘someuser’ and try to access the table with the SELECT query, you will likely see the error message pop up. This is because you granted all privileges to the someuser on all tables but no table has been created yet which means that the query has no effect at all. To fix this, you can simply move that GRANT ALL.. query all the way down to the bottom (the point where you created all the necessary table for your database). It should look something similar to the following.

Your someuser should now have access to the table,

  CREATE DATABASE "database";
  CREATE USER someuser WITH PASSWORD 'securepassword';
  CREATE TABLE "some_table_name"(
    "id" int NOT NULL,
    "data" text NOT NULL
  );
  INSERT INTO "some_table_name" values(0, "some text");
  GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO someuser;

source code hosted on GitHub

As a result, the order is very important. Just remember to do that next time haha!

Tada. This is a fairly short tutorial. Hope that solve your problem. Let me know if it didn’t. I will be happy to help as always.

Wrapping Up

Hopefully you enjoyed this short tutorial. Let me know if this helps you. Thank you for reading!

Resources

I’ll try to keep this list current and up to date. If you know of a great resource you’d like to share or notice a broken link, please let us know.

Getting started

  • permission denied for relation.

PoAn (Baron) Chen

Author

PoAn (Baron) Chen

Software Engineer at Microsoft. Graduated from @uvic. Previously worked at @illumina, @ACDSee, @AEHelp and @AcePersonnel1. My words are my own.

A last-minute website error is always frustrating.

PostgreSQL database queries often end up in errors with code 42501.

This PostgreSQL error 42501 usually occurs when an underprivileged user queries a database. This can be tricky to troubleshoot.

That’s why we often get requests to fix PostgreSQL errors as a part of our Server Management Services.

Today, let’s have a look into the error 42501 and see how our Support Engineers fix it for our customers.

When does PostgreSQL error 42501 occur?

Before moving on to the error 42501, let’s first see more about PostgreSQL.

PostgreSQL is one of the versatile database management systems. It comes handy for developers to build applications, server administrators to protect data and so on. In other words, PostgreSQL is a highly extensible database system.

The error code 42501 denotes insufficient privilege for the database user. But, there can be many reasons that lead to this error.

1. Insufficient privilege for the user

Usually, the 42501 error occurs when a PostgreSQL user with insufficient privileges makes a query on a database.

This indicates that the database user executed an operation, for which the user has no rights.

For database management, the user needs enough rights over the database.

When one of our customers was trying to query a database table in a PostgreSQL tool like pgAdmin, it ended up in error 42501.

The error message was

PostgreSQL error 42501 after database query by a user with insufficient privilege.

By default, in the PostgreSQL database, the user restoring the database will have the database ownership. For instance, when restoring a database as the root user, all objects will be under root ownership. And if another user is running any query on this database, it shows the 42501 error.

2. SELinux setting

Sometimes, the SELinux setting in the server can also cause an insufficient privilege error.

SELinux is a security architecture that is a part of Linux kernel. In SELinux, access and transition rights of a user, application, process, and file are all defined. Thus, if SELinux is enabled it affects the user privileges then the database query can end up in a 42501 error.

Fix for 42501 permission denied error

When our customers approach us with this error, our Support Team first checks the reasons that cause this error. The major reasons are insufficient user privilege and SELinux settings.

Now, let’s see how our Support Team fixes this error.

1.Granting Privilege to a user

First and foremost, when a customer approaches us with a 42501 error, we check the database user privileges already given.

If the user lacks enough permission, then we change it accordingly.

Mostly, the user does not have privileges over the requested tables.

In this case, we give privileges to the user over the requested tables using the command.

GRANT SELECT ON table_name TO PUBLIC;

This command gives all privileges over the table to the public, hence anyone can use it.

But, some customers prefer giving privileges only to a few users.

In this case, to give table access only to certain users, we use the command.

GRANT SELECT ON table_name TO user_name;

After giving privileges to the user, our Support Team executes the query once again. This ensures that the error is fixed.

Similarly, if the root user restored the dump file, this can cause insufficient privilege for the database user.

That is, if the root user restores the database using pg_dump --no-owner then the root user who restored the database will have all privileges.

So, we always restore the database using the login of the desired user. Then, this user will have all privileges over the database.

2. Disabling SELinux

In some cases, the user has enough privilege over the database and still the database query show 42501 error. Here, the SELinux can be the reason causing the error.

After considering other security settings, our Support Team disables this feature using the command.

selinuxenabled && echo enabled || echo disabled

[Still having trouble in fixing PostgreSQL errors? – We will fix it for you.]

Conclusion

In short, the PostgreSQL error 42501 occurs mainly due to insufficient privileges for database user for running query. We saw how our Support Engineers fixed this error for our customers.

PREVENT YOUR SERVER FROM CRASHING!

Never again lose customers to poor server speed! Let us help you.

Our server experts will monitor & maintain your server 24/7 so that it remains lightning fast and secure.

GET STARTED

var google_conversion_label = «owonCMyG5nEQ0aD71QM»;

Я пытаюсь решить эту проблему с помощью облачного SQL-компонента Google Cloud Platform. Мой технический стек состоит из размещения моего приложения в развертывании Google Kubernetes Engine (GKE) с использованием прокси-сервера Cloud SQL для подключения к базе данных в модулях. Бэкэнд — это проект Symfony.

Я следую за этими шагами, чтобы создать и заполнить базу данных (без успеха):

  1. Создание экземпляра Cloud SQL Postgres
  2. Добавьте прокси в контейнер k8s для подключения к экземпляру Cloud SQL со всеми учетными данными, как описано в Документация GCP
  3. Введите мой Symfony (phpfpm) стручок и запустить команду php bin/console doctrine:schema:update --force обновить схему. Запросы выполняются в базе данных, поэтому создается схема и так далее.
  4. Я пытаюсь открыть базу данных из подключения консоли SQL в GCP с postgres пользователь и попробуйте выполнить простое select * from foo; запрос. Ответ Insufficient privilege: 7 ERROR: permission denied for relation

Как я могу запросить данные в базе данных с postgres пользователь?

РЕДАКТИРОВАТЬ :

У меня такая ситуация с пользователями:

     Role name     |                         Attributes                         |           Member of
-------------------+------------------------------------------------------------+-------------------------------
acando14          | Create role, Create DB                                     | {cloudsqlsuperuser,proxyuser}
cloudsqladmin     | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
cloudsqlagent     | Create role, Create DB                                     | {cloudsqlsuperuser}
cloudsqlreplica   | Replication                                                | {}
cloudsqlsuperuser | Create role, Create DB                                     | {}
postgres          | Create role, Create DB                                     | {cloudsqlsuperuser,acando14}
proxyuser         | Create role, Create DB                                     | {cloudsqlsuperuser}

И у меня такая ситуация в таблицах:

              List of relations
Schema |      Name       | Type  |  Owner
--------+-----------------+-------+----------
public | article         | table | acando14

Если я использую postgres пользователь вошел в мою базу данных symfony работает :

symfony => select * from article;
id | model_id | code | size
----+----------+------+------
(0 rows)

Но если я использую сервер для выполнения кода, ответ будет таким:

SQLSTATE [42501]: недостаточно прав: 7 ОШИБКА: отказано в разрешении
для сотрудника по связям с PDOException (код: 42501): SQLSTATE [42501]:
Недостаточно прав: 7 ОШИБКА: в разрешении отказано для связи .. в

И еще одна проблема заключается в том, что я не сгенерировал все таблицы с помощью команды, но мне нужно сгенерировать ее, выполняя все запросы, что странно …

Спасибо! С уважением

1

Решение

По умолчанию postgres пользователь в облачном SQL (GCP) Google Cloud Platform (PostgreSQL) не является суперпользователем экземпляра (Ссылка на документы GCP):

Когда вы создаете новый экземпляр Cloud SQL для PostgreSQL … postgres пользователь является частью cloudsqlsuperuser роль и имеет следующие атрибуты (привилегии): CREATEROLE, CREATEDB, а также LOGIN, Не имеет SUPERUSER или же REPLICATION атрибутов.

Атрибут superuser дает пользователю возможность обойти все проверки разрешений и, соответственно, он может перейти в любое место в экземпляре базы данных для чтения данных из любой базы данных (Ссылка на документацию PostgreSQL):

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

В типичном развертывании PostgreSQL вне GCP postgres пользователь действительно суперпользователь. Это отклонение в облачном SQL нарушает обычное соглашение, ожидаемое от Postgres, что postgres пользователь всегда может получить доступ и изменить любой объект в кластере в силу этих прав суперпользователя.

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

Я предполагаю, что вы используете отдельного выделенного пользователя для своего развертывания k8s для подключения к базе данных, а не postgres пользователь. По умолчанию роль этого пользователя будет принадлежать объектам, созданным операцией заполнения схемы. В соответствии с GRANT документация, этот владелец по умолчанию будет иметь полный набор привилегий для объекта:

Если столбец «Права доступа» для данного объекта пуст, это означает, что объект имеет привилегии по умолчанию (т. Е. Его столбец привилегий равен нулю). Привилегии по умолчанию всегда включают все привилегии для владельца …


  • (Рекомендуется) Создать отдельную роль, которая может быть разделена между postgres пользователь и любые другие пользователи, с которыми вы входите в базу данных, чтобы заполнить ее схему.

    Сконфигурируйте операцию, которая заполняет объекты базы данных в операции создания схемы, чтобы установить ее роль до создания объектов для этой общей роли, чтобы все пользователи имели возможность доступа, управления и просмотра этих объектов. По умолчанию новые роли имеют INHERIT набор атрибутов, который означает, что попытки доступа к объектам, созданным ролью, будут успешными для членов роли в будущем.

    Например, вы можете использовать cloudsqlsuperuser роль для этой цели, из которой все пользователи созданы в консоли и postgres встроенные автоматически участники. Однако я бы порекомендовал создать пользовательскую роль для этой цели:

    CREATE ROLE symfonyapp;
    GRANT symfonyapp TO postgres;
    GRANT symfonyapp TO <your_k8s_application_user>;
    

    Позже, при создании объектов базы данных, убедитесь, что вы принимаете symfonyapp роль, прежде чем сделать это. В консоли запустите:

    SET ROLE symfonyapp;
    

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

  • Создайте роль, как указано выше, и назначьте ее postgres пользователь. Кроме того, дать роль LOGIN атрибут и установить пароль, который позволяет вам войти в экземпляр базы данных, используя имя роли и пароль напрямую. В этом случае postgres пользователь наследует привилегии роли (например, принадлежащие ему объекты), а возможность входа в систему напрямую устраняет необходимость вызова SET ROLE при первом подключении

  • Для объектов, уже созданных, вы можете настроить их владельца в соответствии с пользовательской ролью, используя команду ALTER <TYPE> <name> OWNER TO symfonyapp; например:

    ALTER TABLE mytable OWNER TO symfonyapp;
    

Невозможно напрямую предоставить SUPERUSER атрибут роли к postgres пользователь, так как у вас нет доступа к пользователю с SUPERUSER привилегии для этого! (Только суперпользователи могут делать других пользователей суперпользователями.) Google Cloud SQL для Postgres документация отмечает конкретное исключение поддержки любых функций, которые требуют привилегий суперпользователя, поэтому этот маршрут вам недоступен. Единственным суперпользователем является cloudsqladmin пользователь, созданный по умолчанию и используемый Google для выполнения административных операций на уровне экземпляра от вашего имени; вы мог сбросьте пароль и войдите как эта учетная запись, чтобы предоставить привилегии суперпользователя, но я не рекомендую делать это, поскольку это может нарушить другие управляемые функции.


Набор ролей по умолчанию во вновь созданном кластере базы данных выглядит следующим образом:

                                        List of roles
Role name     |                         Attributes                         |      Member of
-------------------+------------------------------------------------------------+---------------------
cloudsqladmin     | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
cloudsqlagent     | Create role, Create DB                                     | {cloudsqlsuperuser}
cloudsqlreplica   | Replication                                                | {}
cloudsqlsuperuser | Create role, Create DB                                     | {}
postgres          | Create role, Create DB                                     | {cloudsqlsuperuser}

Кроме того, новым базам данных, созданным с помощью вкладки «Базы данных» в облачной консоли, по умолчанию назначается право собственности на cloudsqlsuperuser роль. (Как показано в приведенном выше списке ролей, cloudsqlsuperuser Роль наследуется postgres пользователь.)

                                  List of databases
Name  |       Owner       | Encoding |  Collate   |   Ctype    | Access privileges
--------+-------------------+----------+------------+------------+-------------------
testdb | cloudsqlsuperuser | UTF8     | en_US.UTF8 | en_US.UTF8 |

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

testdb=> CREATE TABLE sometable (id SERIAL NOT NULL);
CREATE TABLE
testdb=> dt sometable
List of relations
Schema |   Name    | Type  |  Owner
--------+-----------+-------+----------
public | sometable | table | testuser

Если мы позвоним SET ROLE cloudsqlsuperuser перед созданием нашей таблицы владелец по умолчанию будет cloudsqlsuperuser роль, которая позволит postgres и другим членам роли разрешения по умолчанию, назначенные роли по умолчанию:

Вы также можете использовать триггеры и другие подходы к установить роль автоматически на создание таблицы.

testdb=> SET ROLE cloudsqlsuperuser;
SET
testdb=> CREATE TABLE anothertable (id SERIAL NOT NULL);
CREATE TABLE
testdb=> dt anothertable;
List of relations
Schema |     Name     | Type  |       Owner
--------+--------------+-------+-------------------
public | anothertable | table | cloudsqlsuperuser
(1 row)

Для производственного использования, как отмечено в разделе «Альтернативы», я рекомендую использовать выделенную роль, а не встроенную cloudsqlsuperuser роль.

4

Другие решения

Других решений пока нет …

Понравилась статья? Поделить с друзьями:
  • Insufficient memory ошибка принтера
  • Insufficient memory available to run setup error 111
  • Insufficient funds for gas price value ошибка
  • Insufficient disk space ошибка
  • Installwsus mwus installation failed error 0x80070643 fatal error during installation