Configuring Client Authentication
When a Greenplum Database system is first initialized, the system contains one predefined superuser role. This role will have the same name as the operating system user who initialized the Greenplum Database system. This role is referred to as . By default, the system is configured to only allow local connections to the database from the gpadmin
role. If you want to allow any other roles to connect, or if you want to allow connections from remote hosts, you have to configure Greenplum Database to allow such connections. This section explains how to configure client connections and authentication to Greenplum Database.
- Using LDAP Authentication with TLS/SSL
You can control access to Greenplum Database with an LDAP server and, optionally, secure the connection with encryption by adding parameters to pg_hba.conf file entries.
You can control access to Greenplum Database with a Kerberos authentication server.- Configuring Kerberos for Linux Clients
You can configure Linux client applications to connect to a Greenplum Database system that is configured to authenticate with Kerberos.
You can configure Microsoft Windows client applications to connect to a Greenplum Database system that is configured to authenticate with Kerberos.
Parent topic: Managing Greenplum Database Access
Client access and authentication is controlled by the standard PostgreSQL host-based authentication file, pg_hba.conf. For detailed information about this file, see The pg_hba.conf File in the PostgreSQL documentation.
In Greenplum Database, the pg_hba.conf file of the master instance controls client access and authentication to your Greenplum Database system. The Greenplum Database segments also have pg_hba.conf files, but these are already correctly configured to allow only client connections from the master host. The segments never accept outside client connections, so there is no need to alter the pg_hba.conf
file on segments.
The general format of the pg_hba.conf file is a set of records, one per line. Greenplum Database ignores blank lines and any text after the #
comment character. A record consists of a number of fields that are separated by spaces or tabs. Fields can contain white space if the field value is quoted. Records cannot be continued across lines. Each remote client access record has the following format:
Each UNIX-domain socket access record is in this format:
local database role authentication-method
The following table describes meaning of each field.
CAUTION:
For a more secure system, consider removing records for remote connections that use trust authentication from the pg_hba.conf
file. Trust authentication grants any user who can connect to the server access to the database using any role they specify. You can safely replace trust authentication with ident authentication for local UNIX-socket connections. You can also use ident authentication for local and remote TCP clients, but the client host must be running an ident service and you must trust the integrity of that machine.
Initially, the file is set up with generous permissions for the gpadmin user and no database access for other Greenplum Database roles. You will need to edit the pg_hba.conf
file to enable users’ access to databases and to secure the gpadmin user. Consider removing entries that have trust authentication, since they allow anyone with access to the server to connect with any role they choose. For local (UNIX socket) connections, use ident authentication, which requires the operating system user to match the role specified. For local and remote TCP connections, ident authentication requires the client’s host to run an indent service. You can install an ident service on the master host and then use ident authentication for local TCP connections, for example 127.0.0.1/28
. Using ident authentication for remote TCP connections is less secure because it requires you to trust the integrity of the ident service on the client’s host.
This example shows how to edit the pg_hba.conf file of the master to allow remote client access to all databases from all roles using encrypted password authentication.
Editing pg_hba.conf
Open the file $MASTER_DATA_DIRECTORY/pg_hba.conf in a text editor.
Add a line to the file for each type of connection you want to allow. Records are read sequentially, so the order of the records is significant. Typically, earlier records will have tight connection match parameters and weaker authentication methods, while later records will have looser match parameters and stronger authentication methods. For example:
# allow the gpadmin user local access to all databases
# using ident authentication
local all gpadmin ident sameuser
host all gpadmin ::1/128 ident
# allow the 'dba' role access to any database from any
# host with IP address 192.168.x.x and use md5 encrypted
# passwords to authenticate the user
# Note that to use SHA-256 encryption, replace <md5> with
# password in the line below
host all dba 192.168.0.0/32 md5
# allow all roles access to any database from any
# host and use ldap to authenticate the user. Greenplum role
# names must match the LDAP common name.
host all all 192.168.0.0/32 ldap ldapserver=usldap1 ldapport=1389 ldapprefix="cn=" ldapsuffix=",ou=People,dc=company,dc=com"
Save and close the file.
Reload the pg_hba.conf configuration file for your changes to take effect:
$ gpstop -u
Greenplum Database allocates some resources on a per-connection basis, so setting the maximum number of connections allowed is recommended.
To limit the number of active concurrent sessions to your Greenplum Database system, you can configure the max_connections
server configuration parameter. This is a local parameter, meaning that you must set it in the postgresql.conf
file of the master, the standby master, and each segment instance (primary and mirror). The recommended value of max_connections
on segments is 5-10 times the value on the master.
When you set max_connections
, you must also set the dependent parameter max_prepared_transactions
. This value must be at least as large as the value of max_connections
on the master, and segment instances should be set to the same value as the master.
For example:
In
$MASTER_DATA_DIRECTORY/postgresql.conf
(including standby master):max_connections=100
max_prepared_transactions=100
The following steps set the parameter values with the Greenplum Database utility gpconfig
.
For information about gpconfig
, see the Greenplum Database Utility Guide.
Log into the Greenplum Database master host as the Greenplum Database administrator and source the file
$GPHOME/greenplum_path.sh
.Set the value of the
max_connections
parameter. Thisgpconfig
command sets the value on the segments to 1000 and the value on the master to 200.$ gpconfig -c max_connections -v 1000 -m 200
The value on the segments must be greater than the value on the master. The recommended value of
max_connections
on segments is 5-10 times the value on the master.Set the value of the
max_prepared_transactions
parameter. Thisgpconfig
command sets the value to 200 on the master and all segments.$ gpconfig -c max_prepared_transactions -v 200
The value of
max_prepared_transactions
must be greater than or equal tomax_connections
on the master.Stop and restart your Greenplum Database system.
$ gpstop -r
You can check the value of parameters on the master and segments with the
gpconfig
-s
option. Thisgpconfig
command displays the values of themax_connections
parameter.$ gpconfig -s max_connections
Enable SSL for client connections to Greenplum Database to encrypt the data passed over the network between the client and the database.
Greenplum Database has native support for SSL connections between the client and the master server. SSL connections prevent third parties from snooping on the packets, and also prevent man-in-the-middle attacks. SSL should be used whenever the client connection goes through an insecure link, and must be used whenever client certificate authentication is used.
Enabling Greenplum Database in SSL mode requires the following items.
OpenSSL installed on both the client and the master server hosts (master and standby master).
The SSL files server.key (server private key) and server.crt (server certificate) should be correctly generated for the master host and standby master host.
- The private key should not be protected with a passphrase. The server does not prompt for a passphrase for the private key, and Greenplum Database start up fails with an error if one is required.
- On a production system, there should be a key and certificate pair for the master host and a pair for the standby master host with a subject CN (Common Name) for the master host and standby master host. A self-signed certificate can be used for testing, but a certificate signed by a certificate authority (CA) should be used in production, so the client can verify the identity of the server. Either a global or local CA can be used. If all the clients are local to the organization, a local CA is recommended.
The server.key and server.crt have been added to the master data directory on both the master host and standby master host. When starting in SSL mode, the Greenplum Database master looks for server.key and server.crt. Greenplum Database does not start if the files are not in the master data directory of both the master host and standby master host.
Also, if you use other SSL authentication files such as
root.crt
(trusted certificate authorities), the files must be on both the master host and standby master host.
Greenplum Database can be started with SSL enabled by setting the server configuration parameter ssl=on
in the postgresql.conf
file on the master and standby master hosts. This gpconfig
command sets the parameter:
Setting the parameter requires a server restart. This command restarts the system: gpstop -ra -M fast
.
To create a quick self-signed certificate for the server for testing, use the following OpenSSL command:
# openssl req -new -text -out server.req
Enter the information requested by the prompts. Be sure to enter the local host name as Common Name. The challenge password can be left blank.
The program will generate a key that is passphrase protected, and does not accept a passphrase that is less than four characters long.
To use this certificate with Greenplum Database, remove the passphrase with the following commands:
# openssl rsa -in privkey.pem -out server.key
# rm privkey.pem
Enter the old passphrase when prompted to unlock the existing key.
Then, enter the following command to turn the certificate into a self-signed certificate and to copy the key and certificate to a location where the server will look for them.
# chmod og-rwx server.key
For more details on how to create your server private key and certificate, refer to the .