您如何授予任意用户对所有功能和视图的读取/选择访问权限?
我psql --user=postgres -d mydb -f myview.sql
用来创建几个函数和视图,然后运行:
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
被授予所有权限后,我希望myuser
现在可以访问postgres
用户创建的功能和视图。但是,当我尝试使用 访问它们时myuser
,我收到“关系被拒绝的权限...”错误。为什么是这样?
您如何授予任意用户对所有功能和视图的读取/选择访问权限?
我psql --user=postgres -d mydb -f myview.sql
用来创建几个函数和视图,然后运行:
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
被授予所有权限后,我希望myuser
现在可以访问postgres
用户创建的功能和视图。但是,当我尝试使用 访问它们时myuser
,我收到“关系被拒绝的权限...”错误。为什么是这样?
原因是您需要额外的权限才能访问视图或表。数据库上的权限不包括对其中所有对象的访问。
它与功能不同:默认情况下EXECUTE
授予特权public
。但是该函数是以当前用户的权限执行的。您可能对 . 的SECURITY DEFINER
修饰符感兴趣CREATE FUNCTION
。SELECT
但通常在涉及的表上授权就足够了。
根据对象的类型,初始默认权限可能包括授予
PUBLIC
. 默认情况下对表、列、模式和表空间没有公共访问权限;CONNECT
数据库的权限和TEMP
建表权限;EXECUTE
功能特权;和USAGE
语言的特权。
您可能对此 DDL 命令感兴趣(需要 Postgres 9.0或更高版本):
GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser;
当然,在连接到有问题的数据库时(请参阅下面的@marcel 评论),并且作为具有足够权限的用户。您可能还对设置感兴趣DEFAULT PRIVILEGES
:
更详细的回答如何管理权限:
pgAdmin具有用于更复杂的批量操作的功能:
或者您可以查询系统目录以创建用于批量授予/撤销的 DDL 语句...