建立postgresql只读账号,只能连接到指定的数据库,并仅能读取指定的表

一、需求

要求建立为用户建立一个postgresql数据库账号,仅能读取指定数据库,仅能对指定的table进行select操作。

二、实现思路

postgresql中有模式(schema)的概念,可以理解为命名空间。在一个数据库中可以有多个模式,每个模式中可以包含表、函数等对象。不同的模式下可以有相同的表名、函数等。用户连接到一个数据库后,可以访问其下的多个模式中的对象。在postgresql中数据库创建后默认是的模式名是public,所有账号默认情况都可以访问,并且有create table的权限。

  • 1、实现仅能连接指定数据库(收回数据库public模式的连接权限)
# 如果有多个库,这里将其他库的连接权限收回;仅有1个库时可以跳过。
revoke connect on database <数据库名> from public
  • 2、禁止创建表的功能(收回账号在public模式下可以创建表的权限)
revoke create on sechema public from <账号名>
  • 3、实现仅能读取指定表的内容(授予账号对指定表的select权限)
# 方式1:授权指定表
grant select on <表名1, 表名1...> in schema <模式名> to <账号名>
# 方式2:授权所有表
grant select on all tables in schema <模式名> to <账号名>
# 注意:没有授权的表仍能看到表名
posted @ 2022-10-17 09:41  回到彼岸  阅读(1043)  评论(0)    收藏  举报