我曾经在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;
错误消失了。
不授予数据库权限包括授予所有数据库表的权限吗?
答案 0 :(得分:3)
当您运行GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
时,将授予对数据库有效的所有权限(如此)。
如果您check the manual,您将看到数据库对象支持权限CREATE
,CONNECT
和TEMPORARY
,当您使用"全部授予"。
但是,这不会在数据库中的对象中授予任何内容。
因此,您的问题的答案是" 不授予数据库权限包括授予所有数据库表的权限"很明确:不(如文件所述)。
您正在寻找的是:
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO myuser;
将自动为所有现有表执行此操作。但是,这不适用于将来创建的任何表。如果需要,您需要使用ALTER DEFAULT PRIVILEGES
命令。