授予我的PostGres表的所有权限,但仍尝试插入/选择时出现“权限被拒绝”错误
我正在使用PostGres 9.5。我无法将数据插入到刚刚创建的表中。尽管授予数据库用户的所有权限,但我仍然收到“权限被拒绝”错误。见下面...授予我的PostGres表的所有权限,但仍尝试插入/选择时出现“权限被拒绝”错误
localhost:myapp davea$ psql -Upostgres
Password for user postgres:
psql (9.5.0, server 9.5.1)
Type "help" for help.
postgres=# GRANT ALL ON schema public TO myapp;
GRANT
localhost:myapp davea$ psql -Upostgres
Password for user postgres:
psql (9.5.0, server 9.5.1)
Type "help" for help.
postgres=# GRANT USAGE ON schema public TO myapp;
GRANT
postgres=# \q
localhost:myapp davea$ myapp
psql (9.5.0, server 9.5.1)
Type "help" for help.
myapp=> insert into search_codes (id, code, address_id) values (1, 'atlanta', 'GA');
ERROR: permission denied for relation search_codes
myapp=> select * FROM search_codes;
ERROR: permission denied for relation search_codes
myapp=> \d search_codes;
Table "public.search_codes"
Column | Type | Modifiers
------------+-------------------+-----------------------------------------------------------
id | integer | not null default nextval('search_codes_id_seq'::regclass)
code | character varying |
address_id | character varying |
Indexes:
"search_codes_pkey" PRIMARY KEY, btree (id)
"index_search_codes_on_code" UNIQUE, btree (code)
"index_search_codes_on_address_id" btree (address_id)
什么是授予权限的正确方法,以便我的用户可以插入和从表中选择?
你的第一个命令,给你以列出表的能力(你可以知道,有存在的)
GRANT USAGE ON SCHEMA public TO myapp
然后,你必须授予SELECT,INSERT,等等......在所有的表模式公开
GRANT SELECT, UPDATE, INSERT, DELETE ON ALL TABLES IN SCHEMA public TO myapp
我推荐不给所有特权给特定的应用程序。
如果您有序列:
GRANT SELECT, UPDATE, USAGE ON ALL SEQUENCES IN SCHEMA public to myapp
如果你有功能:
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO myapp
那么你的例子会工作。
但是你还是有,如果你想未来的危机创建的表才能够访问应用一些命令:
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, UPDATE, INSERT, DELETE, TRIGGER ON TABLES TO myapp
PostgreSQL拥有非常怪异mecanism我花了一段时间去了解它!
前两个拨款,它的工作。谢谢 – Dave
您正在授予postgres数据库而不是myapp数据库的权限。
更改第一PSQL命令
psql -Upostgres myapp
,然后发出拨款
给了一个旋风,但我仍然得到相同的错误。 – Dave
看看https://dba.stackexchange.com/questions/33943/granting-access-to-all-tables-for-a-user。
我认为你的问题是GRANT对于数据库,模式和表格是不同的,所以你需要明确地在表格上设置权限。
不理解你。我想要运行哪些语句以及作为用户? – Dave
你有一个单独的数据库,或者所有你的表在postgres默认数据库? –