关于权限:
- 如果没有授权,默认情况下:所有表、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;
- REVOKE ALL ON pg_catalog.pg_proc 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; -- 必须再加上这条解除授权语句
- -- 授权语句