您如何授予任意用户对所有功能和视图的读取/选择访问权限?
我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 语句...