💡
原文英文,约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中默认权限的奇怪行为?
可以通过创建示例数据库和函数,并检查默认权限的状态来重现这一行为。
🏷️
标签
➡️