我在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
其中test1
和test2
是测试数据库中的2个表。
现在,当我以readonly2
用户身份登录测试数据库时,我可以创建表格:
test=> create table test55 (id int);
CREATE TABLE
我只想创建一个具有select权限的只读用户。我不想授予创建表权限。
答案 0 :(得分:2)
每个表都是在Postgres中的模式中创建的。要创建表,角色必须具有架构的CREATE
权限。 Per documentation:
CREATE
...对于模式,允许在模式中创建新对象。
要创建的表的默认架构是当前search_path
的第一个架构。
search_path中的第一个模式通常是与用户或模式public
同名的模式。
public
schema附带默认权限:
还可以允许用户在其他人的架构中创建对象。 为此,需要授予模式的
CREATE
权限。 请注意,默认情况下,每个人都拥有CREATE
和USAGE
权限 schema public 。
大胆强调我的。
您可以更改:
REVOKE CREATE ON SCHEMA public FROM PUBLIC;
一定要先考虑后果......
(或者是角色是超级用户。)
答案 1 :(得分:0)
我正面临类似的问题。即使取消了从公共架构的访问,我仍然可以看到用户能够在其无权访问的架构上创建表。用户唯一的访问权限是连接数据库和理想情况下应该对其具有访问权限的一个模式。