Estamos vivendo um cenário dinâmico e em constante evolução no que se refere ao gerenciamento de bancos de dados. Uma das solicitações comuns que recebo de meus clientes é como criar um novo usuário no Oracle 12c R2 com certos requisitos específicos. Neste artigo, abordaremos uma solicitação que recebi recentemente de um cliente e explicaremos cada etapa em detalhes.
O cliente deseja:
- Que a sessão do usuário seja encerrada após uma hora de inatividade.
- A tablespace padrão seja ‘ts_data’, não ‘users’.
- Que o usuário tenha privilégios na tablespace ‘ts_index’.
- Que o usuário tenha acesso completo a todos os objetos do sistema do owner ‘SISTEMA’.
Vamos analisar cada requisito um por um:
Etapa 1: Criação do Profile
A primeira solicitação pode ser atendida por meio da criação de um PROFILE
no Oracle. O profile é um conjunto de limites na utilização de recursos do sistema e pode ser atribuído a um ou mais usuários. No nosso caso, queremos limitar o tempo de inatividade do usuário para 60 minutos. Para isso, utilizamos o seguinte comando SQL:
CREATE PROFILE idle_profile LIMIT IDLE_TIME 60; -- 60 minutos de tempo ocioso
Este comando cria um profile chamado ‘idle_profile’ que limita o tempo de inatividade do usuário a 60 minutos.
Etapa 2: Criação das Tablespaces
A próxima etapa é a criação das tablespaces ‘ts_data’ e ‘ts_index’. Uma tablespace no Oracle é uma unidade lógica de armazenamento. Vamos usar os seguintes comandos para criar essas tablespaces:
<code>CREATE TABLESPACE ts_data DATAFILE 'ts_data.dbf' SIZE 500M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;
CREATE TABLESPACE ts_index DATAFILE 'ts_index.dbf' SIZE 500M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;
Esses comandos criam tablespaces com um tamanho inicial de 500MB e com a opção AUTOEXTEND ativada, o que significa que as tablespaces serão automaticamente estendidas quando o espaço acabar, em incrementos de 10MB.
Etapa 3: Criação do Usuário
Agora vamos para a criação do usuário. A tabela de espaço padrão será ‘ts_data’ e o perfil será ‘idle_profile’, conforme a solicitação do cliente:
CREATE USER myuser IDENTIFIED BY mypassword
DEFAULT TABLESPACE ts_data
TEMPORARY TABLESPACE temp
PROFILE idle_profile;
Este comando cria um novo usuário chamado ‘myuser’ com a senha ‘mypassword’, atribui ‘ts_data’ como tablespace padrão, define ‘temp’ como tablespace temporária e aplica o profile ‘idle_profile’ ao usuário.
Etapa 4: Concessão de Privilégios
A próxima etapa é conceder os privilégios ao usuário. Queremos que o usuário tenha acesso à ‘ts_index’ e, por isso, concedemos quotas ilimitadas a ele nesta tablespace:
GRANT CONNECT, RESOURCE TO myuser;
ALTER USER myuser QUOTA UNLIMITED ON ts_data;
ALTER USER myuser QUOTA UNLIMITED ON ts_index;
Os comandos acima concedem ao usuário ‘myuser’ os privilégios de conexão e de recurso, além de quotas ilimitadas nas tablespaces ‘ts_data’ e ‘ts_index’.
Etapa 5: Acesso aos Objetos do Sistema
Por fim, vamos conceder ao usuário acesso total a todos os objetos do sistema do owner ‘SISTEMA’. Para isso, usaremos o seguinte bloco de comandos:
BEGIN
FOR t IN (SELECT table_name FROM all_tables WHERE owner = 'SISTEMA') LOOP
EXECUTE IMMEDIATE 'GRANT SELECT, INSERT, UPDATE, DELETE ON SISTEMA.' || t.table_name || ' TO myuser';
END LOOP;
END;
/
Este bloco de código percorre todas as tabelas do owner ‘SISTEMA’ e concede privilégios de SELECT, INSERT, UPDATE e DELETE para o usuário ‘myuser’.
Lembre-se de que conceder todos os privilégios a um usuário pode levar a problemas de segurança. Sempre conceda apenas os privilégios que são absolutamente necessários.