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

Sql 我是否可以在postgres中创建组/用户角色,以便它只能执行预定义的功能?,sql,security,postgresql,grant,Sql,Security,Postgresql,Grant,我想创建一个数据库用户,它将使用我预定义的函数(login(pass,login)、get_users(get_用户)_you_主管(login,pass)等) 因为这应该对任何人开放,所以我想创建一个db用户/组角色,该角色只允许该用户执行我的预定义功能 问题是这些函数使用SELECT、UPDATE和INSERT。当我只授予执行函数的权限时,它们会抛出错误,它们没有这样做的权限 有什么想法吗?(也许我可以静态地更改函数中的角色?) //回答一些评论 对第1条评论:好的,我会看看它,如果它能帮助

我想创建一个数据库用户,它将使用我预定义的函数(login(pass,login)、get_users(get_用户)_you_主管(login,pass)等)

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

问题是这些函数使用SELECT、UPDATE和INSERT。当我只授予执行函数的权限时,它们会抛出错误,它们没有这样做的权限

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

//回答一些评论 对第1条评论:好的,我会看看它,如果它能帮助我,我会回复。谢谢好的,谢谢你的回答,这正是我需要的。感谢用户“plundra”

第2条评论: 我已经有一个表或用户(及其登录名)。但是如果我做了一个函数checkLogin(name,pass),该函数需要从表users中进行选择。如果我不给用户选择的权利,它就不起作用。如果我授予了权限,那么用户只需从用户中选择*;看看密码是什么


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

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

相反,存储salt和密码散列(两个文本字段)

创建新用户时,您可以随机创建salt,将其所选密码散列,然后存储散列

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

虽然概念上很简单,但细节可能会让你难以接受,因此值得使用。

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


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

查看“安全定义器”,考虑从PostgreSQL的用户概念中分离您域中的用户。(例如,创建一个
users
表,让应用程序首先使用该表进行身份验证。所有PostgreSQL会话都将使用单个PostgreSQL用户进行连接。)好的,这听起来是管理身份验证的好方法。我将添加salt,以使密码更加安全,但我的问题是,我的数据库的弱势用户无法执行函数,而这些函数使用了用户无法使用的某些东西。第一条评论正是我想要的。尽管如此,我还是非常感谢你的帮助。