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

Ign*_*cio 5 postgresql

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

我能够在MSSQL中做到这一点,但我没有找到一种方法在PostgreSQL中做到这一点.

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

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

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

cdh*_*wie 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;
Run Code Online (Sandbox Code Playgroud)

如果你有比"public"更多的模式,那么你需要将它们添加到这两个REVOKE ALL PRIVILEGES ON ALL ...语句中.

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

看到: