关于sql:只读用户能够创建表

Read-only user able to create table

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

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

1
2
3
4
CREATE DATABASE test1
CREATE USER readonly2 WITH password 'readonly';
GRANT SELECT ON test1 TO readonly2
GRANT SELECT ON test2 TO readonly2

其中test1test2是测试DB中的2个表。

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

1
2
test=> CREATE TABLE test55 (id INT);
CREATE TABLE

我只想创建一个具有select权限的只读用户。 我不想授予create table权限。


每个表都是在Postgres中的模式中创建的。 要创建表,角色必须具有架构的CREATE权限。 每个文件:

CREATE

... For schemas, allows new objects to be created within the schema.

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

search_path中的第一个模式通常是与用户或模式public同名的模式。

public模式具有默认权限:

A user can also be allowed to create objects in someone else's schema.
To allow that, the CREATE privilege on the schema needs to be granted.
Note that by default, everyone has CREATE and USAGE privileges on the
schema public.

大胆强调我的。

你可以改变:

1
REVOKE CREATE ON SCHEMA public FROM PUBLIC;

一定要先考虑后果......

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