以下讨论以postgresql 10版本为例
关于权限:
- 如果没有授权,默认情况下:所有表、schema都无法读取,但数据库任何用户都可以连接,函数任何用户可以执行。默认权限可用 ALTER DEFAULT PRIVILEGES进行修改,但修改默认权限只是对新建的对象起作用,对已建立的对象不起作用。
- 默认情况下,数据库任何人都可以连接,若要提高安全性,需用 REVOKE ALL ON DATABASE .. FROM PUBLIC, 再对特定的用户一个个授权。除此外,也可以通过pg_hba.conf 来限定特定的用户才可连接。
- 默认情况下,函数任何人都可以执行,对于SECURITY INVOKER函数(默认情况下), 因为执行还受执行者权限限制,若对某表无权限,函数也无法执行下去,而对SECURITY DEFINER 函数(带S标志,执行者拥有定义者权限)一定要需用 REVOKE ALL ON FUNCTION .. FROM PUBLIC, 再对特定的用户一个个授权。
- 所有函数都是任何用户可读,没有REVOKE语句可防止函数被读,这十分不利于保护自己写的函数代码,但可以用以下语句进行限定
所有的函数都读取不了,只有超级用户和 函数拥有者可读取。REVOKE ALL ON pg_catalog.pg_proc FROM public; REVOKE all on function pg_catalog.pg_get_functiondef from public; - 对public的理解:public并不指“所有用户“,而是指"除目前已授权用户外的所有用户", 如
- 授权语句 grant all on table xxx to abc; -- 解除授权语句 revoke all on table xxx from public; -- public 不能解除abc用户的权限 revoke all on table xxx from abc; -- 必须再加上这条解除授权语句
这篇博客探讨了PostgreSQL10中的权限设置,包括默认情况下数据库和函数的访问权限,以及如何通过ALTER DEFAULT PRIVILEGES修改默认权限。重点介绍了如何使用REVOKE和GRANT命令来增强安全性,比如限制公共用户对数据库、表和函数的访问,并强调了对public的理解。同时,提出了保护函数代码的方法,通过REVOKE权限防止未授权访问。
2917

被折叠的 条评论
为什么被折叠?



