如何将视图的所有权限授予任意用户

时间:2012-05-08 01:07:19

标签: sql database postgresql grant pgadmin

如何向所有用户授予对所有功能和视图的读/选访问权限?

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

GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;

获得所有权限后,我希望myuser现在可以访问postgres用户创建的功能和视图。但是,当我尝试使用myuser访问它们时,我得到了“关系允许拒绝...”错误。这是为什么?

1 个答案:

答案 0 :(得分:28)

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

与功能不同:默认情况下,EXECUTE权限授予public该功能以当前用户的权限执行。您可能对CREATE FUNCTIONSECURITY 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具有更复杂批量操作的功能:

enter image description here

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