Quero saber como gerenciar privilégios de objetos em clusters de banco de dados da edição do Amazon Aurora compatível com PostgreSQL.
Resolução
Para gerenciar privilégios de objeto em clusters de banco de dados compatíveis com o PostgreSQL do Aurora, conceda aos usuários ou perfis permissões específicas para realizar várias ações em objetos de banco de dados.
Para obter mais informações sobre os tipos de permissões de banco de dados, consulte Privileges (Privilégios) no site do PostgreSQL.
Observação: a AWS usa o termo "permissão" como "privilégio".
Crie um usuário e conceda permissão de objeto ao usuário
Conclua as etapas a seguir:
- Conecte-se ao seu cluster compatível com PostgreSQL do Aurora com um cliente PostgreSQL, como psql.
- Para criar um usuário, execute o seguinte comando:
CREATE USER username WITH PASSWORD 'password';
Observação: substitua username e password pelo seu nome de usuário e sua senha.
- Para conceder permissão a um usuário ou perfil para realizar uma ação em um objeto, execute o seguinte comando:
GRANT privilege_type ON object_name TO user_or_role;
Observação: substitua privilege_type pela ação do banco de dados que você deseja que o usuário execute. Substitua object_name pelo objeto do banco de dados sobre o qual você deseja que o usuário aja. Substitua user_or_role pelo usuário ou perfil ao qual você deseja atribuir permissão de objeto.
Por exemplo, é possível executar o comando a seguir para conceder várias permissões de objeto para user_or_role:
GRANT SELECT, INSERT, UPDATE ON object_name TO user_or_role;
Para obter mais informações, consulte GRANT no site do PostgreSQL.
Revogue permissões de usuários e perfis
Para remover as permissões de um usuário ou perfil, execute o seguinte comando:
REVOKE privilege_type ON object_name FROM user_or_role;
Observação: substitua privilege_type pela ação do banco de dados que você deseja remover. Substitua object_name pelo objeto do banco de dados. Substitua user_or_role pelo usuário ou perfil do qual você deseja remover as permissões.
Para obter mais informações, consulte REVOKE no site do PostgreSQL.
Conceda permissões mínimas necessárias aos usuários
É uma prática recomendada conceder ao usuário ou perfil somente as permissões necessárias.
Para consultar as permissões que estão em uma tabela, execute o seguinte comando:
\z table_name
Observação: substitua table_name pelo nome da tabela que você deseja consultar.
Ou é possível executar o seguinte comando:
SELECT * FROM information_schema.table_privileges WHERE table_name = 'your_table';
Crie e atribua perfis para grupos de usuários
É uma prática recomendada criar perfis para grupos de usuários e atribuir permissões a perfis em vez de usuários individuais. Para obter mais informações, consulte Database roles for server administration (Perfis de banco de dados para administração de servidores) e Database roles (Perfis de banco de dados) no site do PostgreSQL.
Para criar um perfil e conceder a permissão ao perfil em todas as tabelas do seu banco de dados, execute o seguinte comando:
CREATE ROLE analyst_role;
GRANT SELECT ON ALL TABLES IN SCHEMA schema_name TO analyst_role;
Observação: substitua schema_name pelo nome do seu esquema e analyst_role pelo nome do seu perfil.
Conceda permissão em nível de esquema a usuários e perfis
Para conceder permissão em nível de esquema a um usuário ou perfil, execute o seguinte comando:
GRANT USAGE ON SCHEMA schema_name TO user_or_role;
Observação: substitua schema_name pelo nome do seu esquema e user_or_role pelo nome do seu usuário ou perfil.
Defina uma permissão padrão para objetos futuros
Para definir uma permissão padrão em novas tabelas para readonly _role, execute o seguinte comando:
ALTER DEFAULT PRIVILEGES IN SCHEMA schema_name GRANT SELECT ON TABLES TO readonly_role;
Observação: substitua schema_name pelo nome do seu esquema.
Transfira a propriedade do objeto entre usuários
Para evitar problemas de segurança, certifique-se de gerenciar a propriedade do objeto.
Para transferir a propriedade para um novo proprietário, execute o seguinte comando:
ALTER TABLE table_name OWNER TO new_owner;
Observação: substitua table_name pelo nome da tabela e new_owner pelo nome do novo proprietário.
Monitore as alterações de permissão com fluxos de atividades
Para monitorar a atividade do banco de dados, inicie um fluxo de atividade em seu cluster de banco de dados e use uma matriz JSON databaseActivityEventList. Para obter mais informações, consulte Objeto JSON databaseActivityEvents.
Agende revisões regulares de permissões
Agende revisões regulares de permissões e atualize as permissões com base nos requisitos atuais.
Por exemplo, é possível executar a consulta a seguir para ver todas as permissões que você concedeu em tabelas e visualizações:
-- 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';