经常在PG群里看到有人在问“为什么我对表赋予了权限;但是还是不能访问表”
解析若你看懂德哥这篇文章PostgreSQL逻辑结构和权限体系介绍;上面对你就不是困扰你的问题
解决这个问题很简单;在解决之前;我们要先了解PostgreSQL的逻辑结构、以及与用户之间的关系。盗用德哥的图;来诠释下逻辑结构;PostgreSQL逻辑结构有4层:实例->数据库->schema->数据库对象
可以看出用户不在PostgreSQL里面;是独立之外的object;这个跟Oracle逻辑结构不一致。它不属于某个数据库、或者某个schema。
若用户不是数据库属主的用户;要访问table1;该怎么办?有三步
首先你把数据库select的权限赋予用户
再则你需要把table1所在的schema的select权限赋予用户
最后你需要把table的select的权限赋予
讨论现实验环境
用户:lottu1、lottu2。
数据库:db1
schema:lottu1
表:tbl_lottu_01
# 创建用户lottu1 postgres=# create user lottu1; CREATE ROLE # 创建用户lottu2 postgres=# create user lottu2; CREATE ROLE # 创建数据库db1;属于lottu1 postgres=# create database db1 owner lottu1; CREATE DATABASE # 创建schema、table、并插入记录 postgres=# \c db1 lottu1; You are now connected to database "db1" as user "lottu1". db1=> create schema lottu1; CREATE SCHEMA db1=> create table tbl_lottu_01(id int, info text, reg_time timestamp); CREATE TABLE db1=> insert into tbl_lottu_01 select 1,'lottu',now(); INSERT 0 1