Postgresql
如何允許使用者訪問 Postgres 中的非擁有對象?
我正在創建一個 pre-prod Postgres 數據庫,並希望確保訪問使用者具有有限的訪問權限。
我想以訪問使用者不能或對象的方式
CREATE
設置DROP
表ALTER
。目前,我可以看到將所有權更改為另一個使用者的唯一方法,例如postgres
然後以某種方式僅授予所需的權限:ALTER TABLE mytable SET OWNER TO postgres; REVOKE connect ON DATABASE mydatabase FROM PUBLIC; GRANT USAGE, SELECT, UPDATE ON ALL TABLES IN SCHEMA public TO dbuser; GRANT connect ON DATABASE mydatabase TO dbuser;
SELECT
問題是當我執行上述操作時,當我與授予應用程序的使用者連接時,我無法做一個簡單的事情。例如:select * from mytable;
產量:
ERROR: permission denied for relation mytable
如何做到這一點?
此外,我應該使用除 ? 之外的命名模式
public
?
- 在和上閱讀手冊
GRANT
ALTER TABLE
。- 表沒有
USAGE
特權。如果您嘗試您的GRANT
命令,您會看到一條錯誤消息。- 您也需要schema的權限。這
USAGE
是正確的。但是你肯定要撤銷CREATE
。- 列所擁有的序列的所有權會
serial
自動更改為新的表所有者。但是您需要手動重新擁有的任何其他序列。或者你用REASSIGN OWNED
.- 您可能還需要序列權限。(如果您授予
INSERT
或希望他們使用currval()
或nextval()
功能)。這些目前(v9.6)與表權限分開。- 我強烈建議將權限捆綁在一個組角色中,並將該角色的成員資格授予/撤銷給選定的使用者角色。
作為超級使用者,沿著這些構想:
REVOKE ALL ON DATABASE mydatabase FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM PUBLIC; -- you may or may not want this -- REVOKE ALL ON ALL TABLES IN SCHEMA public FROM PUBLIC; -- only for more existing permissions -- REVOKE ALL ON ALL SEQUENCES IN SCHEMA public FROM PUBLIC; -- only for more existing permissions ALTER TABLE mytable OWNER TO postgres; -- or some admin role. best keep the superuser out of this -- more tables? or even: -- REASSIGN OWNED BY dbuser TO postgres; -- to reassign *all* owned objects the current DB CREATE ROLE usr_permissions; GRANT usr_permissions TO dbuser; GRANT CONNECT ON DATABASE mydatabase TO usr_permissions; GRANT USAGE ON SCHEMA public TO usr_permissions; -- if you revoked from PUBLIC GRANT SELECT, UPDATE ON ALL TABLES IN SCHEMA public TO usr_permissions; -- DELETE, INSERT? GRANT USAGE ON ALL SEQUENCES IN SCHEMA public TO usr_permissions; -- if you also granted INSERT
有關的:
此外,我應該使用公共以外的命名模式嗎?
架構
public
絕不是特別的。它只是在預設情況下安裝,PUBLIC
並在 default 中設置了權限和預設search_path
。一些數據庫管理員甚至將其刪除。您可以像使用任何其他架構一樣使用它。視整體情況而定。有關的: