I’m trying to view the raw data from the AACT Database in pgAdmin 4. I’m on a Mac computer. When I just try to view the first 100 rows from the ‘complete_oncology’ table, I get the below error:
ERROR: permission denied for schema public
LINE 1: SELECT * FROM public.complete_oncology
^
SQL state: 42501
Character: 15
Do I have insufficient permissions? If yes, how do I grant myself permissions to view this table? I am able to see other tables from different Schemas in the AACT database. I’ve read some users suggest granting myself permissions with something like the below, but no luck:
GRANT SELECT ON complete_oncology TO PUBLIC
This just turns up an error:
ERROR: relation "complete_oncology" does not exist
SQL state: 42P01
asked Apr 27, 2021 at 2:57
If you get a «permission denied» for public.complete_oncology
, but a «relation does not exist» for oncology
, that can only mean only one thing: you do not have USAGE
permissions on the public
schema.
Get the owner of the schema to run
GRANT USAGE ON SCHEMA public TO your_user;
Then you should be able to see the table. If you still lack permissions on the table itself, get the owner to grant you SELECT
on the table as well.
answered Apr 27, 2021 at 3:19
Laurenz AlbeLaurenz Albe
192k17 gold badges178 silver badges234 bronze badges
1
- go to preferences setting on popsql
- connections
- delete connection that you have
- add new connection
fill the form
-connection name ( up to you)
-Turn on Connection type «connect directly from my computer»
-hostname : localhost (before you can type localhost, turn on the connection type «connect directly from mycomputer»)
-port : 3306
-database name : same as you create before on cmd sql
-username : root
answered Oct 9, 2022 at 10:58
1
Логический уровень: база данных, пользователи, права.
1. создайте новый кластер PostgresSQL 13
2. зайти в кластер под postgres:
3. Создайте новую базу данных testdb и коннектимся:
CREATE DATABASE testdb;
c testdb
# Ответ: Вы подключены к базе данных "testdb" как пользователь "postgres".
5. создайте новую схему testnm
Просмотр схем:
postgres=# dn+
Список схем
Имя | Владелец | Права доступа | Описание
--------+----------+----------------------+------------------------
public | postgres | postgres=UC/postgres+| standard public schema
| | =UC/postgres |
testnm | postgres | |
Права супервользователя:
postgres=# select rolname from pg_roles where rolsuper;
rolname
----------
postgres
6. Создайте новую таблицу t1 с одной колонкой c1 типа integer
CREATE TABLE t1(c1 integer);
7. Вставьте строку со значением c1=1
INSERT INTO t1 values(1);
- Создать новую роль readonly:
Просмотр ролей:
Имя роли | Список ролей и Атрибутов | Член ролей |
---|---|---|
postgres | Суперпользователь, Создает: роли, БД, Репликация, Пропускать RLS | {} |
readonly | Вход запрещен | {} |
- Дать роли «readonly» право на подключение к базе данных testdb:
GRANT connect on DATABASE testdb TO readonly;
Ответ: Grant
10. Дать роли «readonly» право на использование схемы testnm:
grant usage on SCHEMA testnm to readonly;
11. Дать роли «readonly» право на select для всех таблиц схемы testnm:
grant SELECT on all TABLEs in SCHEMA testnm TO readonly;
12. Создать пользователя testread с паролем 12345;
# USER - это роль с правом входа:
CREATE USER evsemkin WITH PASSWORD '12345';
# ROLE - без дефолтного права на логин:
CREATE ROLE evsemkin password '12345';
CREATE ROLE evsemkin LOGIN password '12345';
DROP ROLE evsemkin;
postgres=# du
Имя роли | Атрибуты | Член ролей
----------+-------------------------------------------------------------------------+------------
dbowner | Суперпользователь | {}
evsemkin | | {}
postgres | Суперпользователь, Создаёт роли, Создаёт БД, Репликация, Пропускать RLS | {}
replica | Репликация | {}
rewind | Суперпользователь | {}
testsu | Суперпользователь
13. Права на существующие таблицы:
CREATE ROLE evsemkin password '12345';
CREATE DATABASE prod;
c prod
GRANT SELECT, INSERT, UPDATE, DELETE on ALL TABLES in SCHEMA public to evsemkin;
GRANT CONNECT on DATABASE "prod" to evsemkin;
14. Права на вновь созданные таблицы: через alter default:
c prod
ALTER default PRIVILEGES in schema public GRANT SELECT, DELETE, UPDATE, INSERT on tables to evsemkin;
ALTER DEFAULT PRIVILEGES FOR USER username IN SCHEMA schema_name GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO username;
# GRANT SELECT, INSERT, UPDATE, DELETE on database prod TO evsemkin;
GRANT ALL PRIVILEGES ON DATABASE "prod" from evsemkin;
REVOKE ALL PRIVILEGES ON DATABASE "prod" from evsemkin;
grant all privileges on prod to identified by 'mypasswd';
postgres-# l
Список баз данных
Имя | Владелец | Кодировка | LC_COLLATE | LC_CTYPE | Права доступа
-----------+----------+-----------+-------------+-------------+-----------------------
otttus | dbowner | UTF8 | ru_RU.UTF-8 | ru_RU.UTF-8 |
otus | postgres | UTF8 | ru_RU.UTF-8 | ru_RU.UTF-8 |
postgres | postgres | UTF8 | ru_RU.UTF-8 | ru_RU.UTF-8 |
priz | dbowner | UTF8 | ru_RU.UTF-8 | ru_RU.UTF-8 |
prod | postgres | UTF8 | ru_RU.UTF-8 | ru_RU.UTF-8 |
template0 | postgres | UTF8 | ru_RU.UTF-8 | ru_RU.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | ru_RU.UTF-8 | ru_RU.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
GRANT ALL PRIVILEGES ON DATABASE "prod" to evsemkin;
psql -p 5432 -d otus -h 192.168.0.16 -U postgres
psql -p 5432 -d prod -h 192.168.0.16 -U evsemkin
Права
c prod
GRANT SELECT, UPDATE, INSERT, DELETE on ALL TABLES in SCHEMA public to evsemkin;
sudo adduser testread sudo
passwd testread
vim /etc/postgresql/14/main/pg_hba.conf
host all dbowner 0.0.0.0/0 scram-sha-256
psql -U dbowner -h 192.168.0.16 -d postgres
select pg_reload_conf();
postgres=# CREATE DATABASE priz;
# Ответ: CREATE DATABASE
CREATE USER dbowner with password '12345';
CREATE USER testread with password '12345';
CREATE USER v7UserDev;
CREATE DATABASE priz2 OWNER v7UserDev;
# Права на директорию, для запуска БД:
chmod 0750 /backup/restore
Просмотр пользователей из представления:
select usename, usesuper from pg_catalog.pg_user;
usename | usesuper |
---|---|
postgres | t |
testread | f |
- Дать роль readonly пользователю testread:
ALTER USER dbowner WITH SUPERUSER;
GRANT superuser TO dbowner;
grant readonly TO testread;
- Зайди под пользователем testread в б.д. testdb;
Ответ: подключиться к серверу через UNIX сокет «/var/run/postgresql/.s.PGSQL.5432» не удалось
ALTER USER testread LOGIN;
Ответ: подключиться к серверу через UNIX сокет «/var/run/postgresql/.s.PGSQL.5432» не удалось
q
exit
sudo -u postgres psql -U testread -h 127.0.0.1 -W -d testdb
Ответ: SSL-соединение (протокол: TLSv1.3, шифр: TLS_AES_256_GCM_SHA384, бит: 256, сжатие: выкл.)
15.
select * from t1;
# Ответ: нет доступа к таблице t1
dt
Схема|Имя|Тип|Владелец|
:----|:--------|:--------|:--------:
public|t1|таблица|postgres
Дадим доступ из-под postgres:
c testdb
GRANT SELECT, UPDATE, INSERT ON t1 TO testread;
q
exit
sudo -u postgres psql -U testread -h 127.0.0.1 -W -d testdb
dt
Схема | Имя | Тип | Владелец | Права для столбцов | Политики |
---|---|---|---|---|---|
public | t1 | таблица | postgres=arwdDxt/postgres+testread=arw/postgres |
Ответ: с1 / 1 строка
- Создадим таблицу t1 заново с явным указанием имени схемы testnm
su postgres
psql
drop table t1;
CREATE TABLE testnm.t1(i int);
INSERT INTO testnm.t1 values (1), (2);
Ответ: INSERT 0 2
Ответ: ОШИБКА: отношение «testnm.t1» не существует СТРОКА 1: select * from testnm.t1;
Ответ: «$user», public
SET search_path TO testnm,public;
SHOW search_path;
Ответ: testnm, public
Схема | Имя | Тип | Владелец | Права для столбцов | Политики |
---|---|---|---|---|---|
testnm | t1 | таблица |
Ответ: i 1 2 (2 строки)
grant connect on DATABASE testdb TO testread;
grant SELECT, UPDATE, INSERT on all TABLEs in SCHEMA testnm TO testread;
q
exit
sudo -u postgres psql -U testread -h 127.0.0.1 -W -d testdb
select * from t1;
Ответ: ОШИБКА: отношение «t1» не существует
Ответ: i 1 2 (2 строки)
create table t2(c1 integer);
insert into t2 values (2);
Ответ: i 2 (1 строка)
- Как убрать эти права?
c testdb postgres;
revoke CREATE on SCHEMA public FROM public;
revoke all on DATABASE testdb FROM public;
q
exit
sudo -u postgres psql -U testread -h 127.0.0.1 -W -d testdb
create table t3(c1 integer);
ОШИБКА: нет доступа к схеме public.
Все задания выполнены.
I’m trying to view the raw data from the AACT Database in pgAdmin 4. I’m on a Mac computer. When I just try to view the first 100 rows from the ‘complete_oncology’ table, I get the below error:
ERROR: permission denied for schema public
LINE 1: SELECT * FROM public.complete_oncology
^
SQL state: 42501
Character: 15
Do I have insufficient permissions? If yes, how do I grant myself permissions to view this table? I am able to see other tables from different Schemas in the AACT database. I’ve read some users suggest granting myself permissions with something like the below, but no luck:
GRANT SELECT ON complete_oncology TO PUBLIC
This just turns up an error:
ERROR: relation "complete_oncology" does not exist
SQL state: 42P01
asked Apr 27, 2021 at 2:57
If you get a «permission denied» for public.complete_oncology
, but a «relation does not exist» for oncology
, that can only mean only one thing: you do not have USAGE
permissions on the public
schema.
Get the owner of the schema to run
GRANT USAGE ON SCHEMA public TO your_user;
Then you should be able to see the table. If you still lack permissions on the table itself, get the owner to grant you SELECT
on the table as well.
answered Apr 27, 2021 at 3:19
Laurenz AlbeLaurenz Albe
190k17 gold badges175 silver badges229 bronze badges
1
- go to preferences setting on popsql
- connections
- delete connection that you have
- add new connection
fill the form
-connection name ( up to you)
-Turn on Connection type «connect directly from my computer»
-hostname : localhost (before you can type localhost, turn on the connection type «connect directly from mycomputer»)
-port : 3306
-database name : same as you create before on cmd sql
-username : root
answered Oct 9, 2022 at 10:58
1
Логический уровень: база данных, пользователи, права.
1. создайте новый кластер PostgresSQL 13
2. зайти в кластер под postgres:
3. Создайте новую базу данных testdb и коннектимся:
CREATE DATABASE testdb;
c testdb
# Ответ: Вы подключены к базе данных "testdb" как пользователь "postgres".
5. создайте новую схему testnm
Просмотр схем:
имя | владелец |
---|---|
public | postgres |
testnm | postgres |
Права супервользователя:
postgres=# select rolname from pg_roles where rolsuper;
rolname
----------
postgres
6. Создайте новую таблицу t1 с одной колонкой c1 типа integer
CREATE TABLE t1(c1 integer);
7. Вставьте строку со значением c1=1
INSERT INTO t1 values(1);
- Создать новую роль readonly:
Просмотр ролей:
Имя роли | Список ролей и Атрибутов | Член ролей |
---|---|---|
postgres | Суперпользователь, Создает: роли, БД, Репликация, Пропускать RLS | {} |
readonly | Вход запрещен | {} |
- Дать роли «readonly» право на подключение к базе данных testdb:
grant connect on DATABASE testdb TO readonly;
Ответ: Grant
- Дать роли «readonly» право на использование схемы testnm:
grant usage on SCHEMA testnm to readonly;
11. Дать роли «readonly» право на select для всех таблиц схемы testnm:
grant SELECT on all TABLEs in SCHEMA testnm TO readonly;
12. Создать пользователя testread с паролем 12345;
sudo adduser testread sudo
passwd testread
vim /etc/postgresql/14/main/pg_hba.conf
host all dbowner 0.0.0.0/0 scram-sha-256
psql -U dbowner -h 192.168.0.16 -d postgres
select pg_reload_conf();
postgres=# CREATE DATABASE priz;
# Отвте: CREATE DATABASE
CREATE USER dbowner with password '12345';
CREATE USER testread with password '12345';
CREATE USER v7UserDev;
CREATE DATABASE priz2 OWNER v7UserDev;
# Права на директорию, для запуска БД:
chmod 0750 /backup/restore
Просмотр пользователей из представления:
select usename, usesuper from pg_catalog.pg_user;
usename | usesuper |
---|---|
postgres | t |
testread | f |
- Дать роль readonly пользователю testread:
ALTER USER dbowner WITH SUPERUSER;
GRANT superuser TO dbowner;
grant readonly TO testread;
- Зайди под пользователем testread в б.д. testdb;
Ответ: подключиться к серверу через UNIX сокет «/var/run/postgresql/.s.PGSQL.5432» не удалось
ALTER USER testread LOGIN;
Ответ: подключиться к серверу через UNIX сокет «/var/run/postgresql/.s.PGSQL.5432» не удалось
q
exit
sudo -u postgres psql -U testread -h 127.0.0.1 -W -d testdb
Ответ: SSL-соединение (протокол: TLSv1.3, шифр: TLS_AES_256_GCM_SHA384, бит: 256, сжатие: выкл.)
15.
select * from t1;
# Ответ: нет доступа к таблице t1
dt
Схема|Имя|Тип|Владелец|
:----|:--------|:--------|:--------:
public|t1|таблица|postgres
Дадим доступ из-под postgres:
c testdb
GRANT SELECT, UPDATE, INSERT ON t1 TO testread;
q
exit
sudo -u postgres psql -U testread -h 127.0.0.1 -W -d testdb
dt
Схема | Имя | Тип | Владелец | Права для столбцов | Политики |
---|---|---|---|---|---|
public | t1 | таблица | postgres=arwdDxt/postgres+testread=arw/postgres |
Ответ: с1 / 1 строка
- Создадим таблицу t1 заново с явным указанием имени схемы testnm
su postgres
psql
drop table t1;
CREATE TABLE testnm.t1(i int);
INSERT INTO testnm.t1 values (1), (2);
Ответ: INSERT 0 2
Ответ: ОШИБКА: отношение «testnm.t1» не существует СТРОКА 1: select * from testnm.t1;
Ответ: «$user», public
SET search_path TO testnm,public;
SHOW search_path;
Ответ: testnm, public
Схема | Имя | Тип | Владелец | Права для столбцов | Политики |
---|---|---|---|---|---|
testnm | t1 | таблица |
Ответ: i 1 2 (2 строки)
grant connect on DATABASE testdb TO testread;
grant SELECT, UPDATE, INSERT on all TABLEs in SCHEMA testnm TO testread;
q
exit
sudo -u postgres psql -U testread -h 127.0.0.1 -W -d testdb
select * from t1;
Ответ: ОШИБКА: отношение «t1» не существует
Ответ: i 1 2 (2 строки)
create table t2(c1 integer);
insert into t2 values (2);
Ответ: i 2 (1 строка)
- Как убрать эти права?
c testdb postgres;
revoke CREATE on SCHEMA public FROM public;
revoke all on DATABASE testdb FROM public;
q
exit
sudo -u postgres psql -U testread -h 127.0.0.1 -W -d testdb
create table t3(c1 integer);
ОШИБКА: нет доступа к схеме public.
Все задания выполнены.
This happens when not having USAGE
privilege on any of the schemas of search_path
. By default the pseudo-role public
(all users) has this privilege on the public
schema, so this error happens only after revoking it explicitly with:
revoke usage on schema public from public;
This is required when it’s not desirable that people peek into other people schemas, even without selecting data from tables (which is granted through different privileges).
If this REVOKE
hasn’t been done in that database, it may have happened in the template database by which new databases are modelled (see CREATE DATABASE
).
When a user has USAGE
privilege, but lacks CREATE
privilege on the schema, it’s a different error when trying to create an object: permission denied for schema public.
To check the privileges inside psql, use dn+ public
.
By default (shown with extended display x
for readability):
# dn+ public List of schemas -[ RECORD 1 ]-----+----------------------- Name | public Owner | postgres Access privileges | postgres=UC/postgres | =UC/postgres Description | standard public schema
lack of a rolename before =
means it’s for all roles (=public)
Without public USAGE privilege
Name | public Owner | postgres Access privileges | postgres=UC/postgres | =C/postgres Description | standard public schema
Without public USAGE or CREATE privileges
Name | public Owner | postgres Access privileges | postgres=UC/postgres Description | standard public schema
This happens when not having USAGE
privilege on any of the schemas of search_path
. By default the pseudo-role public
(all users) has this privilege on the public
schema, so this error happens only after revoking it explicitly with:
revoke usage on schema public from public;
This is required when it’s not desirable that people peek into other people schemas, even without selecting data from tables (which is granted through different privileges).
If this REVOKE
hasn’t been done in that database, it may have happened in the template database by which new databases are modelled (see CREATE DATABASE
).
When a user has USAGE
privilege, but lacks CREATE
privilege on the schema, it’s a different error when trying to create an object: permission denied for schema public.
To check the privileges inside psql, use dn+ public
.
By default (shown with extended display x
for readability):
# dn+ public List of schemas -[ RECORD 1 ]-----+----------------------- Name | public Owner | postgres Access privileges | postgres=UC/postgres | =UC/postgres Description | standard public schema
lack of a rolename before =
means it’s for all roles (=public)
Without public USAGE privilege
Name | public Owner | postgres Access privileges | postgres=UC/postgres | =C/postgres Description | standard public schema
Without public USAGE or CREATE privileges
Name | public Owner | postgres Access privileges | postgres=UC/postgres Description | standard public schema
Я запускаю Postgres 10.4 и в настоящее время сбит с толку, поскольку не могу предоставить доступ к схеме другой роли.
Что я хочу сделать:
У меня одна роль с одной схемой, и я хочу получить доступ к схеме и ее таблицам из другой роли. Итак, я сделал как обычно (что работало с другими схемами):
grant usage on schema myschema to newuser;
grant select on all tables in schema myschema to newuser;
Оба этих оператора выполнялись как владелец схемы. При этом я не столкнулся с какими-либо ошибками.
Когда я вхожу в систему как новый пользователь и пытаюсь выбрать некоторые данные:
select * from myschema.table;
Я получаю сообщение об ошибке:
SQL Error [42501]: ERROR: permission denied for schema myschema
Я вижу, что у нового пользователя есть нужные привилегии в таблице «information_schema.role_table_grants»
Он также работал с другой ролью и другой схемой. Я невежественен.
Ответы
2
Это определенно работает, как указано в моем вопросе, проблема заключалась в том, что я не использовал владельца схемы.
Поэтому всегда убедитесь, что вы предоставляете доступ к схеме от роли владельца.
Шаг 1
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA name_schema TO name_user;
Шаг 2
GRANT USAGE ON SCHEMA name_schema TO name_user;
Другие вопросы по теме
In Postgres I created the following table inside a db called testing
:
CREATE TABLE category_google_taxonomy (
category_id integer references category ON UPDATE CASCADE ON DELETE CASCADE,
google_taxonomy_id integer references google_taxonomy ON UPDATE CASCADE ON DELETE CASCADE
);
When I try to populate the table:
INSERT INTO category_google_taxonomy (category_id, google_taxonomy_id) VALUES
(1,7),
(2,12);
I get the following error:
ERROR: permission denied for schema public
LINE 1: SELECT 1 FROM ONLY "public"."category" x WHERE "category_id"...
^
QUERY: SELECT 1 FROM ONLY "public"."category" x WHERE "category_id" OPERATOR(pg_catalog.=) $1 FOR SHARE OF x
I read up a bit and eventually granted ALL PRIVILEGES
out of exasperation, but it still doesn’t work:
testing=# GRANT ALL PRIVILEGES ON public.category TO testing;
GRANT
testing=# dp category_google_taxonomy
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
--------+--------------------------+-------+-------------------------+--------------------------
public | category_google_taxonomy | table | testing=arwdDxt/testing |
: super=arwdDxt/testing
testing=# dp category
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
--------+----------+-------+------------------------+--------------------------
public | category | table | testing=arwdDxt/super | category_id:
: testing=arwx/super
(1 row)
On @Daniel’s suggestion I tried GRANT USAGE ON schema public TO super;
, now when I run the INSERT
command I get:
ERROR: permission denied for relation category
CONTEXT: SQL statement "SELECT 1 FROM ONLY "public"."category" x WHERE "category_id" OPERATOR(pg_catalog.=) $1 FOR SHARE OF x"
Here is the relevant part of d
:
public | category | table | super
public | category_google_taxonomy | table | testing
NataNov 0 / 0 / 0 Регистрация: 09.04.2021 Сообщений: 4 |
||||||||||||
1 |
||||||||||||
Создание пользователя с правами на таблицы в схеме09.04.2021, 14:54. Показов 4679. Ответов 1 Метки нет (Все метки)
Добрый день!
Затем подключаюсь к базе my_db под пользователем user1: c my_db user1 До сих пор все шло прекрасно. Но дальше пытаюсь сделать select от имени пользователя user1:
выходит ошибка — нет доступа к схеме my_schema пытаюсь по другому:
Ошибка — нет доступа к таблице my_table! Что я делаю не так?!
__________________ 0 |
grgdvo 1184 / 914 / 367 Регистрация: 02.09.2012 Сообщений: 2,785 |
||||
10.04.2021, 09:09 |
2 |
|||
Сообщение было отмечено NataNov как решение Решение Схема — такой же объект базы, как и таблицы.
1 |
Настройка:
Я подключен к автономному (база данных в файле) HSQLDB с JDBC. Соединение открывается при запуске программы и закрывается при выходе. Пользователь был создан с правами ADMIN.
Я использовал диспетчер базы данных hsqldb.jar, чтобы создать в своей базе данных таблицу под названием КОМПОНЕНТЫ. Он находится в схеме PUBLIC, и я смог добавлять и вычитать из него записи с помощью диспетчера баз данных.
Я использую следующий код, который вызывается в основном методе, чтобы доказать, что я могу правильно запрашивать свою базу данных:
public static void displayAllRows() {
String sql = "SELECT * FROM INFORMATION_SCHEMA.AUTHORIZATIONS";
try (
Statement stmt = CONN.createStatement();
ResultSet rs = stmt.executeQuery(sql);
) {
System.out.println("Authorizations Table:");
while(rs.next()) {
StringBuilder bf = new StringBuilder();
bf.append(rs.getString("AUTHORIZATION_NAME")).append(": ");
bf.append(rs.getString("AUTHORIZATION_TYPE")).append(", ");
System.out.println(bf.toString());
}
} catch (SQLException ex) {
Logger.getLogger(CompManager.class.getName()).log(Level.SEVERE, null, ex);
}
}
Выходные данные приведенного выше кода верны на основе использования оператора SELECT * FROM INFORMATION_SCHEMA.AUTHORIZATIONS
в средстве диспетчера баз данных.
Проблема:
Затем я запускаю упрощенный код ниже. Единственные изменения коснулись оператора SELECT, и я удалил все из блока try (чтобы ничто не могло случайно вызвать ошибку).
private static final Connection CONN = ConnectionManager.getInstance().getConnection();
public static void displayAllRows() {
String sql = "SELECT * FROM COMPONENTS";
try (
Statement stmt = CONN.createStatement();
ResultSet rs = stmt.executeQuery(sql);
) {
} catch (SQLException ex) {
Logger.getLogger(CompManager.class.getName()).log(Level.SEVERE, null, ex);
}
}
Это вызывает исключение: java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: COMPONENTS
.
Я также пробовал использовать PUBLIC.COMPONENTS
в заявлении. Однако, когда я копирую / вставляю этот оператор в диспетчер баз данных, он работает нормально (я вошел в систему с одним и тем же пользователем в обоих местах).
Вопрос:
Я, наверное, делаю что-то не так, учитывая, насколько я новичок в базах данных. Что я могу сделать, чтобы второй запрос был успешным?
Я искал SO и Интернет и нашел сотни сообщений об этом конкретном исключении, но оно выбрасывается в таких широких обстоятельствах, что решения не помогли.
Ответ:
Каким-то образом я случайно подключился к другой базе данных с помощью своей программы, чем с помощью диспетчера баз данных. Решение помещало весь путь к файлу в строку подключения к базе данных вместо использования относительной ссылки
Вы подключаетесь к двум разным базам данных. Вероятно, URL-адрес вашей базы данных указывает путь к файлу относительно каталогов, в которых вы запускаете DatabaseManager и ваше приложение. Используйте абсолютные пути или пути, в которых используется символ ~
для обозначения каталога user.home
.
Поскольку вы новичок в базах данных, было бы проще запустить сервер HSQLDB и подключиться к нему из вашего приложения и из DatabaseManager, используя один и тот же URL-адрес.
1
fredt
1 Май 2016 в 23:57
In Postgres I created the following table inside a db called testing
:
CREATE TABLE category_google_taxonomy (
category_id integer references category ON UPDATE CASCADE ON DELETE CASCADE,
google_taxonomy_id integer references google_taxonomy ON UPDATE CASCADE ON DELETE CASCADE
);
When I try to populate the table:
INSERT INTO category_google_taxonomy (category_id, google_taxonomy_id) VALUES
(1,7),
(2,12);
I get the following error:
ERROR: permission denied for schema public
LINE 1: SELECT 1 FROM ONLY "public"."category" x WHERE "category_id"...
^
QUERY: SELECT 1 FROM ONLY "public"."category" x WHERE "category_id" OPERATOR(pg_catalog.=) $1 FOR SHARE OF x
I read up a bit and eventually granted ALL PRIVILEGES
out of exasperation, but it still doesn’t work:
testing=# GRANT ALL PRIVILEGES ON public.category TO testing;
GRANT
testing=# dp category_google_taxonomy
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
--------+--------------------------+-------+-------------------------+--------------------------
public | category_google_taxonomy | table | testing=arwdDxt/testing |
: super=arwdDxt/testing
testing=# dp category
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
--------+----------+-------+------------------------+--------------------------
public | category | table | testing=arwdDxt/super | category_id:
: testing=arwx/super
(1 row)
On @Daniel’s suggestion I tried GRANT USAGE ON schema public TO super;
, now when I run the INSERT
command I get:
ERROR: permission denied for relation category
CONTEXT: SQL statement "SELECT 1 FROM ONLY "public"."category" x WHERE "category_id" OPERATOR(pg_catalog.=) $1 FOR SHARE OF x"
Here is the relevant part of d
:
public | category | table | super
public | category_google_taxonomy | table | testing
NataNov 0 / 0 / 0 Регистрация: 09.04.2021 Сообщений: 4 |
||||||||||||
1 |
||||||||||||
Создание пользователя с правами на таблицы в схеме09.04.2021, 14:54. Показов 4920. Ответов 1 Метки нет (Все метки)
Добрый день!
Затем подключаюсь к базе my_db под пользователем user1: c my_db user1 До сих пор все шло прекрасно. Но дальше пытаюсь сделать select от имени пользователя user1:
выходит ошибка — нет доступа к схеме my_schema пытаюсь по другому:
Ошибка — нет доступа к таблице my_table! Что я делаю не так?!
__________________
0 |
grgdvo 1187 / 917 / 367 Регистрация: 02.09.2012 Сообщений: 2,796 |
||||
10.04.2021, 09:09 |
2 |
|||
Сообщение было отмечено NataNov как решение Решение Схема — такой же объект базы, как и таблицы.
1 |