PostgreSQL中新關係的權限如何工作?PostgreSQL和特權
步驟:
- 創建DB(從用戶postgres的)和連接到它
CREATE DATABASE test; \c test
- 一些創建用戶站點特權
- 更改默認爲用戶站點特權
- 與所有創建用戶遷移特權
- 連接到DB從用戶遷移和創建表
- 連接到DB site並從創建表中選擇數據
CREATE USER site NOCREATEDB NOINHERIT; GRANT SELECT, UPDATE, INSERT, DELETE, TRUNCATE, REFERENCES ON ALL TABLES IN SCHEMA public TO site; GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO site;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, UPDATE, INSERT, DELETE, TRUNCATE, REFERENCES ON TABLES TO site;
CREATE USER migration NOCREATEDB NOINHERIT; GRANT ALL PRIVILEGES ON DATABASE test TO migration;
CREATE TABLE test (id serial);
-
從用戶
SELECT * FROM test; ERROR: permission denied for relation test
但是,如果我從用戶postgres創建表,一切正常!
爲什麼默認權限在這種情況下不起作用?如何爲用戶網站授予新表的權限?
謝謝!有幫助,但這種變化之後用戶_site_可以改變表模式和drop table: '測試=> SELECT * FROM測試;'' ID'' ----'' (0行)'' 測試=> ALTER TABLE test ADD test_column char(1);' 'ALTER TABLE' 'test => DROP TABLE test;' 'DROP TABLE' – vanchester 2015-02-25 04:56:53
'ALTER' /'DROP'權限不能被授予。他們只有桌子所有者(當然還有像_postgres_這樣的超級用戶)。如果允許_site_刪除表,則_site_是創建它的人。我認爲你從錯誤的會話中運行了一部分測試腳本。 – 2015-02-25 10:18:32