mirror of
https://github.com/postgres/postgres.git
synced 2025-07-30 11:03:19 +03:00
Add new GUC createrole_self_grant.
Can be set to the empty string, or to either or both of "set" or "inherit". If set to a non-empty value, a non-superuser who creates a role (necessarily by relying up the CREATEROLE privilege) will grant that role back to themselves with the specified options. This isn't a security feature, because the grant that this feature triggers can also be performed explicitly. Instead, it's a user experience feature. A superuser would necessarily inherit the privileges of any created role and be able to access all such roles via SET ROLE; with this patch, you can configure createrole_self_grant = 'set, inherit' to provide a similar experience for a user who has CREATEROLE but not SUPERUSER. Discussion: https://postgr.es/m/CA+TgmobN59ct+Emmz6ig1Nua2Q-_o=r6DSD98KfU53kctq_kQw@mail.gmail.com
This commit is contained in:
@ -9447,6 +9447,39 @@ SET XML OPTION { DOCUMENT | CONTENT };
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry id="guc-createrole-self-grant" xreflabel="createrole_self_grant">
|
||||
<term><varname>createrole_self_grant</varname> (<type>string</type>)
|
||||
<indexterm>
|
||||
<primary><varname>createrole_self_grant</varname></primary>
|
||||
<secondary>configuration parameter</secondary>
|
||||
</indexterm>
|
||||
</term>
|
||||
<listitem>
|
||||
<para>
|
||||
If a user who has <literal>CREATEROLE</literal> but not
|
||||
<literal>SUPERUSER</literal> creates a role, and if this
|
||||
is set to a non-empty value, the newly-created role will be granted
|
||||
to the creating user with the options specified. The value must be
|
||||
<literal>set</literal>, <literal>inherit</literal>, or a
|
||||
comma-separated list of these.
|
||||
</para>
|
||||
<para>
|
||||
The purpose of this option is to allow a <literal>CREATEROLE</literal>
|
||||
user who is not a superuser to automatically inherit, or automatically
|
||||
gain the ability to <literal>SET ROLE</literal> to, any created users.
|
||||
Since a <literal>CREATEROLE</literal> user is always implicitly granted
|
||||
<literal>ADMIN OPTION</literal> on created roles, that user could
|
||||
always execute a <literal>GRANT</literal> statement that would achieve
|
||||
the same effect as this setting. However, it can be convenient for
|
||||
usability reasons if the grant happens automatically. A superuser
|
||||
automatically inherits the privileges of every role and can always
|
||||
<literal>SET ROLE</literal> to any role, and this setting can be used
|
||||
to produce a similar behavior for <literal>CREATEROLE</literal> users
|
||||
for users which they create.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
</sect2>
|
||||
<sect2 id="runtime-config-client-format">
|
||||
|
@ -506,6 +506,7 @@ CREATE ROLE <replaceable class="parameter">name</replaceable> [ WITH ADMIN <repl
|
||||
<member><xref linkend="sql-grant"/></member>
|
||||
<member><xref linkend="sql-revoke"/></member>
|
||||
<member><xref linkend="app-createuser"/></member>
|
||||
<member><xref linkend="guc-createrole-self-grant"/></member>
|
||||
</simplelist>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
@ -555,6 +555,7 @@ PostgreSQL documentation
|
||||
<simplelist type="inline">
|
||||
<member><xref linkend="app-dropuser"/></member>
|
||||
<member><xref linkend="sql-createrole"/></member>
|
||||
<member><xref linkend="guc-createrole-self-grant"/></member>
|
||||
</simplelist>
|
||||
</refsect1>
|
||||
|
||||
|
Reference in New Issue
Block a user