Postgres 中的权限被拒绝

Asl*_*986 34 postgresql permissions

我将用户添加myuser到 Postgres。

然后我mydatabase在 pgAdmin III GUI 中添加了数据库并从备份文件中恢复。所以拥有者mydatabase是超级用户postgres

然后我试图给所有的访问权和修改mydatabasemyuser。我psql以用户身份登录postgres

psql -d template1 -U postgres  
Run Code Online (Sandbox Code Playgroud)

然后我运行了这个查询:

GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser
Run Code Online (Sandbox Code Playgroud)

现在我可以myuser用来记录,但如果我尝试一个简单的查询,我会得到这个错误:

ERROR:  permission denied for relation table_name
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?你能帮我解决吗?

Gor*_*son 42

您已授予CREATECONNECTTEMPORARY数据库的权限,myuser但尚未授予SELECTINSERT表权限。你需要这样的东西:

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO myuser;
Run Code Online (Sandbox Code Playgroud)

此外如果您有从序列中绘制的任何序列列或其他列默认值,则您需要对序列的权限。通常,USAGE特权足以使INSERT操作正常工作,但是由于您要求"give all rights"

GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO myuser;
Run Code Online (Sandbox Code Playgroud)

GRANT手册中有详细说明。


Erw*_*ter 12

已经存在的对象使用@Gord 提供的命令。

您可能也想授予DEFAULT PRIVILEGES。因此,您的用户myuser也可以自动访问未来的对象。

可以按模式完成:

ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO myuser;
Run Code Online (Sandbox Code Playgroud)

如果省略架构,则它适用于整个数据库:

ALTER DEFAULT PRIVILEGES GRANT ALL ON TABLES TO myuser;
Run Code Online (Sandbox Code Playgroud)

仅适用于指定角色创建的对象(默认为执行此命令的角色):

ALTER DEFAULT PRIVILEGES FOR ROLE administrator GRANT IN SCHEMA public ... ;
Run Code Online (Sandbox Code Playgroud)

自 PostgreSQL 9.0 起可用。如果你有的话,
不要忘记额外的GRANT特权SEQUENCES。(例如作为串行列中默认值的来源。)


归档时间:

查看次数:

138042 次

最近记录:

8 年,6 月 前