Gee, I pasted the ending demonstration as html.

Re-pasting a text version.

----------------------------------------------------------------------------------


┌────
│ drop owned by owner;
│ drop role if exists owner, guest;
│
│ create role owner;
│ create role guest;
│
│ drop schema if exists s;
│ create schema if not exists s authorization owner;
└────

DROP OWNED DROP ROLE CREATE ROLE CREATE ROLE DROP SCHEMA CREATE SCHEMA


1 tables
════════

1.1 no-op
────

  ┌────
  │ set role to owner;
  │ create or replace view s.v1 as select 1;
  └────

  ┌────
  │ \dp+ s.v1
  └────

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   Schema  Name  Type  Access privileges  Column privileges  Policies
  ────────────────────────────────────────────────────────────────────
   s       v1    view
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  ┌────
  │ select * from information_schema.role_table_grants where
table_name='v1';
  └────


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   grantor  grantee  table_catalog  table_schema  table_name
 privilege_type  is_grantable  with_hierarchy

─────────────────────────────────────────────────────────────────────────────────────────────────────────
   owner    owner    postgres       s             v1          INSERT
   YES           NO
   owner    owner    postgres       s             v1          SELECT
   YES           YES
   owner    owner    postgres       s             v1          UPDATE
   YES           NO
   owner    owner    postgres       s             v1          DELETE
   YES           NO
   owner    owner    postgres       s             v1          TRUNCATE
   YES           NO
   owner    owner    postgres       s             v1          REFERENCES
   YES           NO
   owner    owner    postgres       s             v1          TRIGGER
  YES           NO

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  ┌────
  │ set role to owner;
  │ select * from s.v1;
  └────

  ━━━━━━━━━━
   ?column?
  ──────────
          1
  ━━━━━━━━━━


1.2 default privilege: `revoke all from owner'
───────────────────────

  ┌────
  │ alter default privileges for user owner revoke all on tables from owner;
  │ \ddp+
  └────

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   Owner  Schema  Type   Access privileges
  ─────────────────────────────────────────
   owner          table
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  ┌────
  │ set role to owner;
  │ create or replace view s.v2 as select 1;
  └────

  ┌────
  │ \dp+ s.v2
  └────

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   Schema  Name  Type  Access privileges  Column privileges  Policies
  ────────────────────────────────────────────────────────────────────
   s       v2    view
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  ┌────
  │ select * from information_schema.role_table_grants where
table_name='v2';
  └────


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   grantor  grantee  table_catalog  table_schema  table_name
 privilege_type  is_grantable  with_hierarchy

─────────────────────────────────────────────────────────────────────────────────────────────────────────
   owner    owner    postgres       s             v2          INSERT
   YES           NO
   owner    owner    postgres       s             v2          SELECT
   YES           YES
   owner    owner    postgres       s             v2          UPDATE
   YES           NO
   owner    owner    postgres       s             v2          DELETE
   YES           NO
   owner    owner    postgres       s             v2          TRUNCATE
   YES           NO
   owner    owner    postgres       s             v2          REFERENCES
   YES           NO
   owner    owner    postgres       s             v2          TRIGGER
  YES           NO

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  ┌────
  │ set role to owner;
  │ select * from s.v2;
  └────

  ━━━━━━━━━━
   ?column?
  ──────────
          1
  ━━━━━━━━━━


1.3 default privilege: `revoke all but one from owner'
───────────────────────────

  ┌────
  │ alter default privileges for user owner revoke all on tables from owner;
  │ alter default privileges for user owner grant trigger on tables to
owner;
  │ \ddp+
  └────

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   Owner  Schema  Type   Access privileges
  ─────────────────────────────────────────
   owner          table  owner=t/owner
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  ┌────
  │ set role to owner;
  │ create or replace view s.v3 as select 1;
  └────

  ┌────
  │ \dp+ s.v3
  └────

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   Schema  Name  Type  Access privileges  Column privileges  Policies
  ────────────────────────────────────────────────────────────────────
   s       v3    view  owner=t/owner
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  ┌────
  │ select * from information_schema.role_table_grants where
table_name='v3';
  └────


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   grantor  grantee  table_catalog  table_schema  table_name
 privilege_type  is_grantable  with_hierarchy

─────────────────────────────────────────────────────────────────────────────────────────────────────────
   owner    owner    postgres       s             v3          TRIGGER
  YES           NO

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  ┌────
  │ set role to owner;
  │ select * from s.v3;
  └────

  ┌────
  │ ERROR:  42501: permission denied for view v3
  │ LOCATION:  aclcheck_error, aclchk.c:3461
  └────


1.4 manual `revoke all from owner'
─────────────────

  ┌────
  │ alter default privileges for user owner revoke all on tables from owner;
  │ \ddp+
  └────

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   Owner  Schema  Type   Access privileges
  ─────────────────────────────────────────
   owner          table
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  ┌────
  │ set role to owner;
  │ create or replace view s.v4 as select 1;
  └────

  ┌────
  │ \dp+ s.v4
  └────

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   Schema  Name  Type  Access privileges  Column privileges  Policies
  ────────────────────────────────────────────────────────────────────
   s       v4    view
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  ┌────
  │ select * from information_schema.role_table_grants where
table_name='v4';
  └────


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   grantor  grantee  table_catalog  table_schema  table_name
 privilege_type  is_grantable  with_hierarchy

─────────────────────────────────────────────────────────────────────────────────────────────────────────
   owner    owner    postgres       s             v4          INSERT
   YES           NO
   owner    owner    postgres       s             v4          SELECT
   YES           YES
   owner    owner    postgres       s             v4          UPDATE
   YES           NO
   owner    owner    postgres       s             v4          DELETE
   YES           NO
   owner    owner    postgres       s             v4          TRUNCATE
   YES           NO
   owner    owner    postgres       s             v4          REFERENCES
   YES           NO
   owner    owner    postgres       s             v4          TRIGGER
  YES           NO

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  ┌────
  │ set role to owner;
  │ select * from s.v4;
  └────

  ━━━━━━━━━━
   ?column?
  ──────────
          1
  ━━━━━━━━━━

  So far, the situation is identical to s.v2.

  ┌────
  │ set role to owner;
  │ revoke all on table s.v4 from owner;
  └────

  ┌────
  │ \dp+ s.v4
  └────

  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   Schema  Name  Type  Access privileges  Column privileges  Policies
  ────────────────────────────────────────────────────────────────────
   s       v4    view
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  ┌────
  │ select * from information_schema.role_table_grants where
table_name='v4';
  └────


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   grantor  grantee  table_catalog  table_schema  table_name
 privilege_type  is_grantable  with_hierarchy

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  ┌────
  │ set role to owner;
  │ select * from s.v4;
  └────

  ┌────
  │ ERROR:  42501: permission denied for view v4
  │ LOCATION:  aclcheck_error, aclchk.c:3461
  └────

Reply via email to