What is the grant
option/trick I need to give to the current user («userA«) to allow him to change a object’s owner which belongs by another user («userC«)?
More precisely, the contact table is owned by the userC and when I perform the following query for changing the owner to the userB, connected with the userA:
alter table contact owner to userB;
I get this error:
ERROR: must be owner of relation contact
But userA has all needed rights to do that normally (the «create on schema» grant option should be enough):
grant select,insert,update,delete on all tables in schema public to userA;
grant select,usage,update on all sequences in schema public to userA;
grant execute on all functions in schema public to userA;
grant references, trigger on all tables in schema public to userA;
grant create on schema public to userA;
grant usage on schema public to userA;
Command line output:
root@server:~# psql -U userA myDatabase
myDataBase=>dt contact
List of relations
Schema | Name | Type | Owner
-------+---------+----------+---------
public | contact | table | userC
(1 row)
myDataBase=>
myDataBase=>alter table contact owner to userB;
ERROR: must be owner of relation public.contact
myDataBase=>
Пытаюсь удалить только что созданный тригер и процедуру в Postgresql и выдает такую ошибку.
Пробовал следовать манам и сделать текущего пользователя владельцем базы, с которой работаю. Хотя он и так, вроде, был владельцем. тут написано как. Так же питался дать все права как сказано тут
SQL для удаления выглядит так:
DROP TRIGGER IF EXISTS update_params ON XXX CASCADE;
Помогите разобраться, в чем может быть дело?
Что такое grant
параметр/трюк, который мне нужно предоставить текущему пользователю ( «userA» ), чтобы он мог изменить владельца объекта, принадлежащего другому пользователю ( «userC» )?
Точнее, таблица контактов принадлежит пользователю C, и когда я выполняю следующий запрос для изменения владельца к пользователю B, связанному с userA:
alter table contact owner to userB;
Я получаю эту ошибку:
ERROR: must be owner of relation contact
Но у пользователяA все необходимые права для этого обычно (опция предоставления «create on schema» должна быть достаточной):
grant select,insert,update,delete on all tables in schema public to userA;
grant select,usage,update on all sequences in schema public to userA;
grant execute on all functions in schema public to userA;
grant references, trigger on all tables in schema public to userA;
grant create on schema public to userA;
grant usage on schema public to userA;
Thks
Выход командной строки:
[email protected]:~# psql -U userA myDatabase
myDataBase=>dt contact
List of relations
Schema | Name | Type | Owner
-------+---------+----------+---------
public | contact | table | userC
(1 row)
myDataBase=>
myDataBase=>alter table contact owner to userB;
ERROR: must be owner of relation public.contact
myDataBase=>
Ответ 1
Благодаря комментарию Майка, я перечитал документ, и я понял, что мой текущий пользователь (ака. userA, который уже имеет привилегию создания) не был прямым/косвенным членом новой собственной роли…
Итак, решение было довольно простым, я только что сделал этот грант:
grant userB to userA;
Что все люди; -)
Update:
Другое требование состоит в том, что объект должен принадлежать пользователю userA перед его изменением…
Ответ 2
Из прекрасного руководства.
Вы должны владеть таблицей, чтобы использовать ALTER TABLE.
Или быть суперпользователем базы данных.
ОШИБКА: должен быть владельцем отношения
Сообщения об ошибках PostgreSQL обычно находятся на месте. Это одно место.
Какую опцию / трюк grant
мне нужно дать текущему пользователю (« userA «), чтобы он мог изменить владельца объекта, принадлежащего другому пользователю (« userC «)?
Точнее, таблица contact принадлежит userC , и когда я выполняю следующий запрос для смены владельца на userB , связанный с userA :
alter table contact owner to userB;
Я получаю такую ошибку:
ERROR: must be owner of relation contact
Но userA имеет все необходимые права, чтобы делать это в обычном режиме (параметра предоставления « create on schema » должно быть достаточно):
grant select,insert,update,delete on all tables in schema public to userA;
grant select,usage,update on all sequences in schema public to userA;
grant execute on all functions in schema public to userA;
grant references, trigger on all tables in schema public to userA;
grant create on schema public to userA;
grant usage on schema public to userA;
Спасибо
Вывод командной строки:
root@server:~# psql -U userA myDatabase
myDataBase=>dt contact
List of relations
Schema | Name | Type | Owner
-------+---------+----------+---------
public | contact | table | userC
(1 row)
myDataBase=>
myDataBase=>alter table contact owner to userB;
ERROR: must be owner of relation public.contact
myDataBase=>
3 ответа
Лучший ответ
Благодаря комментарию Майка я перечитал документ и понял, что мой текущий пользователь (т.е. userA, у которого уже есть привилегия create ) не был прямым / косвенным членом новой роли владельца …
Итак, решение было довольно простым — я только что выполнил грант:
grant userB to userA;
Это все, ребята
Обновить:
Другое требование состоит в том, что объект должен принадлежать пользователю userA до его изменения …
107
Marcus Campbell
15 Мар 2019 в 19:03
Это решило мою проблему: пример оператора alter table для смены владельца.
ALTER TABLE databasechangelog OWNER TO arwin_ash;
ALTER TABLE databasechangeloglock OWNER TO arwin_ash;
9
Vivek
18 Янв 2020 в 20:40
Из прекрасного руководства.
Вы должны владеть таблицей, чтобы использовать ALTER TABLE.
Или станьте суперпользователем базы данных.
ОШИБКА: должно быть владельцем контакта
Сообщения об ошибках PostgreSQL обычно появляются точно. Это место на высоте.
16
Mike Sherrill ‘Cat Recall’
18 Фев 2015 в 13:44
Что такое grant
параметр/трюк, который мне нужно предоставить текущему пользователю ( «userA» ), чтобы он мог изменить владельца объекта, принадлежащего другому пользователю ( «userC» )?
Точнее, таблица контактов принадлежит пользователю C, и когда я выполняю следующий запрос для изменения владельца к пользователю B, связанному с userA:
alter table contact owner to userB;
Я получаю эту ошибку:
ERROR: must be owner of relation contact
Но у пользователяA все необходимые права для этого обычно (опция предоставления «create on schema» должна быть достаточной):
grant select,insert,update,delete on all tables in schema public to userA;
grant select,usage,update on all sequences in schema public to userA;
grant execute on all functions in schema public to userA;
grant references, trigger on all tables in schema public to userA;
grant create on schema public to userA;
grant usage on schema public to userA;
Thks
Выход командной строки:
[email protected]:~# psql -U userA myDatabase
myDataBase=>dt contact
List of relations
Schema | Name | Type | Owner
-------+---------+----------+---------
public | contact | table | userC
(1 row)
myDataBase=>
myDataBase=>alter table contact owner to userB;
ERROR: must be owner of relation public.contact
myDataBase=>
Ответ 1
Благодаря комментарию Майка, я перечитал документ, и я понял, что мой текущий пользователь (ака. userA, который уже имеет привилегию создания) не был прямым/косвенным членом новой собственной роли…
Итак, решение было довольно простым, я только что сделал этот грант:
grant userB to userA;
Что все люди; -)
Update:
Другое требование состоит в том, что объект должен принадлежать пользователю userA перед его изменением…
Ответ 2
Из прекрасного руководства.
Вы должны владеть таблицей, чтобы использовать ALTER TABLE.
Или быть суперпользователем базы данных.
ОШИБКА: должен быть владельцем отношения
Сообщения об ошибках PostgreSQL обычно находятся на месте. Это одно место.
What is the grant
option/trick I need to give to the current user («userA«) to allow him to change a object’s owner which belongs by another user («userC«)?
More precisely, the contact table is owned by the userC and when I perform the following query for changing the owner to the userB, connected with the userA:
alter table contact owner to userB;
I get this error:
ERROR: must be owner of relation contact
But userA has all needed rights to do that normally (the «create on schema» grant option should be enough):
grant select,insert,update,delete on all tables in schema public to userA;
grant select,usage,update on all sequences in schema public to userA;
grant execute on all functions in schema public to userA;
grant references, trigger on all tables in schema public to userA;
grant create on schema public to userA;
grant usage on schema public to userA;
Thks
Command line output:
root@server:~# psql -U userA myDatabase
myDataBase=>dt contact
List of relations
Schema | Name | Type | Owner
-------+---------+----------+---------
public | contact | table | userC
(1 row)
myDataBase=>
myDataBase=>alter table contact owner to userB;
ERROR: must be owner of relation public.contact
myDataBase=>
What is the grant
option/trick I need to give to the current user («userA«) to allow him to change a object’s owner which belongs by another user («userC«)?
More precisely, the contact table is owned by the userC and when I perform the following query for changing the owner to the userB, connected with the userA:
alter table contact owner to userB;
I get this error:
ERROR: must be owner of relation contact
But userA has all needed rights to do that normally (the «create on schema» grant option should be enough):
grant select,insert,update,delete on all tables in schema public to userA;
grant select,usage,update on all sequences in schema public to userA;
grant execute on all functions in schema public to userA;
grant references, trigger on all tables in schema public to userA;
grant create on schema public to userA;
grant usage on schema public to userA;
Thks
Command line output:
root@server:~# psql -U userA myDatabase
myDataBase=>dt contact
List of relations
Schema | Name | Type | Owner
-------+---------+----------+---------
public | contact | table | userC
(1 row)
myDataBase=>
myDataBase=>alter table contact owner to userB;
ERROR: must be owner of relation public.contact
myDataBase=>
I have using rails application with PostgreSql database.
My application is working fine with PostgreSql.
I want to run my migration on server, I run a command RAILS_ENV=production rake db:migrate
then I get following error:
PGError:Error: must be owner of
relation table_name
I don’t understand why this error occurs?
Please suggest any solution to resolve this error.
Thanks!
Ответ 1
Благодаря комментарию Майка, я перечитал документ, и я понял, что мой текущий пользователь (ака. userA, который уже имеет привилегию создания) не был прямым/косвенным членом новой собственной роли…
Итак, решение было довольно простым, я только что сделал этот грант:
grant userB to userA;
Что все люди; -)
Update:
Другое требование состоит в том, что объект должен принадлежать пользователю userA перед его изменением…
Ответ 2
Из прекрасного руководства.
Вы должны владеть таблицей, чтобы использовать ALTER TABLE.
Или быть суперпользователем базы данных.
ОШИБКА: должен быть владельцем отношения
Сообщения об ошибках PostgreSQL обычно находятся на месте. Это одно место.
Какую опцию / трюк grant
мне нужно дать текущему пользователю (« userA «), чтобы он мог изменить владельца объекта, принадлежащего другому пользователю (« userC «)?
Точнее, таблица contact принадлежит userC , и когда я выполняю следующий запрос для смены владельца на userB , связанный с userA :
alter table contact owner to userB;
Я получаю такую ошибку:
ERROR: must be owner of relation contact
Но userA имеет все необходимые права, чтобы делать это в обычном режиме (параметра предоставления « create on schema » должно быть достаточно):
grant select,insert,update,delete on all tables in schema public to userA;
grant select,usage,update on all sequences in schema public to userA;
grant execute on all functions in schema public to userA;
grant references, trigger on all tables in schema public to userA;
grant create on schema public to userA;
grant usage on schema public to userA;
Спасибо
Вывод командной строки:
root@server:~# psql -U userA myDatabase
myDataBase=>dt contact
List of relations
Schema | Name | Type | Owner
-------+---------+----------+---------
public | contact | table | userC
(1 row)
myDataBase=>
myDataBase=>alter table contact owner to userB;
ERROR: must be owner of relation public.contact
myDataBase=>
3 ответа
Лучший ответ
Благодаря комментарию Майка я перечитал документ и понял, что мой текущий пользователь (т.е. userA, у которого уже есть привилегия create ) не был прямым / косвенным членом новой роли владельца …
Итак, решение было довольно простым — я только что выполнил грант:
grant userB to userA;
Это все, ребята
Обновить:
Другое требование состоит в том, что объект должен принадлежать пользователю userA до его изменения …
107
Marcus Campbell
15 Мар 2019 в 19:03
Это решило мою проблему: пример оператора alter table для смены владельца.
ALTER TABLE databasechangelog OWNER TO arwin_ash;
ALTER TABLE databasechangeloglock OWNER TO arwin_ash;
9
Vivek
18 Янв 2020 в 20:40
Из прекрасного руководства.
Вы должны владеть таблицей, чтобы использовать ALTER TABLE.
Или станьте суперпользователем базы данных.
ОШИБКА: должно быть владельцем контакта
Сообщения об ошибках PostgreSQL обычно появляются точно. Это место на высоте.
16
Mike Sherrill ‘Cat Recall’
18 Фев 2015 в 13:44
Что такое grant
параметр/трюк, который мне нужно предоставить текущему пользователю ( «userA» ), чтобы он мог изменить владельца объекта, принадлежащего другому пользователю ( «userC» )?
Точнее, таблица контактов принадлежит пользователю C, и когда я выполняю следующий запрос для изменения владельца к пользователю B, связанному с userA:
alter table contact owner to userB;
Я получаю эту ошибку:
ERROR: must be owner of relation contact
Но у пользователяA все необходимые права для этого обычно (опция предоставления «create on schema» должна быть достаточной):
grant select,insert,update,delete on all tables in schema public to userA;
grant select,usage,update on all sequences in schema public to userA;
grant execute on all functions in schema public to userA;
grant references, trigger on all tables in schema public to userA;
grant create on schema public to userA;
grant usage on schema public to userA;
Thks
Выход командной строки:
[email protected]:~# psql -U userA myDatabase
myDataBase=>dt contact
List of relations
Schema | Name | Type | Owner
-------+---------+----------+---------
public | contact | table | userC
(1 row)
myDataBase=>
myDataBase=>alter table contact owner to userB;
ERROR: must be owner of relation public.contact
myDataBase=>
Ответ 1
Благодаря комментарию Майка, я перечитал документ, и я понял, что мой текущий пользователь (ака. userA, который уже имеет привилегию создания) не был прямым/косвенным членом новой собственной роли…
Итак, решение было довольно простым, я только что сделал этот грант:
grant userB to userA;
Что все люди; -)
Update:
Другое требование состоит в том, что объект должен принадлежать пользователю userA перед его изменением…
Ответ 2
Из прекрасного руководства.
Вы должны владеть таблицей, чтобы использовать ALTER TABLE.
Или быть суперпользователем базы данных.
ОШИБКА: должен быть владельцем отношения
Сообщения об ошибках PostgreSQL обычно находятся на месте. Это одно место.
What is the grant
option/trick I need to give to the current user («userA«) to allow him to change a object’s owner which belongs by another user («userC«)?
More precisely, the contact table is owned by the userC and when I perform the following query for changing the owner to the userB, connected with the userA:
alter table contact owner to userB;
I get this error:
ERROR: must be owner of relation contact
But userA has all needed rights to do that normally (the «create on schema» grant option should be enough):
grant select,insert,update,delete on all tables in schema public to userA;
grant select,usage,update on all sequences in schema public to userA;
grant execute on all functions in schema public to userA;
grant references, trigger on all tables in schema public to userA;
grant create on schema public to userA;
grant usage on schema public to userA;
Thks
Command line output:
root@server:~# psql -U userA myDatabase
myDataBase=>dt contact
List of relations
Schema | Name | Type | Owner
-------+---------+----------+---------
public | contact | table | userC
(1 row)
myDataBase=>
myDataBase=>alter table contact owner to userB;
ERROR: must be owner of relation public.contact
myDataBase=>
What is the grant
option/trick I need to give to the current user («userA«) to allow him to change a object’s owner which belongs by another user («userC«)?
More precisely, the contact table is owned by the userC and when I perform the following query for changing the owner to the userB, connected with the userA:
alter table contact owner to userB;
I get this error:
ERROR: must be owner of relation contact
But userA has all needed rights to do that normally (the «create on schema» grant option should be enough):
grant select,insert,update,delete on all tables in schema public to userA;
grant select,usage,update on all sequences in schema public to userA;
grant execute on all functions in schema public to userA;
grant references, trigger on all tables in schema public to userA;
grant create on schema public to userA;
grant usage on schema public to userA;
Thks
Command line output:
root@server:~# psql -U userA myDatabase
myDataBase=>dt contact
List of relations
Schema | Name | Type | Owner
-------+---------+----------+---------
public | contact | table | userC
(1 row)
myDataBase=>
myDataBase=>alter table contact owner to userB;
ERROR: must be owner of relation public.contact
myDataBase=>
I have using rails application with PostgreSql database.
My application is working fine with PostgreSql.
I want to run my migration on server, I run a command RAILS_ENV=production rake db:migrate
then I get following error:
PGError:Error: must be owner of
relation table_name
I don’t understand why this error occurs?
Please suggest any solution to resolve this error.
Thanks!
asked Nov 30, 2010 at 10:21
You want to change something in the table, but you don’t have the permissions to do so. Only the owner of the table can do so.
Use a different database role, the owners role, and you’re fine.
answered Nov 30, 2010 at 10:24
Frank HeikensFrank Heikens
113k24 gold badges137 silver badges132 bronze badges
2
I have using rails application with PostgreSql database.
My application is working fine with PostgreSql.
I want to run my migration on server, I run a command RAILS_ENV=production rake db:migrate
then I get following error:
PGError:Error: must be owner of
relation table_name
I don’t understand why this error occurs?
Please suggest any solution to resolve this error.
Thanks!
asked Nov 30, 2010 at 10:21
You want to change something in the table, but you don’t have the permissions to do so. Only the owner of the table can do so.
Use a different database role, the owners role, and you’re fine.
answered Nov 30, 2010 at 10:24
Frank HeikensFrank Heikens
113k24 gold badges137 silver badges132 bronze badges
2
Какой вариант / трюк grant
мне нужно дать текущему пользователю (» userA «), чтобы он мог изменить владельца объекта, принадлежащего другому пользователю (» userC «)?
Точнее, таблица контактов принадлежит пользователю C, и когда я выполняю следующий запрос для изменения владельца на пользователя B , связанного с пользователем A :
alter table contact owner to userB;
Я получаю такую ошибку:
ERROR: must be owner of relation contact
Но у пользователя userA есть все необходимые права, чтобы делать это в обычном режиме (опции предоставления » create on schema » должно быть достаточно):
grant select,insert,update,delete on all tables in schema public to userA;
grant select,usage,update on all sequences in schema public to userA;
grant execute on all functions in schema public to userA;
grant references, trigger on all tables in schema public to userA;
grant create on schema public to userA;
grant usage on schema public to userA;
Спасибо
Вывод командной строки:
[email protected]:~# psql -U userA myDatabase
myDataBase=>dt contact
List of relations
Schema | Name | Type | Owner
-------+---------+----------+---------
public | contact | table | userC
(1 row)
myDataBase=>
myDataBase=>alter table contact owner to userB;
ERROR: must be owner of relation public.contact
myDataBase=>
Что такое grant
параметр/трюк, который мне нужно предоставить текущему пользователю ( «userA» ), чтобы он мог изменить владельца объекта, принадлежащего другому пользователю ( «userC» )?
Точнее, таблица контактов принадлежит пользователю C, и когда я выполняю следующий запрос для изменения владельца к пользователю B, связанному с userA:
alter table contact owner to userB;
Я получаю эту ошибку:
ERROR: must be owner of relation contact
Но у пользователяA все необходимые права для этого обычно (опция предоставления «create on schema» должна быть достаточной):
grant select,insert,update,delete on all tables in schema public to userA;
grant select,usage,update on all sequences in schema public to userA;
grant execute on all functions in schema public to userA;
grant references, trigger on all tables in schema public to userA;
grant create on schema public to userA;
grant usage on schema public to userA;
Thks
Выход командной строки:
root@server:~# psql -U userA myDatabase
myDataBase=>dt contact
List of relations
Schema | Name | Type | Owner
-------+---------+----------+---------
public | contact | table | userC
(1 row)
myDataBase=>
myDataBase=>alter table contact owner to userB;
ERROR: must be owner of relation public.contact
myDataBase=>
Я внес некоторые изменения на сайт в локальной версии, нажал модели на сервер и сделал makemigrations
(revampenv) [email protected]:~/revamp$ python manage.py makemigrations gallery
Migrations for 'gallery':
0032_auto_20170829_0058.py:
- Create model Area
- Create model Color
- Create model ThumbnailCache
- Add field unique_key_string to image
- Alter field example on image
- Alter field timeline on image
работал отлично, тогда я попытался мигрировать, и я получаю эту ошибку
(revampenv) [email protected]:~/revamp$ python manage.py migrate
Operations to perform:
Apply all migrations: account, sessions, admin, auth, thumbnail, contenttypes, gallery
Running migrations:
Rendering model states... DONE
Applying gallery.0032_auto_20170829_0058...Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/home/sammy/revamp/revampenv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 353, in execute_from_command_line
utility.execute()
File "/home/sammy/revamp/revampenv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 345, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/sammy/revamp/revampenv/local/lib/python2.7/site-packages/django/core/management/base.py", line 348, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/sammy/revamp/revampenv/local/lib/python2.7/site-packages/django/core/management/base.py", line 399, in execute
output = self.handle(*args, **options)
File "/home/sammy/revamp/revampenv/local/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 200, in handle
executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial)
File "/home/sammy/revamp/revampenv/local/lib/python2.7/site-packages/django/db/migrations/executor.py", line 92, in migrate
self._migrate_all_forwards(plan, full_plan, fake=fake, fake_initial=fake_initial)
File "/home/sammy/revamp/revampenv/local/lib/python2.7/site-packages/django/db/migrations/executor.py", line 121, in _migrate_all_forwards
state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
File "/home/sammy/revamp/revampenv/local/lib/python2.7/site-packages/django/db/migrations/executor.py", line 198, in apply_migration
state = migration.apply(state, schema_editor)
File "/home/sammy/revamp/revampenv/local/lib/python2.7/site-packages/django/db/migrations/migration.py", line 123, in apply
operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
File "/home/sammy/revamp/revampenv/local/lib/python2.7/site-packages/django/db/migrations/operations/fields.py", line 62, in database_forwards
field,
File "/home/sammy/revamp/revampenv/local/lib/python2.7/site-packages/django/db/backends/postgresql/schema.py", line 21, in add_field
super(DatabaseSchemaEditor, self).add_field(model, field)
File "/home/sammy/revamp/revampenv/local/lib/python2.7/site-packages/django/db/backends/base/schema.py", line 396, in add_field
self.execute(sql, params)
File "/home/sammy/revamp/revampenv/local/lib/python2.7/site-packages/django/db/backends/base/schema.py", line 110, in execute
cursor.execute(sql, params)
File "/home/sammy/revamp/revampenv/local/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "/home/sammy/revamp/revampenv/local/lib/python2.7/site-packages/django/db/utils.py", line 95, in __exit__
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "/home/sammy/revamp/revampenv/local/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute
return self.cursor.execute(sql, params)
django.db.utils.ProgrammingError: must be owner of relation gallery_image
У меня была эта или аналогичная ошибка раньше, когда база данных db имела дубликат ниже для локального env, но это не так.
(примечание) это также не подходит для других моделей
(revampenv) [email protected]:~/revamp$ python manage.py makemigrations account
Migrations for 'account':
0003_userprofile_bio.py:
- Add field bio to userprofile
(revampenv) [email protected]:~/revamp$ python manage.py migrate
...
return self.cursor.execute(sql, params)
django.db.utils.ProgrammingError: must be owner of relation account_userprofile
Обновление попыталось изменить владельца базы данных
postgres=# ALTER DATABASE color_db OWNER TO revamp;
ALTER DATABASE
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'color_db',
'USER': 'revamp',
'PASSWORD': 'xxx',
'HOST': 'localhost',
'PORT': '',
}
}
но он все равно возвращает ту же ошибку
(revampenv) [email protected]:~/revamp$ python manage.py migrate
...
return self.cursor.execute(sql, params)
django.db.utils.ProgrammingError: must be owner of relation account_userprofile
Какую опцию / трюк grant
мне нужно дать текущему пользователю (« userA «), чтобы он мог изменить владельца объекта, принадлежащего другому пользователю (« userC «)?
Точнее, таблица contact принадлежит userC , и когда я выполняю следующий запрос для смены владельца на userB , связанный с userA :
alter table contact owner to userB;
Я получаю такую ошибку:
ERROR: must be owner of relation contact
Но userA имеет все необходимые права, чтобы делать это в обычном режиме (параметра предоставления « create on schema » должно быть достаточно):
grant select,insert,update,delete on all tables in schema public to userA;
grant select,usage,update on all sequences in schema public to userA;
grant execute on all functions in schema public to userA;
grant references, trigger on all tables in schema public to userA;
grant create on schema public to userA;
grant usage on schema public to userA;
Спасибо
Вывод командной строки:
root@server:~# psql -U userA myDatabase
myDataBase=>dt contact
List of relations
Schema | Name | Type | Owner
-------+---------+----------+---------
public | contact | table | userC
(1 row)
myDataBase=>
myDataBase=>alter table contact owner to userB;
ERROR: must be owner of relation public.contact
myDataBase=>
3 ответа
Лучший ответ
Благодаря комментарию Майка я перечитал документ и понял, что мой текущий пользователь (т.е. userA, у которого уже есть привилегия create ) не был прямым / косвенным членом новой роли владельца …
Итак, решение было довольно простым — я только что выполнил грант:
grant userB to userA;
Это все, ребята
Обновить:
Другое требование состоит в том, что объект должен принадлежать пользователю userA до его изменения …
107
Marcus Campbell
15 Мар 2019 в 19:03
Это решило мою проблему: пример оператора alter table для смены владельца.
ALTER TABLE databasechangelog OWNER TO arwin_ash;
ALTER TABLE databasechangeloglock OWNER TO arwin_ash;
9
Vivek
18 Янв 2020 в 20:40
Из прекрасного руководства.
Вы должны владеть таблицей, чтобы использовать ALTER TABLE.
Или станьте суперпользователем базы данных.
ОШИБКА: должно быть владельцем контакта
Сообщения об ошибках PostgreSQL обычно появляются точно. Это место на высоте.
16
Mike Sherrill ‘Cat Recall’
18 Фев 2015 в 13:44