Chinaunix首页 | 论坛 | 博客
  • 博客访问: 205860
  • 博文数量: 21
  • 博客积分: 1546
  • 博客等级: 上尉
  • 技术积分: 290
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-10 14:54
文章分类

全部博文(21)

文章存档

2020年(1)

2019年(3)

2015年(2)

2014年(1)

2011年(1)

2009年(7)

2008年(4)

2007年(2)

我的朋友

分类: Mysql/postgreSQL

2019-10-15 09:19:52

以下讨论以postgresql 10版本为例
关于权限:
  1. 如果没有授权,默认情况下:所有表、schema都无法读取,但数据库任何用户都可以连接,函数任何用户可以执行。默认权限可用 ALTER DEFAULT PRIVILEGES进行修改,但修改默认权限只是对新建的对象起作用,对已建立的对象不起作用。
  2. 默认情况下,数据库任何人都可以连接,若要提高安全性,需用 REVOKE  ALL ON DATABASE .. FROM PUBLIC,  再对特定的用户一个个授权。除此外,也可以通过pg_hba.conf 来限定特定的用户才可连接。
  3. 默认情况下,函数任何人都可以执行,对于SECURITY INVOKER函数(默认情况下), 因为执行还受执行者权限限制,若对某表无权限,函数也无法执行下去,而对SECURITY DEFINER 函数(带S标志,执行者拥有定义者权限)一定要需用 REVOKE  ALL ON FUNCTION .. FROM PUBLIC,  再对特定的用户一个个授权。
  4. 所有函数都是任何用户可读,没有REVOKE语句可防止函数被读,这十分不利于保护自己写的函数代码,但可以用以下语句进行限定

    点击(此处)折叠或打开

    1. REVOKE ALL ON pg_catalog.pg_proc FROM public;
    2. REVOKE all on function pg_catalog.pg_get_functiondef from public;
    所有的函数都读取不了,只有超级用户和 函数拥有者可读取。
  5. 对public的理解:public并不指“所有用户“,而是指"除目前已授权用户外的所有用户"", 如

    点击(此处)折叠或打开

    1. -- 授权语句
    2. grant all on table xxx to abc;

    3. -- 解除授权语句
    4. revoke all on table xxx from public; -- public 不能解除abc用户的权限

    5. revoke all on table xxx from abc; -- 必须再加上这条解除授权语句

     

阅读(2407) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~