我是 PostgreSQL 的新手,正在配置一个新的数据库。
我写了几个间接访问(读/写)数据的函数,我想禁止所有对表的直接访问。
GRANT CONNECT ON DATABASE db1 TO role1;
GRANT USAGE ON SCHEMA schema1 TO role1;
REVOKE ALL ON table1 FROM role1;
GRANT ALL ON ALL FUNCTIONS IN SCHEMA schema1 TO role1;
如果我不撤销表权限,将允许直接访问表。如果我 REVOKE 表权限和 GRANT 函数,用户访问函数但看到表访问限制错误。
psql:./test1.psql:6: ERROR: permission denied for relation table1
如何让用户role1
只能使用函数访问数据,同时不允许所有直接访问表?我想我错过了一些东西,但我无法弄清楚。
PS 我正在使用 Postgres 9.2.x。
您想要创建您的功能并
SECURITY DEFINER
让它们由具有必要权限的用户拥有。SECURITY DEFINER
编码函数时要非常小心。不要让它们归超级用户所有,并仔细阅读手册。创建一个只有所需权限而没有更多权限的角色;给它SECURITY DEFINER
功能的所有权。在适当的情况下为不同的访问级别创建多个角色。见
CREATE FUNCTION
。