Considerações
Veja as seguintes considerações para trabalhar com políticas de RLS:
O Amazon Redshift aplica políticas de RLS às instruções SELECT, UPDATE e DELETE.
O Amazon Redshift não aplica políticas de RLS a instruções INSERT, COPY e ALTER TABLE APPEND.
-
As políticas de RLS podem ser anexadas a tabelas, visualizações, visualizações de vinculação tardia (LBVs) e visões materializadas (MVs).
A segurança no nível da linha trabalha com a segurança no nível da coluna para proteger seus dados.
Quando o RLS é ativado para a relação de origem, o Amazon Redshift oferece suporte à instrução ALTER TABLE APPEND para superusuários, usuários que receberam explicitamente a permissão de sistema IGNORE RLS ou o perfil sys:secadmin. Nesse caso, é possível executar a instrução ALTER TABLE APPEND para acrescentar linhas a uma tabela de destino movendo dados de uma tabela de origem existente. O Amazon Redshift move todas as tuplas da relação de origem para a relação de destino. O status RLS da relação de destino não afeta a instrução ALTER TABLE APPEND.
Para facilitar a migração de outros sistemas de data warehouse, é possível definir e recuperar variáveis de contexto de sessão personalizadas para uma conexão especificando o nome e o valor da variável.
O exemplo a seguir define variáveis de contexto de sessão para uma política de segurança no nível da linha (RLS).
-- Set a customized context variable. SELECT set_config(‘app.category’, ‘Concerts’, FALSE); -- Create a RLS policy using current_setting() to get the value of a customized context variable. CREATE RLS POLICY policy_categories WITH (catgroup VARCHAR(10)) USING (catgroup = current_setting('app.category', FALSE)); -- Set correct roles and attach the policy on the target table to one or more roles. ATTACH RLS POLICY policy_categories ON tickit_category_redshift TO ROLE analyst, ROLE dbadmin;
Para obter detalhes sobre como definir e recuperar variáveis de contexto de sessão personalizadas, acesse SET, SET_CONFIG, SHOW, CURRENT_SETTING e RESET. Para obter mais informações sobre como modificar a configuração do servidor em geral, acesse Modificar a configuração do servidor.
Importante
Quando são usadas variáveis de contexto de sessão em políticas de RLS, a política de segurança depende do usuário ou da função que invoca a política. Tenha cuidado para evitar vulnerabilidades de segurança ao usar variáveis de contexto de sessão em políticas de RLS.
Alterar o usuário da sessão usando SET SESSION AUTHORIZATION entre DECLARE e FETCH, ou entre instruções FETCH subsequentes, não atualizará o plano já preparado com base nas políticas do usuário no momento de DECLARE. Evite alterar o usuário da sessão quando os cursores são usados com tabelas protegidas por RLS.
Quando os objetos de base dentro de um objeto de visualização são protegidos por RLS, as políticas anexadas ao usuário que executa a consulta são aplicadas nos respectivos objetos de base. Isso é diferente das verificações de permissão por objeto, onde as permissões do proprietário da visualização são comparadas com os objetos de base da visualização. Você pode visualizar as relações protegidas por RLS de uma consulta na saída do plano EXPLAIN.
Quando uma função definida pelo usuário (UDF) é mencionada em uma política de RLS de uma relação anexada a um usuário, o usuário deve ter a permissão EXECUTE sobre a UDF para consultar a relação.
A segurança no nível da linha pode limitar a otimização de consultas. É recomendável avaliar cuidadosamente o desempenho da consulta antes de implantar exibições protegidas por RLS em conjuntos de dados grandes.
As políticas de segurança no nível da linha aplicadas às exibições de vinculação tardia podem ser inseridas em tabelas federadas. Essas políticas RLS podem estar visíveis em logs do mecanismo de processamento externos.
Limitações
Veja a seguir as limitações ao trabalhar com políticas de RLS:
-
Não é possível anexar políticas de RLS a tabelas externas e a vários outros tipos de relação. Para obter mais informações, consulte ATTACH RLS POLICY.
-
O Amazon Redshift é compatível com a instruções SELECT para determinadas políticas de RLS com pesquisas que têm junções complexas, mas não são compatíveis com instruções UPDATE ou DELETE. Nos casos com instruções UPDATE ou DELETE, o Amazon Redshift retorna o seguinte erro:
ERROR: One of the RLS policies on target relation is not supported in UPDATE/DELETE.
-
Sempre que uma função definida pelo usuário (UDF) é mencionada em uma política de RLS de uma relação anexada a um usuário, o usuário deve ter a permissão EXECUTE sobre a UDF para consultar a relação.
Subconsultas correlacionadas não são compatíveis. O Amazon Redshift retorna o erro a seguir:
ERROR: RLS policy could not be rewritten.
O Amazon Redshift não oferece suporte ao compartilhamento de dados com RLS. Se uma relação não tiver o RLS desativado para unidades de compartilhamento de dados, a consulta falhará no cluster de consumidores com o seguinte erro:
RLS-protected relation "rls_protected_table" cannot be accessed via datasharing query.
É possível desativar o RLS para unidades de compartilhamento de dados usando o comando ALTER TABLE com o parâmetro ROW LEVEL SECURITY OFF FOR DATASHARES. Consulte mais informações sobre como usar ALTER TABLE para habilitar ou desabilitar o RLS em ALTER TABLE.
Em consultas entre bancos de dados, o Amazon Redshift bloqueia as leituras de relações protegidas por RLS. Usuários com a permissão IGNORE RLS podem acessar a relação protegida usando consultas entre bancos de dados. Quando um usuário sem a permissão IGNORE RLS acessa uma relação protegida por RLS por meio de uma consulta entre bancos de dados, o seguinte erro é exibido:
RLS-protected relation "rls_protected_table" cannot be accessed via cross-database query.
ALTER RLS POLICY só comporta a modificação de uma política de RLS por meio da cláusula USING ( using_predicate_exp ). Não é possível modificar uma política de RLS com uma cláusula WITH ao executar ALTER RLS POLICY.
-
Você não poderá consultar relações que tenham a segurança por linha ativada se os valores de qualquer uma das opções de configuração abaixo não corresponderem ao valor padrão da sessão:
enable_case_sensitive_super_attribute
enable_case_sensitive_identifier
downcase_delimited_identifier
Considere redefinir as opções de configuração da sessão se você tentar consultar uma relação com a segurança por linha ativada e vir a mensagem “RLS protected relation does not support session level config on case sensitivity being different from its default value”.
Quando o cluster provisionado ou namespace sem servidor tem alguma política de segurança por linha, os seguintes comandos são bloqueados para usuários comuns:
ALTER <current_user> SET enable_case_sensitive_super_attribute/enable_case_sensitive_identifier/downcase_delimited_identifier
Ao criar políticas de RLS, recomendamos que você altere as definições de opções da configuração padrão para usuários comuns a fim de que correspondam às definições de opções da configuração da sessão no momento em que a política foi criada. Superusuários e usuários com o privilégio ALTER USER podem fazer isso usando as configurações do grupo de parâmetros ou o comando ALTER USER. Para obter informações sobre grupos de parâmetros, consulte Amazon Redshift parameter groups no Guia de gerenciamento do Amazon Redshift. Para obter mais informações sobre o comando ALTER USER, consulte ALTER USER.
-
As exibições e as exibições de vinculação tardia com políticas de segurança no nível da linha não podem ser substituídas por usuários regulares usando o comando CREATE VIEW. Para substituir exibições ou LBVs por políticas RLS, primeiro desanexe todas as políticas RLS anexadas, substitua as exibições ou LBVs e reanexe as políticas. Os superusuários e usuários com o
sys:secadmin permission
podem usar CREATE VIEW em exibições ou LBVs com políticas RLS sem desanexar as políticas. -
As exibições com políticas de segurança no nível da linha não podem referenciar tabelas e exibições de sistema.
-
Uma exibição de vinculação tardia referenciada por uma exibição normal não pode ser protegida por RLS.
-
As relações protegidas por RLS e os dados aninhados de data lakes não podem ser acessados na mesma consulta.