不授予数据库权限包括授予所有数据库表的权限?

时间:2014-06-25 13:33:42

标签: postgresql

我曾经在PostgreSQL中调用一个简单的select语句时遇到错误。错误描述告诉我们,用户无法访问关系' A'

我的架构如下所示:

CREATE TABLE A(
    id SERIAL PRIMARY KEY, 
);

CREATE TABLE B(
    id SERIAL PRIMARY KEY,
    A_Id integer REFERENCES A (id)
);

CREATE TABLE C(
    id SERIAL PRIMARY KEY, 
    A_Id integer REFERENCES A (id)
);

我试图授予执行权限:

GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;

没有帮助

GRANT ALL PRIVILEGES ON SCHEMA public TO myuser;

没有帮助

仅在执行:

之后
GRANT ALL PRIVILEGES ON TABLE A TO myuser;

错误消失了。

不授予数据库权限包括授予所有数据库表的权限吗?

1 个答案:

答案 0 :(得分:3)

当您运行GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;时,将授予对数据库有效的所有权限(如此)。

如果您check the manual,您将看到数据库对象支持权限CREATECONNECTTEMPORARY,当您使用"全部授予"。

但是,这不会在数据库中的对象中授予任何内容。

因此,您的问题的答案是" 不授予数据库权限包括授予所有数据库表的权限"很明确:不(如文件所述)。

您正在寻找的是:

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO myuser; 

将自动为所有现有表执行此操作。但是,这不适用于将来创建的任何表。如果需要,您需要使用ALTER DEFAULT PRIVILEGES命令。