Revisado por Francisco Riccio
A instrução CREATE LOCKDOWN PROFILE permite aos DBAs criarem “lockdown profiles”, cujo propósito é restringir operações de usuários dentro dos PDBs que estão associados com multitenant CDBs. Essa restrição pode ser aplicada usando certas options do Banco de Dados, features e instruções SQL.
O Oracle 18c fornece 3 métodos diferentes para atribuir lockdown profiles a PDBs individualmente ou a todos os PDBs presentes em um CDB ou application container, como descrito abaixo:
Além desses métodos, existem mais 2 caminhos para criar lockdown profiles usando profiles existentes:
A cláusula FROM é usada para criar um lockdown profile estático fora do base profile. Quaisquer mudanças subsequentes feitas no base profile não refletirão no lockdown profile estático.
A cláusula INCLUDING é usada para criar um lockdown profile dinâmico. Quaisquer mudanças feitas para o base profile deverão refletir no seu lockdown profile. Quaisquer mudanças feitas no base profile deverão também refletir no lockdown profile. No caso do DBA explicitamente adicionar uma nova regra para a regra de lockdown dinâmica que está conflitante com as regras existentes, então as regras presentes no base profile deverão ter predecência sobre a nova regra conflitante.
O exemplo abaixo fornece uma demonstração passo-a-passo para ver como funcionam os lockdown profiles no Oracle 18c:
Pré-requisitos:
1. Abra o SQL*Plus e faça logon no banco de dados como SYS no CDB18C e verifique os arquivos existentes:
[oracle@18c ~]$ sqlplus SYS@CDB18C AS SYSDBA
SQL> SELECT profile_name, rule, clause, status, CLAUSE_OPTION FROM cdb_lockdown_profiles;
no rows selected
2. Crie um profile comum que desabilita o comando ALTER SYSTEM para alterar a SGA:
SQL> CREATE LOCKDOWN PROFILE CDB_BASE_PROFILE;
Lockdown Profile created.
SQL> ALTER LOCKDOWN PROFILE CDB_BASE_PROFILE DISABLE STATEMENT= ('ALTER SYSTEM')
clause=('SET') OPTION = ('SGA_TARGET');
Lockdown Profile altered.
SQL> SELECT profile_name, rule, clause, status, CLAUSE_OPTION FROM cdb_lockdown_profiles;
PROFILE_NAME RULE CLAUSE STATUS CLAUSE_OPTION
-------------------- ------------------------------ ---------- ------- ------------
CDB_BASE_PROFILE ALTER SYSTEM SET DISABLE SGA_TARGET
3. Agora crie o profile estático que inicialmente herda a propriedade do base profile, mas que não pega as mudanças depois de criado:
SQL> CREATE LOCKDOWN PROFILE static_profile FROM cdb_base_profile;
Lockdown Profile created.
SQL> SELECT profile_name, rule, clause, status, CLAUSE_OPTION FROM cdb_lockdown_profiles;
PROFILE_NAME RULE CLAUSE STATUS CLAUSE_OPTION
-------------------- ------------------------------ ---------- ------- ------------
CDB_BASE_PROFILE ALTER SYSTEM SET DISABLE SGA_TARGET
STATIC_PROFILE ALTER SYSTEM SET DISABLE SGA_TARGET
4. Vamos criar o profile dinâmico que herda a propriedade inicial do base profile tão bem quanto mudanças feitas futuramente nele:
SQL> CREATE LOCKDOWN PROFILE dynamic_profile INCLUDING cdb_base_profile;
Lockdown Profile created.
SQL> SELECT profile_name, rule, clause, status, CLAUSE_OPTION FROM cdb_lockdown_profiles;
PROFILE_NAME RULE CLAUSE STATUS CLAUSE_OPTION
-------------------- ------------------------------ ---------- ------- ------------
CDB_BASE_PROFILE ALTER SYSTEM SET DISABLE SGA_TARGET
DYNAMIC_PROFILE EMPTY
STATIC_PROFILE ALTER SYSTEM SET DISABLE SGA_TARGET
Nota: Podemos observamos que as regras do base profile não foram copiadas no DYNAMIC_PROFILE, que é um profile vazio.
5. Logue-se no PDB18C, configure os diferentes lockdown profiles e realize algumas operações neles para testar o comportamento:
SQL> ALTER SESSION SET CONTAINER = PDB18C;
Session altered.
SQL> ALTER SYSTEM SET pdb_lockdown = CDB_BASE_PROFILE;
System altered.
SQL> ALTER SYSTEM SET SGA_TARGET=100m;
ALTER SYSTEM SET SGA_TARGET=100m
*
ERROR at line 1:
ORA-01031: insufficient privileges
SQL> ALTER SYSTEM SET pdb_lockdown = DYNAMIC_PROFILE;
System altered.
SQL> ALTER SYSTEM SET SGA_TARGET=100m;
ALTER SYSTEM SET SGA_TARGET=100m
*
ERROR at line 1:
ORA-01031: insufficient privileges
SQL> ALTER SYSTEM SET pdb_lockdown = STATIC_PROFILE;
System altered.
SQL> ALTER SYSTEM SET SGA_TARGET = 100m;
ALTER SYSTEM SET SGA_TARGET=100m
*
ERROR at line 1:
ORA-01031: insufficient privileges
Como podemos observar, o base profile e o profile estático possuem comportamento similar, já o profile dinâmico impõe as mesmas restrições embora seja um profile vazio.
Agora vamos adicionar mais algumas restrições para o base profile e veremos se elas serão cascateadas para os outros profiles:
SQL> CONN / AS SYSDBA
Connected.
SQL> ALTER LOCKDOWN PROFILE CDB_BASE_PROFILE DISABLE STATEMENT= ('ALTER SYSTEM')
clause=('FLUSH SHARED_POOL');
Lockdown Profile altered.
PROFILE_NAME RULE CLAUSE STATUS CLAUSE_OPTION
--------------- ------------ ----------------- -------- ---------
CDB_BASE_PROFILE ALTER SYSTEM FLUSH SHARED_POOL DISABLE
CDB_BASE_PROFILE ALTER SYSTEM SET DISABLE SGA_TARGET
DYNAMIC_PROFILE EMPTY
STATIC_PROFILE ALTER SYSTEM SET DISABLE SGA_TARGET
SQL> ALTER SESSION SET CONTAINER = PDB18C;
Session altered.
SQL> ALTER SYSTEM SET pdb_lockdown = CDB_BASE_PROFILE;
System altered.
SQL> ALTER SYSTEM FLUSH SHARED_POOL;
ALTER SYSTEM FLUSH SHARED_POOL
*
ERROR at line 1:
ORA-01031: insufficient privileges
SQL> ALTER SYSTEM SET pdb_lockdown = DYNAMIC_PROFILE;
System altered.
SQL> ALTER SYSTEM FLUSH SHARED_POOL;
ALTER SYSTEM FLUSH SHARED_POOL
*
ERROR at line 1:
ORA-01031: insufficient privileges
SQL> ALTER SYSTEM SET pdb_lockdown = STATIC_PROFILE;
System altered.
SQL> ALTER SYSTEM FLUSH SHARED_POOL;
System altered.
Como vimos acima, novas restrições no base profile levarão efeito somente no profile dinâmico, mas não no profile estático. Isso significa que as propriedades são herdadas apenas nos profiles dinâmicos.
6. Explicitamente adicione algumas regras para o profile dinâmico e veja os efeitos em todos os profiles:
QL> CONN / AS SYSDBA
Connected.
SQL> ALTER LOCKDOWN PROFILE CDB_BASE_PROFILE ENABLE STATEMENT= ('ALTER SYSTEM')
clause= ('FLUSH SHARED_POOL');
Lockdown Profile altered.
SQL> ALTER LOCKDOWN PROFILE DYNAMIC_PROFILE DISABLE STATEMENT= ('ALTER SYSTEM')
clause= ('FLUSH SHARED_POOL');
Lockdown Profile altered.
SQL> SELECT profile_name, rule, clause, status, CLAUSE_OPTION FROM cdb_lockdown_profiles;
PROFILE_NAME RULE CLAUSE STATUS CLAUSE_OPTION
-------------------- ------------- -------------------- ------- -------------------
CDB_BASE_PROFILE ALTER SYSTEM FLUSH SHARED_POOL ENABLE
CDB_BASE_PROFILE ALTER SYSTEM SET DISABLE SGA_TARGET
DYNAMIC_PROFILE ALTER SYSTEM FLUSH SHARED_POOL DISABLE
STATIC_PROFILE ALTER SYSTEM SET DISABLE SGA_TARGET
SQL> ALTER SESSION SET CONTAINER = PDB18C;
Session altered.
SQL> ALTER SYSTEM SET pdb_lockdown = DYNAMIC_PROFILE;
System altered.
SQL> ALTER SYSTEM FLUSH SHARED_POOL;
ALTER SYSTEM FLUSH SHARED_POOL
*
ERROR at line 1:
ORA-01031: insufficient privileges
SQL> ALTER SYSTEM SET pdb_lockdown = CDB_BASE_PROFILE;
System altered.
SQL> ALTER SYSTEM FLUSH SHARED_POOL;
System altered.
Fabio Prado trabalha como DBA em uma empresa do Governo Federal do Brasil, atua como instrutor na ORAMASTER, é Organizador do DBA BRASIL, autor do blog https://www.fabioprado.net, e possui diversas certificações Oracle e Microsoft, além de ser Oracle ACE Member. Trabalha com tecnologia desde 2000 e possui experiência e profundos conhecimentos em Bancos de Dados Oracle, tais como: Administração, Programação em PL/SQL, Backup and Recovery, e principalmente Tuning.
Skant Gupta é um Oracle Certified Cloud Professional 12c, OCE RAC 11g and Oracle Certified Professional (10g, 11g, 12c). Atualmente trabalha na Vodafone no Reino Unido e trabalhava anteriormente como DBA Sênior na Etisalat em Dubai. Tem 6 anos de experiência em diferentes tecnologias Oracle, focando principalmente em banco de dados, nuvem, soluções de alta disponibilidade, WebLogic e GoldenGate. Já esteve presente em vários grupos de usuários Oracle ao redor do mundo e mais recentemente nos EUA, Emirados Árabes e Índia. Perfil de Skant Gupta no LinkedIn - https://www.linkedin.com/in/skantali, Blog: http://oracle-help.com/
Joel Pérez é um DBA (Oracle ACE Director, Maximum Availability OCM, OCM Cloud Admin. & OCM12c/11g) Especialista com mais de 17 anos de experiência real no mundo da tecnologia Oracle, especializada na concepção e implementação de soluções: Nuvem, alta disponibilida de, recuperação de desastres, Upgrades, replicação e toda a área relacionada com bancos de dados Oracle. Joel serve como "Senior Database Cloud Architect" para en.Enmotech.com Yunhe ENMO (Beijing) Technology Co. Ltd. Beijing, China. Conectar com Joel: Conecte-se com Joel’s Linkedin para ser atualizado com as informações mais notáveis relacionadas ao Oracle Cloud: https://www.linkedin.com/in/sir-joel-pérez-oracle-ace-director-ocm-cloud-99530555/
Este artigo foi revisto pela equipe de produtos Oracle e está em conformidade com as normas e práticas para o uso de produtos Oracle