我只是好奇为什么PostgreSQL中的所有数据库都有一个public模式,所有用户都可以访问。我知道我可以撤销特权并将其授予一个用户,但为什么这不是默认值?
public
huwehgph1#
没有给出太多的理由,但请参阅手册中的[5.9.6][1]节,但我认为以下内容回答了您的问题:如果您不创建任何模式,则所有用户都会隐式访问公共模式。这模拟了模式完全不可用的情况。当数据库中只有单个用户或几个合作用户时,建议使用此设置。此设置还允许从非模式感知世界平滑过渡。
7jmck4yq2#
public schema的概念出现在7.3版本,当时在PostgreSQL中出现了schema的概念。并且需要支持向后兼容性。因此,public schema在任何地方都是不可见的。可能其他任何东西都不再需要public schema,可以将其删除。https://severalnines.com/database-blog/postgresql-privileges-and-security-locking-down-public-schema
svmlkihl3#
我猜是SQL规范。但是,这是相当合乎逻辑的,否则create user会做什么,需要你显式地说用户也可以访问什么模式?如果你的用户不能访问任何一个共享资源,为什么不为他们创建一个新的数据库呢?与MySQL不同,一个新的数据库就是一个新的数据库,而不是一个新模式的别名。我只是想澄清这一点,这意味着每个数据库都有自己的public.模式。
create user
public.
3条答案
按热度按时间huwehgph1#
没有给出太多的理由,但请参阅手册中的[5.9.6][1]节,但我认为以下内容回答了您的问题:
如果您不创建任何模式,则所有用户都会隐式访问公共模式。这模拟了模式完全不可用的情况。当数据库中只有单个用户或几个合作用户时,建议使用此设置。此设置还允许从非模式感知世界平滑过渡。
7jmck4yq2#
public schema的概念出现在7.3版本,当时在PostgreSQL中出现了schema的概念。并且需要支持向后兼容性。因此,public schema在任何地方都是不可见的。可能其他任何东西都不再需要public schema,可以将其删除。https://severalnines.com/database-blog/postgresql-privileges-and-security-locking-down-public-schema
svmlkihl3#
我猜是SQL规范。但是,这是相当合乎逻辑的,否则
create user
会做什么,需要你显式地说用户也可以访问什么模式?如果你的用户不能访问任何一个共享资源,为什么不为他们创建一个新的数据库呢?与MySQL不同,一个新的数据库就是一个新的数据库,而不是一个新模式的别名。
我只是想澄清这一点,这意味着每个数据库都有自己的
public.
模式。