2014-06-20 38 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' ... –