如何向任意用户授予对所有函数和视图的读取/ Select 访问权限?

我使用psql --user=postgres -d mydb -f myview.sql创建几个函数和视图,然后运行:

GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;

在被授予所有权限之后,我希望myuser现在可以访问由postgres个用户创建的函数和视图.然而,当我try 用myuser访问它们时,得到"关系许可被拒绝."错误.这是为什么呢?

推荐答案

原因是您需要额外的权限才能访问视图或表.数据库的权限不包括对其中所有对象的访问.

它与函数不同:默认情况下,EXECUTE特权被授予public.But该功能以当前用户的权限执行.你可能会对CREATE FUNCTIONSECURITY DEFINER修饰符感兴趣.但通常情况下,在相关表格上授予SELECT美元就足够了.

Per documentation about default privileges:

根据对象类型,初始默认权限可能 包括向PUBLIC授予一些特权.缺省值为no public 表、列、架构和表空间的访问;CONNECT 数据库权限和TEMP建表权限;EXECUTE 函数的特权;以及语言的USAGE特权.

您可能对此DDL命令感兴趣(需要Postgres 9.0或更高版本):

GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser;

当然,当连接到相关数据库时(请参见下面的@marcel's comment),作为一个拥有足够权限的用户.您可能还对设置DEFAULT PRIVILEGES感兴趣:

更详细地回答如何管理权限:

  • 100

pgAdmin具有更复杂的批量操作功能:

在此处输入图像描述

或者,您可以查询系统目录来创建DDL语句,用于批量授予/撤销.

Database相关问答推荐

在多组MongoDB中查找最新文档的有效方法

使用Postgres获取带有表架构的外键

使用mongoose 在嵌套对象中查找特定字段

使用 prisma ORM 在我的迁移中手动添加触发器

如何在 C# 控制台应用程序中执行 CMD 命令?

add_index 到数据模型 - Ruby on Rails 教程

sql-dump 有什么用?

估计数据库大小

在一次 SQL 查询中更新多行的多列

PHP - 数据库抽象层使用静态类与单例对象?

SQL-Server:还原数据库时,SQL 命令行中的 NOUNLOAD 和 STATS 是什么意思?

触发器内的多个插入/更新语句?

锁定机制(悲观/乐观)如何与数据库事务隔离级别相关?

我们如何保存在 sqlite3 中创建的数据库

如何在 Postgres 9.6+ 中生成长度为 N 的随机、唯一的字母数字 ID?

使用 C3P0 的 JDBC 连接池

SQLite 数据库方案作为实体关系模型

最佳事件采购数据库策略

如何使用 PL/SQL Developer 连接到远程 Oracle DB?

数据库索引及其 Big-O 表示法