CREATE USER user1;
CREATE DATABASE mydb with OWNER user1;
CREATE TABLE x ...;
CREATE USER user2;
GRANT user1 to user2;
以user2
登录。
INSERT INTO TABLE x ...;
CREATE TABLE z ...;
一切都很顺利。
以user1
(数据库所有者)登录。
SELECT FROM z; -- fails; table is owned by user2
db所有者是否不能访问所有对象?
另外,如果我:
CREATE USER user3;
GRANT user1 /* db owner */ TO user3;
即使user2
已从数据库所有者授予角色,我也无法访问user3
创建的对象。
答案 0 :(得分:1)
数据库的权限与数据库中其他对象的权限无关,因此即使您是数据库所有者,也可以拒绝访问数据库对象。
数据库的所有权意味着您拥有数据库对象本身的所有权限,并可以将其授予其他人:CREATE
到数据库,TEMPORARY
模式和ALTER
表。此外,您可以DROP
和ALTER
数据库。
如果您将数据库所有者授予其他用户,则该用户将获得数据库所有者的所有权限,但不能获得DROP
或SET ROLE
数据库的权限(除非{{1}}是曾经“成为”数据库所有者)。
答案 1 :(得分:1)
GRANT有两种形式:授予数据库对象和授予角色,它们完全不同:
语法部分的最后一行是您正在尝试的GRANT。请注意,授权位于角色上,而不是用户,但在PostgreSQL中,角色是用户:
"角色可以被视为数据库用户或一组 数据库用户,取决于角色的设置方式"。
此服务器故障链接可能会有所帮助: postgresql-what-does-grant-all-privileges-on-database-do