PostgreSQL中空默认权限的奇怪行为

PostgreSQL中空默认权限的奇怪行为

💡 原文英文,约1400词,阅读约需5分钟。
📝

内容提要

PostgreSQL默认对某些对象类型授予PUBLIC权限,但表和列等对象不授予。函数的默认权限为EXECUTE,即使撤销默认权限,新创建的函数仍会继承EXECUTE权限。可以通过ALTER DEFAULT PRIVILEGES命令管理权限。建议创建一个“nobody”角色以控制权限继承,防止不必要的访问。

🎯

关键要点

  • PostgreSQL默认对某些对象类型授予PUBLIC权限,但表和列等对象不授予。
  • 函数的默认权限为EXECUTE,新创建的函数仍会继承EXECUTE权限。
  • 可以通过ALTER DEFAULT PRIVILEGES命令管理权限。
  • 建议创建一个'nobody'角色以控制权限继承,防止不必要的访问。
  • pg_catalog.pg_proc目录存储函数和过程的信息,包括访问权限。
  • ALTER DEFAULT PRIVILEGES允许设置未来创建对象的权限,不影响已存在对象的权限。
  • 内置默认权限的行为可能导致意外的访问权限,需谨慎管理。
  • 建议通过撤销所有默认权限并将其授予'nobody'角色来控制权限继承。
  • 可以通过创建示例数据库和函数来重现默认权限的奇怪行为。

延伸问答

PostgreSQL默认对哪些对象类型授予PUBLIC权限?

PostgreSQL默认对数据库、函数和过程等对象类型授予PUBLIC权限,但表和列等对象不授予。

如何管理PostgreSQL中的默认权限?

可以使用ALTER DEFAULT PRIVILEGES命令来管理PostgreSQL中的默认权限。

为什么新创建的函数仍然继承EXECUTE权限?

即使撤销所有默认权限,新创建的函数仍会继承EXECUTE权限,这是PostgreSQL的内置行为。

如何防止PostgreSQL中的不必要权限继承?

建议创建一个'nobody'角色,并撤销所有默认权限,将其授予该角色,以控制权限继承。

pg_catalog.pg_proc目录的作用是什么?

pg_catalog.pg_proc目录存储函数和过程的信息,包括它们的访问权限。

如何重现PostgreSQL中默认权限的奇怪行为?

可以通过创建示例数据库和函数,并检查默认权限的状态来重现这一行为。

➡️

继续阅读