Postgresql 授予了我在PostGres表上的所有权限,但我仍然得到了一个“";“拒绝许可”;尝试插入/选择时出错

Postgresql 授予了我在PostGres表上的所有权限,但我仍然得到了一个“";“拒绝许可”;尝试插入/选择时出错,postgresql,select,permissions,insert,grant,Postgresql,Select,Permissions,Insert,Grant,我用的是Postgres9.5。我在将数据插入刚创建的表时遇到问题。尽管已将所有权限授予数据库用户,但仍出现“权限被拒绝”错误。见下文 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:

我用的是Postgres9.5。我在将数据插入刚创建的表时遇到问题。尽管已将所有权限授予数据库用户,但仍出现“权限被拒绝”错误。见下文

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)

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

您在postgres数据库而不是myapp数据库中授予权限

将第一个PSQL命令更改为

psql -Upostgres 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
那么你的例子就行了

但是,如果希望能够访问futur创建的表,您仍然需要应用一些命令:

ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, UPDATE, INSERT, DELETE, TRIGGER ON TABLES TO myapp

Postgresql有一个非常奇怪的麦加主义,我花了一段时间才理解它

首先,您必须使用postgres用户登录新数据库

psql your_db_name -U postgres -h your_host_name
提供列出表的功能

GRANT USAGE ON SCHEMA public TO your_user_name
然后必须向公共模式中的所有表授予权限

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO your_user_name
如果您有序列,请给予许可

GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO your_user_name

您是否有单独的数据库,或者所有表都在postgres默认数据库中?不理解您的意思。我希望运行什么语句,作为什么用户?如果您这样做了,但仍然不起作用,还有其他建议吗?我想您应该问一个新问题,然后我尝试了所有方法,但都不起作用。我必须更改表和模式的所有权<代码>将表myschema.mytable所有者更改为用户名
将模式myschema OWNER更改为用户名我在上述所有查询中都遇到了语法错误“ALL”和ALL in greenplum。错误:在“全部”第1行或其附近出现语法错误:将架构公共中所有表的所有权限授予neera…^**********错误*********错误:语法错误处于或接近“全部”SQL状态:42601字符:25您实际使用的是什么数据库mysql或postgres?因为您的命令在postgres中似乎对我有效,或者可能是您在以前的命令中做错了我在使用greenplum
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO your_user_name