如何在 PostgreSQL 中默认撤销函数的执行权限
Posted
技术标签:
【中文标题】如何在 PostgreSQL 中默认撤销函数的执行权限【英文标题】:How to Revoke Execute Privileges on Functions in PostgreSQL by Default 【发布时间】:2016-10-27 21:59:03 【问题描述】:我正在尝试使用命令ALTER DEFAULT PRIVILEGES...
在 PostgreSQL 9.5.4 中设置默认权限。这在尝试授予权限时有效,但我不知道默认情况下如何撤销函数的执行权限。我试过了:
ALTER DEFAULT PRIVILEGES FOR USER myAdmin IN SCHEMA public
REVOKE EXECUTE ON FUNCTIONS FROM public;
这似乎对\ddp
的输出没有影响。有没有办法防止功能被所有者以外的用户执行,除非另有授权?谢谢。
【问题讨论】:
public
目前属于什么角色?
@Nicarus 我对 PostgreSQL 角色相当陌生,因此不明白你的问题。我尝试了相同的命令,但用特定用户名替换了最终的 public
标识符。这对\ddp
的输出也没有影响。
运行这个:SELECT * FROM pg_roles WHERE rolename = 'public';
你应该可以看到权限。以及该角色的角色。例如,角色是 superuser
,因此您更改 privs 不会产生影响。
@Nicarus 该选择语句(我必须将 rolename
更改为 rolname
)返回 0 行。据我了解,“public”是一个内置关键字,表示所有用户。这不正确吗?
奇怪...没有IN SCHEMA public
似乎也可以工作,虽然我不知道有什么区别...
【参考方案1】:
如果您指定IN SCHEMA
和ALTER DEFAULT PRIVILEGES
,您只能授予 权限,而不能撤销这些权限。
The documentation 说:
为每个模式指定的默认权限被添加到特定对象类型的全局默认权限中。
因此,您必须将命令更改为:
ALTER DEFAULT PRIVILEGES FOR USER myAdmin
REVOKE EXECUTE ON FUNCTIONS FROM public;
【讨论】:
以上是关于如何在 PostgreSQL 中默认撤销函数的执行权限的主要内容,如果未能解决你的问题,请参考以下文章