6

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

我可以在 MSSQL 中做到这一点,但我没有找到在 PostgreSQL 中做到这一点的方法。

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

例如,如果我有一个名为 customerer 的表和两个名为的函数return_customers(),而return_time()我只想要一个能够选择return_customers()和登录的角色select return_time()。仅此而已。

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

4

1 回答 1

11

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

-- 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;

如果您有比“公共”更多的模式,那么您需要将它们添加到两个REVOKE ALL PRIVILEGES ON ALL ...语句中。

不要忘记函数必须是用这个用户创建的,SECURITY DEFINER否则这个用户仍然无法执行它们,因为函数的内容将以这个用户的权限执行,而不是创建函数的用户。

看:

于 2012-10-03T16:06:10.893 回答