2014-06-20 39 views
2

我创建了一个只读的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在测试DB 2个表。

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

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

我只是想创建一个SELECT权限只读用户。我不想授予创建表权限。

+0

的http://计算器.com/questions/760210/how-do-you-create-a-read-only-user-in-postgresql – Mihai

回答

2

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

CREATE

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

要创建的表的默认模式是当前search_path的第一个模式。

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

而且public schema自带的默认权限:

用户也可以允许在别人的模式来创建对象。 要实现这一点,需要授予模式上的CREATE特权。 请注意,默认情况下,每个人都有CREATEUSAGE特权 架构公共

大胆重视我的。

您可以更改:

REVOKE CREATE ON SCHEMA public FROM public; 

一定要考虑后果,第一...

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

+1

我做了同样的事情。从此用户撤销创建特权引擎,然后我就能够在测试数据库DB – WinSupp

+0

@ user3669651:B它是*不*相同。从'readonly2'撤销权限不会改变*每个*用户都可以在'public'模式中创建表,直到您撤销角色'public' ... –