Postgresql

如何允許使用者訪問 Postgres 中的非擁有對象?

  • November 21, 2019

我正在創建一個 pre-prod Postgres 數據庫,並希望確保訪問使用者具有有限的訪問權限。

我想以訪問使用者不能或對象的方式CREATE設置DROPALTER。目前,我可以看到將所有權更改為另一個使用者的唯一方法,例如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

  1. 在和上閱讀手冊GRANTALTER TABLE
  2. 表沒有USAGE特權。如果您嘗試您的GRANT命令,您會看到一條錯誤消息。
  3. 您也需要schema的權限。這USAGE是正確的。但是你肯定要撤銷CREATE
  4. 列所擁有的序列的所有權會serial自動更改為新的表所有者。但是您需要手動重新擁有的任何其他序列。或者你用REASSIGN OWNED.
  5. 可能還需要序列權限。(如果您授予INSERT或希望他們使用currval()nextval()功能)。這些目前(v9.6)與表權限分開。
  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。一些數據庫管理員甚至將其刪除。您可以像使用任何其他架構一樣使用它。視整體情況而定。有關的:

引用自:https://dba.stackexchange.com/questions/185782