- Client principals must have their
PostgreSQL> database user
- name as their first component, for example
- pgusername@realm>. Alternatively, you can use a user name
- mapping to map from the first component of the principal name to the
- database user name. By default, the realm of the client is
- not checked by
PostgreSQL>. If you have cross-realm
- authentication enabled and need to verify the realm, use the
- krb_realm> parameter, or enable include_realm>
- and use user name mapping to check the realm.
+ Client principals can be mapped to different
PostgreSQL>
+ database user names with pg_ident.conf>. For example,
+ pgusername@realm> could be mapped to just pgusername>.
+ Alternatively, you can use the full username@realm> principal as
+ the role name in
PostgreSQL> without any mapping.
+
+
+
PostgreSQL> also supports a parameter to strip the realm from
+ the principal. This method is supported for backwards compatibility and is
+ strongly discouraged as it is then impossible to distinguish different users
+ with the same username but coming from different realms. To enable this,
+ set include_realm> to 0. For simple single-realm
+ installations, include_realm> combined with the
+ krb_realm> parameter (which checks that the realm provided
+ matches exactly what is in the krb_realm parameter) would be a secure but
+ less capable option compared to specifying an explicit mapping in
+ pg_ident.conf>.
include_realm
- If set to 1, the realm name from the authenticated user
- principal is included in the system user name that's passed through
- user name mapping (). This is
- useful for handling users from multiple realms.
+ If set to 0, the realm name from the authenticated user principal is
+ stripped off before being passed through the user name mapping
+ (). This is discouraged and is
+ primairly available for backwards compatibility as it is not secure
+ in multi-realm environments unless krb_realm is also used. Users
+ are recommended to leave include_realm set to the default (1) and to
+ provide an explicit mapping in pg_ident.conf>.
Allows for mapping between system and database user names. See
- for details. For a Kerberos
- user name used for mapping is username/hostbased
- if include_realm is disabled, and
- include_realm is enabled.
+ for details. For a GSSAPI/Kerberos
+ user name used for mapping is
+ unless include_realm has been set to 0, in which case
+ username (or username/hostbased)
+ is what is seen as the system username when mapping.
include_realm
- If set to 1, the realm name from the authenticated user
- principal is included in the system user name that's passed through
- user name mapping (). This is
- useful for handling users from multiple realms.
+ If set to 0, the realm name from the authenticated user principal is
+ stripped off before being passed through the user name mapping
+ (). This is discouraged and is
+ primairly available for backwards compatibility as it is not secure
+ in multi-realm environments unless krb_realm is also used. Users
+ are recommended to leave include_realm set to the default (1) and to
+ provide an explicit mapping in pg_ident.conf>.
Allows for mapping between system and database user names. See
- for details.
+ for details. For a SSPI/Kerberos
+ user name used for mapping is
+ unless include_realm has been set to 0, in which case
+ username (or username/hostbased)
+ is what is seen as the system username when mapping.
hbaline->ldapscope = LDAP_SCOPE_SUBTREE;
#endif
+ /*
+ * For GSS and SSPI, set the default value of include_realm to true.
+ * Having include_realm set to false is dangerous in multi-realm
+ * situations and is generally considered bad practice. We keep the
+ * capability around for backwards compatibility, but we might want to
+ * remove it at some point in the future. Users who still need to strip
+ * the realm off would be better served by using an appropriate regex in
+ * a pg_ident.conf mapping.
+ */
+ if (hbaline->auth_method == uaGSS ||
+ hbaline->auth_method == uaSSPI)
+ hbaline->include_realm = true;
+
if (strcmp(name, "map") == 0)
{
if (hbaline->auth_method != uaIdent &&