Saltar al contenido

¿Cómo administro los privilegios de objetos en mi clúster de base de datos compatible con Aurora PostgreSQL?

5 minutos de lectura
0

Quiero saber cómo administrar los privilegios de objetos en los clústeres de bases de datos (DB) de la edición compatible con Amazon Aurora PostgreSQL.

Resolución

Para administrar los privilegios de objetos en clústeres de bases de datos compatibles con Aurora PostgreSQL, concede a los usuarios o roles permisos específicos para realizar diversas acciones en los objetos de la base de datos.

Para obtener más información sobre los tipos de permisos de bases de datos, consulta Privilegios en el sitio web de PostgreSQL.

Nota: AWS utiliza el término «permiso» para referirse a «privilegio». 

Creación de un usuario y concesión de permisos de objeto al usuario

Sigue estos pasos:

  1. Conéctate a tu clúster compatible con Aurora PostgreSQL con un cliente de PostgreSQL, como psql.
  2. Para crear un usuario, ejecuta el siguiente comando:
    CREATE USER username WITH PASSWORD 'password';
    Nota: Sustituye username y password por tu nombre de usuario y contraseña.
  3. Para conceder permiso a un usuario o rol para realizar una acción en un objeto, ejecuta el siguiente comando:
    GRANT privilege_type ON object_name TO user_or_role;
    Nota: Sustituye privilege_type por la acción de base de datos que quieras que realice el usuario. Sustituye object_name por el objeto de base de datos sobre el que quieres que el usuario realice una acción. Sustituye user_or_role por el usuario o rol al que deseas asignar el permiso de objeto.

Por ejemplo, puedes ejecutar el siguiente comando para conceder varios permisos de objeto a user_or_role:

GRANT SELECT, INSERT, UPDATE ON object_name TO user_or_role;

Para obtener más información, consulta GRANT en el sitio web de PostgreSQL.

Revocación de los permisos de los usuarios y los roles

Para eliminar los permisos de un usuario o rol, ejecuta el siguiente comando:

REVOKE privilege_type ON object_name FROM user_or_role;

Nota: Sustituye privilege_type por la acción de base de datos que deseas eliminar. Sustituye object_name por el objeto de la base de datos. Sustituye user_or_role por el usuario o rol del que deseas eliminar los permisos.

Para obtener más información, consulta REVOKE en el sitio web de PostgreSQL.

Concesión de los permisos mínimos requeridos a los usuarios

Se recomienda conceder al usuario o rol solo los permisos necesarios.

Para revisar los permisos que hay en una tabla, ejecuta el siguiente comando:

\z table_name

Nota: Sustituye table_name por el nombre de la tabla que deseas revisar.

O bien, puedes ejecutar el siguiente comando:

SELECT * FROM information_schema.table_privileges WHERE table_name = 'your_table';

Creación y asignación de roles para grupos de usuarios

Se recomienda crear roles para grupos de usuarios y asignar permisos a los roles en lugar de a los usuarios individuales. Para obtener más información, consulta Database roles for server administration (Roles de base de datos para la administración del servidor) y Database roles (Roles de base de datos) en el sitio web de PostgreSQL.

Para crear un rol y concederle permiso en todas las tablas de la base de datos, ejecuta el siguiente comando:

CREATE ROLE analyst_role;
GRANT SELECT ON ALL TABLES IN SCHEMA schema_name TO analyst_role;

Nota: Sustituye schema_name por el nombre de tu esquema y analyst_role por el nombre de tu rol.

Concesión permisos a nivel de esquema a usuarios y roles

Para conceder un permiso a un usuario o rol a nivel de esquema, ejecuta el siguiente comando:

GRANT USAGE ON SCHEMA schema_name TO user_or_role;

Nota: Sustituye schema_name por el nombre de tu esquema y user_or_role por el nombre de tu usuario o rol.

Establecimiento de un permiso predeterminado para objetos futuros

Para establecer un permiso predeterminado en las tablas nuevas para readonly _role, ejecuta el siguiente comando:

ALTER DEFAULT PRIVILEGES IN SCHEMA schema_name GRANT SELECT ON TABLES TO readonly_role;

Nota: Sustituye schema_name por el nombre de tu esquema.

Transferencia de la propiedad de los objetos entre usuarios

Para evitar problemas de seguridad, asegúrate de administrar la propiedad de los objetos.

Para transferir la propiedad a un nuevo propietario, ejecuta el siguiente comando:

ALTER TABLE table_name OWNER TO new_owner;

Nota: Sustituye table_name por el nombre de la tabla y new_owner por el nombre del nuevo propietario.

Supervisión de los cambios de permisos con flujos de actividad

Para supervisar la actividad de la base de datos, inicia un flujo de actividades para tu clúster de base de datos y usa una matriz JSON databaseActivityEventList. Para obtener más información, consulta Objeto JSON databaseActivityEvents.

Programación de revisiones periódicas de permisos

Programa revisiones periódicas de permisos y actualiza los permisos en función de los requisitos actuales.

Por ejemplo, puedes ejecutar la siguiente consulta para ver todos los permisos que has otorgado en tablas y vistas:

-- To view table and view privileges
SELECT
    grantee,
    table_schema,
    table_name,
    privilege_type
FROM
    information_schema.role_table_grants
ORDER BY
    grantee, table_schema, table_name, privilege_type;
-- List schema privileges
SELECT nspname, rolname, nspacl FROM pg_namespace n JOIN pg_roles r ON r.oid = n.nspowner;
-- Show all privileges for a specific role
SELECT table_catalog, table_schema, table_name, privilege_typeFROM information_schema.table_privilegesWHERE grantee = 'role_name';
-- Show role-specific schema privileges
SELECT n.nspname as schema_name,
       r.rolname as role_name,
       has_schema_privilege(r.oid, n.oid, 'CREATE') as has_create,
       has_schema_privilege(r.oid, n.oid, 'USAGE') as has_usageFROM pg_namespace nCROSS JOIN pg_roles rWHERE n.nspname NOT LIKE 'pg_%'
AND n.nspname != 'information_schema';
OFICIAL DE AWSActualizada hace 6 meses