在我的 PostGres 表上授予所有权限,但在尝试插入/选择时仍然收到“权限被拒绝”错误

Posted

技术标签:

【中文标题】在我的 PostGres 表上授予所有权限,但在尝试插入/选择时仍然收到“权限被拒绝”错误【英文标题】:Granted all privileges on my PostGres table, but still am getting a "Permission denied" error when attempting to insert/select 【发布时间】:2018-03-28 03:42:39 【问题描述】:

我正在使用 PostGres 9.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 默认数据库中? 【参考方案1】:

首先你必须使用 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

【讨论】:

我在所有上述查询中的“ALL”上出现语法错误,而 ALL 在 greenplum 中。错误:“ALL”第 1 行或附近的语法错误:将 SCHEMA public 中所有表的所有权限授予 neera... ^ ********** 错误 ********** 错误:在“ALL”SQL 状态或附近出现语法错误:42601 字符:25 您实际上使用的是 mysql 或 postgres 什么数据库??因为您的命令在 postgres 中似乎对我有用,或者您可能在之前的命令中做错了什么 我正在使用 greenplum【参考方案2】:

您的第一个命令使您能够列出表格(您可以只知道存在)

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 有一个非常奇怪的机制,我花了一段时间才理解它!

【讨论】:

如果你已经这样做了,但它仍然不起作用,还有其他建议吗? 我认为你应该问一个新问题 我尝试了所有方法,但没有成功。我不得不更改表和架构的所有权。 ALTER TABLE myschema.mytable OWNER TO username;, ALTER SCHEMA myschema OWNER TO username;【参考方案3】:

看看https://dba.stackexchange.com/questions/33943/granting-access-to-all-tables-for-a-user。

我认为您的问题是数据库、模式和表的 GRANT 不同,因此您需要明确设置表的权限。

【讨论】:

不理解你。我应该以什么用户身份运行哪些语句?【参考方案4】:

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

将第一个 PSQL 命令更改为

psql -Upostgres myapp

然后发放赠款

【讨论】:

以上是关于在我的 PostGres 表上授予所有权限,但在尝试插入/选择时仍然收到“权限被拒绝”错误的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在数据库中任何模式的所有未来表上授予 SELECT 权限?

如何将视图的所有权限授予任意用户

Postgres:即使授予了授权,也拒绝架构的权限

Postgres - 向角色组中的现有用户授予权限

sh 授予Postgres用户权限

将pdf附加到电子邮件,授予权限