使用login(user)创建PostgreSQL 9角色只是为了执行函数

时间:2012-10-03 15:54:29

标签: postgresql

我多年来一直在寻找这个,我在网上尝试了一切都没有成功。

我能够在MSSQL中完成它,但我没有找到在PostgreSQL中实现它的方法。

我想要实现的只是创建一个无法创建,删除或更改数据库,函数,表或任何其他内容的登录角色。只需选择特定功能即可。

例如,如果我有一个名为costumer的表和两个名为return_customers()return_time()的函数,我只想要一个能够选择return_customers()和{{1}的登录角色}。没有比这更好的了。

非常感谢您支持这个有用的网站!

1 个答案:

答案 0 :(得分:9)

执行此连接到您要配置的数据库。

-- Create the user.
CREATE ROLE somebody WITH LOGIN PASSWORD '...';

-- Prevent all authenticated users from being able to use the database,
-- unless they have been explicitly granted permission.
REVOKE ALL PRIVILEGES ON DATABASE foo FROM PUBLIC;
REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM PUBLIC;
REVOKE ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public FROM PUBLIC;
REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public FROM PUBLIC;

-- Allow the user to only use the specified functions.
GRANT CONNECT ON DATABASE foo TO somebody;
GRANT EXECUTE ON FUNCTION return_customers(), return_time() TO somebody;

如果您的模式多于“public”,那么您需要将这些模式添加到两个REVOKE ALL PRIVILEGES ON ALL ...语句中。

不要忘记函数必须是created with SECURITY DEFINER或者此用户仍然无法执行它们,因为函数的内容将使用此用户的权限执行,而不是创建的用户功能。

请参阅: