多年来我一直在寻找这个,我在网上尝试了一切都没有成功.
我能够在MSSQL中做到这一点,但我没有找到一种方法在PostgreSQL中做到这一点.
我想要实现的只是创建一个登录角色,无法创建,删除或更改数据库,函数,表或任何其他内容.只需选择特定功能.
例如,如果我有一个名为costumer的表和两个调用的函数return_customers(),return_time()我只想要一个能够选择return_customers()和登录的角色select return_time().没有比这更好的了.
非常感谢您支持这个有用的网站!
执行此连接到要配置的数据库.
-- 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或者此用户仍然无法执行它们,因为函数的内容将使用此用户的权限而不是创建该函数的用户执行.
看到:
CREATE FUNCTION 尤其 SECURITY DEFINERGRANT 用于向角色添加用户以及为表,序列等分配访问权限REVOKECREATE ROLE| 归档时间: |
|
| 查看次数: |
11017 次 |
| 最近记录: |