如何向任意用户授予对所有函数和视图的读取/ Select 访问权限?
我使用psql --user=postgres -d mydb -f myview.sql
创建几个函数和视图,然后运行:
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
在被授予所有权限之后,我希望myuser
现在可以访问由postgres
个用户创建的函数和视图.然而,当我try 用myuser
访问它们时,得到"关系许可被拒绝."错误.这是为什么呢?
如何向任意用户授予对所有函数和视图的读取/ 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 FUNCTION
的SECURITY 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
感兴趣:
更详细地回答如何管理权限:
pgAdmin具有更复杂的批量操作功能:
或者,您可以查询系统目录来创建DDL语句,用于批量授予/撤销.