【问题标题】:Read-only user able to create table只读用户可以创建表
【发布时间】:2014-08-11 12:36:47
【问题描述】:

我在 PostgreSQL 中创建了一个只读用户,它仍然可以创建表:

我创建了一个测试数据库,然后创建了一个readonly2 用户。仅授予它对 2 个表的选择权限。当我以readonly2 用户身份登录此数据库时,我仍然可以创建表:

create database test1
create user readonly2 with password 'readonly';
grant select on test1 to readonly2
grant select on test2 to readonly2

test1test2 是测试数据库中的 2 个表。

现在,当我以readonly2 用户身份登录测试数据库时,我可以创建表了:

test=> create table test55 (id int);
CREATE TABLE

我只想创建一个具有选择权限的只读用户。我不想授予创建表权限。

【问题讨论】:

标签: sql postgresql database-permissions


【解决方案1】:

每个表都是在 Postgres 的模式中创建的。要创建表,角色必须具有 schemaCREATE 权限。 Per documentation:

创建

... 对于模式,允许在模式中创建新对象。

要创建的表的默认架构是当前search_path 的第一个架构。

search_path 中的第一个架构通常是与用户同名的架构或架构public

public schema 带有默认权限:

还可以允许用户在其他人的架构中创建对象。 为此,需要授予架构上的 CREATE 权限。 请注意,默认情况下,每个人都拥有CREATEUSAGE 架构公开

我的大胆强调。

你可以改变它:

REVOKE CREATE ON SCHEMA public FROM PUBLIC;

一定要先考虑后果...

(要么是,要么角色是超级用户。)

【讨论】:

  • 我做了同样的事情.. 撤销了该用户的创建权限revoke create on schema public from readonly2 重新启动了数据库引擎,即使这样我也能够在测试数据库中创建表
  • @user3669651:但它相同。撤销readonly2 的权限并不会改变每个 用户可以在public 架构中创建表的事实,直到您撤销角色public ...
猜你喜欢
  • 2016-03-02
  • 2011-11-22
  • 1970-01-01
  • 1970-01-01
  • 2012-01-01
  • 2020-07-04
  • 2014-08-13
  • 1970-01-01
  • 2011-09-10
相关资源
最近更新 更多