2017-10-16 79 views
1

我正在使用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) 

什么是授予权限的正确方法,以便我的用户可以插入和从表中选择?

+0

你有一个单独的数据库,或者所有你的表在postgres默认数据库? –

回答

0

你的第一个命令,给你以列出表的能力(你可以知道,有存在的)

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我花了一段时间去了解它!

+0

前两个拨款,它的工作。谢谢 – Dave

0

您正在授予postgres数据库而不是myapp数据库的权限。

更改第一PSQL命令

psql -Upostgres myapp 

,然后发出拨款

+0

给了一个旋风,但我仍然得到相同的错误。 – Dave