【问题标题】:Doesn't granting privileges on database include granting the privilegs on all database's tables?授予数据库权限不包括授予所有数据库表的权限吗?
【发布时间】:2014-08-16 02:33:38
【问题描述】:

我曾经在 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;

错误消失了。

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

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    当您运行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 命令。

    【讨论】:

      猜你喜欢
      • 2011-06-28
      • 2019-12-28
      • 1970-01-01
      • 2015-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多