如何向所有用户授予对所有功能和视图的读/选访问权限?
我使用psql --user=postgres -d mydb -f myview.sql
创建了多个函数和视图,然后运行:
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
获得所有权限后,我希望myuser
现在可以访问postgres
用户创建的功能和视图。但是,当我尝试使用myuser
访问它们时,我得到了“关系允许拒绝...”错误。这是为什么?
答案 0 :(得分:28)
原因是您需要其他权限才能访问视图或表。数据库上的权限不包括对其中所有对象的访问权限。
与功能不同:默认情况下,EXECUTE
权限授予public
。 但该功能以当前用户的权限执行。您可能对CREATE FUNCTION
的SECURITY DEFINER
修饰符感兴趣。但通常只需在相关表格上授予SELECT
即可。
Per documentation about default privileges:
根据对象的类型,初始默认权限可能 包括向
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语句...