只读用户可以创建表

时间:2014-06-20 17:24:11

标签: sql postgresql database-permissions

我在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

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

2 个答案:

答案 0 :(得分:2)

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

  

CREATE

     

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

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

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

public schema附带默认权限:

  

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

大胆强调我的。

您可以更改:

REVOKE CREATE ON SCHEMA public FROM PUBLIC;

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

(或者是角色是超级用户。)

答案 1 :(得分:0)

我正面临类似的问题。即使取消了从公共架构的访问,我仍然可以看到用户能够在其无权访问的架构上创建表。用户唯一的访问权限是连接数据库和理想情况下应该对其具有访问权限的一个模式。