我可以在postgres中创建一个组/用户角色,以便它只能执行预定义的功能吗?

时间:2010-11-09 22:43:59

标签: sql security postgresql grant

我想创建一个数据库用户,它将使用我的预定义函数(登录(传递,登录),get_users_you_are_in_charge_off(登录,传递)等。)。

因为这应该对任何人开放,我想创建一个db用户/组角色,只允许该用户执行我的预定义函数。

问题是这些函数使用SELECT,UPDATE,INSERT。当我只给予执行函数的权限时,他们会抛出错误,他们没有做到这一点。

有什么想法吗? (也许我可以静态地改变函数内部的角色?)

//回答一些评论 第1条评论:好的,我会看一下并回复它是否可以帮助我。谢谢。好的,谢谢你的回答,这正是我需要的。感谢用户“plundra”!

至第2评论: 我已经有一个表或用户(带登录)。但是如果我创建一个函数checkLogin(name,pass),那个函数需要从表用户中选择。如果我没有让用户做SELECTS的权利,它就不起作用。如果我确实给了权限,那么用户可以从用户那里做SELECT *;并查看密码是什么。

好的,感谢您的回答,第一条评论正是我需要的。感谢用户“plundra”!

2 个答案:

答案 0 :(得分:1)

答案是,不要在数据库中存储密码。

相反,存储salt和密码哈希值(两个文本字段)。

创建新用户时,您可以随机创建salt,使用该哈希值对所选密码进行哈希处理,然后存储哈希值。

要对某人进行身份验证,请输入他们输入的密码,存储在其用户记录中的salt,通过哈希算法(SHA1等)运行它们,并将其与存储的哈希值进行比较。

虽然概念很简单,但细节可能会让你感到厌烦,因此值得使用someone else's code

答案 1 :(得分:0)

在postgresql.org/docs/current/static/sql-createfunction.html查看“安全定义” - plundra

用户plundra回答。这就是我需要的,谢谢:)。