ALTER DEFAULT PRIVILEGES

修改默认的访问权限。

概要

  1. ALTER DEFAULT PRIVILEGES
  2. [ FOR { ROLE | USER } target_role [, ...] ]
  3. [ IN SCHEMA schema_name [, ...] ]
  4. abbreviated_grant_or_revoke
  5. where abbreviated_grant_or_revoke is one of:
  6. GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
  7. [, ...] | ALL [ PRIVILEGES ] }
  8. ON TABLES
  9. TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
  10. GRANT { { USAGE | SELECT | UPDATE }
  11. [, ...] | ALL [ PRIVILEGES ] }
  12. ON SEQUENCES
  13. TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
  14. GRANT { EXECUTE | ALL [ PRIVILEGES ] }
  15. ON FUNCTIONS
  16. TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
  17. GRANT { USAGE | ALL [ PRIVILEGES ] }
  18. ON TYPES
  19. TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
  20. REVOKE [ GRANT OPTION FOR ]
  21. { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
  22. [, ...] | ALL [ PRIVILEGES ] }
  23. ON TABLES
  24. FROM { [ GROUP ] role_name | PUBLIC } [, ...]
  25. [ CASCADE | RESTRICT ]
  26. REVOKE [ GRANT OPTION FOR ]
  27. { { USAGE | SELECT | UPDATE }
  28. [, ...] | ALL [ PRIVILEGES ] }
  29. ON SEQUENCES
  30. FROM { [ GROUP ] role_name | PUBLIC } [, ...]
  31. [ CASCADE | RESTRICT ]
  32. REVOKE [ GRANT OPTION FOR ]
  33. { EXECUTE | ALL [ PRIVILEGES ] }
  34. ON FUNCTIONS
  35. FROM { [ GROUP ] role_name | PUBLIC } [, ...]
  36. [ CASCADE | RESTRICT ]
  37. REVOKE [ GRANT OPTION FOR ]
  38. { USAGE | ALL [ PRIVILEGES ] }
  39. ON TYPES
  40. FROM { [ GROUP ] role_name | PUBLIC } [, ...]
  41. [ CASCADE | RESTRICT ]

描述

ALTER DEFAULT PRIVILEGES允许你为将来会创建的对象赋予 权限。(不会影响那些已经赋予存在对象的权限。)目前只有表(包括视图和 外键表)、序列、函数、类型的权限可以被修改。

你只可以修改那些你自己或者你所在角色会创建的对象的权限。这些权限既可 以在全局范围内设置(例如:在当前数据库创建的所有对象。),也可以为指 定模式下的对象设置。每个模式指定的默认权限将添加到特定对象类型的全局 默认权限。

GRANT中介绍的,任何对象的默认权限通 常都会被授予所有可授予的权限,也可能会被授予一些PUBLIC 权限。不管怎样,这些都可以通过ALTER DEFAULT PRIVILEGES 来修改全局默认权限来设置。

参数

target_role

当前的角色是一个成员时,那么target_role为要修改的角色名,如果FOR ROLE 被省略,那么会将当前的角色当为目标角色。

schema_name

模式名,如果指定了模式名,那么之后在这个模式下面创建的所有对象默认的权限都会被修改。如果 IN SCHEMA被省略,那么全局权限会被修改。

role_name

授予或撤消权限的现有角色的名称。这个参数和所有在 abbreviated_grant_or_revoke 中的参数,按照GRANTREVOKE描述中 进行操作,除非这个是为整个对象类而不是特定的命名对象设置权限。

注意

psql的 \ddp 命令来获取有关默认权限的现有分配信息,权限值的含义与在 GRANT 中\dp命令的解释相同。

如果你想删除一个被修改了默认权限的角色,必须撤消其默认权限的更改,或使用DROP OWNED BY 删除该角色的默认权限条目。

示例

为随后在myschema中创建的所有表(和视图)的每个人授予SELECT权限,并允许角色 webuser 也插入到它们中:

  1. ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT SELECT ON TABLES TO PUBLIC;
  2. ALTER DEFAULT PRIVILEGES IN SCHEMA myschema GRANT INSERT ON TABLES TO webuser;

撤销上面的操作,那样随后创建的表不会拥有比正常权限更多的权限:

  1. ALTER DEFAULT PRIVILEGES IN SCHEMA myschema REVOKE SELECT ON TABLES FROM PUBLIC;
  2. ALTER DEFAULT PRIVILEGES IN SCHEMA myschema REVOKE INSERT ON TABLES FROM webuser;

将所有在admin角色上随后创建的函数上删除正常在函数上赋予的公有的执行权限:

  1. ALTER DEFAULT PRIVILEGES FOR ROLE admin REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC;

兼容性

在标准SQL语句中没有ALTER DEFAULT PRIVILEGES语句。

另见

GRANT, REVOKE

Parent topic: SQL Command Reference