为了从表中进行 Select ,我需要:

  • 在数据库上连接
  • 模式上的使用(隐式给予模式所有者)
  • 表上的SELECT(隐式给予表所有者)

这正确吗?

推荐答案

PostgreSQL有3层对象(数据库、模式、对象,例如表),还向DB对象所有者提供隐式授权

这意味着我们需要

  • 在数据库上连接
  • 模式上的使用(隐式给予模式所有者)
  • 表上的SELECT(隐式给予表所有者)

要查看这些特权:

  • 使用\l+查看数据库的特权
  • 使用\dn+查看架构的特权
  • 使用\dp+查看表的特权

特权为seen here

enter image description here

我们还需要了解以下格式的acl条目:

grantee=privilege-abbreviation[*]/grantor

例如,在以下\dp+ acl示例中,postgres角色已授予user所有权限

user=arwdDxt/postgres

如果acl条目为空,则意味着对象具有默认所有者特权(所有特权)

如果给定对象的"grantee"列为空,则意味着特权被授予PUBLIC个角色(存在的每个角色)

=UC/postgres

此外,当使用公共模式时也会令人困惑.您对架构具有创建权限,因此当使用同一用户创建表时,您将使用该用户 Select 数据,并且您立即拥有所有者权限.

此外.在执行上述任何操作之前,您必须连接到集群.这意味着使用具有LOGIN权限的角色并使用有效密码和SSL进行连接.

Postgresql相关问答推荐

PostgreSQL:计数多列中的唯一值

Postgresql函数返回值别名

PostgreSQL权限如何工作?需要从表格中 Select 收件箱

包含JSONB属性的过滤器的索引策略

复合索引列的顺序导致不同的计划

如何删除Devtainer之前创建的PostgreSQL数据库?

在PostGreSQL中获取最近日期的项目

Postgres从spark触发post-write

PostgreSQL:动态SELECT查询

Ubuntu 上的 PostgreSQL 安装:找不到initdb命令

如何使用 go-pg 包删除所有记录

如何获取在 Go 中完成的 SQL 插入的错误详细信息?

PostgresQL:获取两个数组之间的对应数量

PostgreSQL - jsonb_each

brew 程序更新恼人的错误信息

Postgres 类似于 SQL Server 中的 CROSS APPLY

处理用户发送的string contains null byte

PostgreSQL - 作为表名的动态值

GRANT SELECT 特权使用一个语句对所有序列

PostgreSQL - 如何在不同时区呈现日期?