Control del acceso de los usuarios a la base de datos de PostgreSQL
Las nuevas bases de datos de PostgreSQL siempre se crean con un conjunto predeterminado de privilegios en el esquema public
de la base de datos que permite a todos los usuarios y roles de la base de datos crear objetos. Estos privilegios permiten a los usuarios de la base de datos conectarse a la base de datos, or ejemplo, y crear tablas temporales mientras están conectados.
Para controlar mejor el acceso de los usuarios a las instancias de bases de datos que cree en su instancia de base de datos de RDS for PostgreSQL, le recomendamos que revoque estos privilegios de public
predeterminados. Después de ello, conceda a continuación los privilegios específicos a los usuarios de base de datos de forma más detallada, como se muestra en el siguiente procedimiento.
Para configurar roles y privilegios para una nueva instancia de base de datos
Supongamos que está configurando una base de datos en Instancia de base de datos de RDS for PostgreSQL de reciente creación para que lo utilicen varios investigadores, todos los cuales necesitan acceso de lectura y escritura a la base de datos.
Use
psql
(o pgAdmin) para conectarse a su instancia de base de datos de RDS for PostgreSQL:psql --host=
your-db-instance.666666666666
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres --passwordEscriba la contraseña cuando se le solicite. El cliente
psql
se conecta y muestra la base de datos de conexión administrativa predeterminada,postgres=>
, como el símbolo del sistema.Para evitar que los usuarios de la base de datos creen objetos en el esquema
public
, realice una de las siguientes opciones:postgres=>
REVOKE CREATE ON SCHEMA public FROM PUBLIC;
REVOKE
A continuación, cree una nueva instancia de base de datos:
postgres=>
CREATE DATABASE
lab_db
;CREATE DATABASE
Revoque todos los privilegios del esquema
PUBLIC
de esta nueva base de datos.postgres=>
REVOKE ALL ON DATABASE
lab_db
FROM public;REVOKE
Cree un rol para los usuarios de bases de datos.
postgres=>
CREATE ROLE
lab_tech
;CREATE ROLE
Otorgue a los usuarios de bases de datos que tengan este rol la posibilidad de conectarse a la base de datos.
postgres=>
GRANT CONNECT ON DATABASE
lab_db
TOlab_tech
;GRANT
Conceda a todos los usuarios que tengan el rol
lab_tech
todos los privilegios de esta base de datos.postgres=>
GRANT ALL PRIVILEGES ON DATABASE
lab_db
TOlab_tech
;GRANT
Cree usuarios de bases de datos de la siguiente manera:
postgres=>
CREATE ROLE lab_user1 LOGIN PASSWORD 'change_me';
CREATE ROLE
postgres=>
CREATE ROLE lab_user2 LOGIN PASSWORD 'change_me';
CREATE ROLE
-
Conceda a estos dos usuarios los privilegios asociados al rol lab_tech:
postgres=>
GRANT lab_tech TO lab_user1;
GRANT ROLE
postgres=>
GRANT lab_tech TO lab_user2;
GRANT ROLE
En este punto,lab_user1
y lab_user2
se pueden conectar a la base de datos de lab_db
. En este ejemplo no se siguen las prácticas recomendadas para el uso empresarial, que pueden incluir la creación de varias instancias de base de datos, distintos esquemas y la concesión de permisos limitados. Para obtener más información y escenarios adicionales, consulte Administración de usuarios y roles de PostgreSQL
Para obtener más información sobre los privilegios en las bases de datos de PostgreSQL, consulte el comando GRANT