Vous êtes sur la page 1sur 8

ADMINISTRAÇÃO DE USUÁRIOS NO ORACLE 11G

Nesse material, apresenta como criar, modificar e excluir usuários, privilégios, atribuições
e perfis em instâncias de banco de dados Oracle 11g. A definição de cada item é feito com
base na literatura sobre o assunto sendo apresentados exemplos práticos.

1. INTRODUÇÃO

Para realizarmos qualquer ação em um servidor de banco de dados é necessário ter um


usuário com determinados privilégios de acesso ao servidor. No banco de dados Oracle 11g
existem diferentes privilégios que podem ser concedidos aos usuários, e gerenciar os
privilégios individualmente pode se tornar uma tarefa extremamente cansativa. Para facilitar
essa tarefa de gerenciamento, normalmente, utilizamos atribuições para agrupar os
privilégios.
Geralmente temos vários usuários conectados ao banco de dados e executando ações
concorrentes e simultâneas. Para evitar que um usuário específico consuma em excesso os
recursos disponíveis (CPU, E/S, memória), o que prejudicaria os demais usuários, o banco de
dados Oracle 11g fornece um mecanismo, chamado de perfil, para controlar o limite desses
recursos que o usuário pode utilizar.
Esse material discute as funcionalidades para criar usuários, controlar perfis, conceder
privilégios e estabelecer atribuições no Banco de dados Oracle 11g.

2. USUÁRIOS

Uma conta de usuário é identificada por um nome (de no máximo trinta caracteres) e
está associado a somente um esquema, com o mesmo nome do usuário, no banco de dados.
Os termos “usuário” e “esquema” podem ser usados alternadamente em um ambiente
Oracle, mas nem sempre querem dizer a mesma coisa. Um usuário é o nome utilizado para
estabelecer uma conexão com o banco de dados. Um esquema é um conjunto de objetos de
propriedade do usuário: tabela, índices, sequencia visões, entre outros.
O comando utilizado para criar um usuário é o CREATE USER. Esse comando possui
somente dois parâmetros obrigatórios: o nome e a senha do usuário. No entanto, é boa
prática definir vários outros parâmetros para a conta do usuário. Abaixo os principais
parâmetros utilizados quando um usuário é criado.

Parâmetros Uso

Nome do usuário Especifica o nome que identifica a conta do


usuário. Ele pode ter até 30 caracteres e não
pode ser uma palavra reservada a menos que
ela esteja entre aspas (o que não é
recomendado).
IDENTIFIED BY senha Especifica a senha do usuário para acesso ao
banco de dados.
DEFAULT TABLESPACE Especifica o tablespace padrão onde os
objetos permanentes da conta do usuário
serão criados, exceto, quando o tablespace é
explicitamente especificado durante a criação
dos objetos.
TEMPORARY TABLESPACE Especifica o tablespace onde os segmentos
temporários, da conta do usuário, serão
criados durante as operações de classificação,
criação de índices, etc.
QUOTA Especifica a quantidade de espaço, ou
tamanho, permitido para os objetos criados
no tablespace especificado. O tamanho pode
ser em kilobytes(K) ou em megabytes(M).
PROFILE Especifica o perfil atribuído a este usuário. Ele
será discutido mais adiante nesse artigo. Se
um perfil não for especificado, o perfil
utilizado será o DEFAULT.
PASSWORD EXPIRE Especifica que após o primeiro logon, o
usuário deve alterar a senha.
ACCOUNT {LOCK | UNLOCK} Especifica se a conta do usuário está
bloqueada (LOCK) ou desbloqueada
(UNLOCK). Por padrão, a conta do usuário
será criada desbloqueada.

Exemplo do comando para criar a conta do usuário

CREATE USER JUVENAL


IDENTIFIED BY 123456
ACCOUNT UNLOCK
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP;

Exemplo do comando para alterar a conta do usuário

ALTER USER JUVENAL


IDENTIFIED BY 9998877
ACCOUNT LOCK;
Exemplo do comando para remover a conta do usuário

DROP USER JUVENAL;

3. PERFIS

Um processo de usuário pode consumir, em excesso, recursos como CPU,


espaço em disco ou largura de banda de E/S (Entrada / Saída). Como esses
recursos geralmente são limitados, o Oracle 11g possui um mecanismo para limitar
e controlar a quantidade desses recursos que os processos do usuário podem
consumir. Além disso, os perfis também podem ser usados como um mecanismo e
autorização para controlar como as senhas de usuários são criadas, reutilizadas e
validadas.
Um perfil tem dupla função: impor uma política para a senha da conta de
usuário (limites para as senhas) e restringir os recursos que uma sessão pode
ocupar (limites para os recursos). No banco de dados Oracle 11g os limites para as
senhas são sempre obrigatórios; e os limites para os recursos só são obrigatórios
se o parâmetro de instância RESOURCE_LIMIT estiver como TRUE (por padrão ele é
FALSE). Todas as contas de usuários têm um perfil, por padrão, chamado de
DEFAULT. O perfil DEFAULT pode ser ajustado, e a alteração será imediatamente
aplicada a todos os usuários com o perfil. Perfis adicionais podem ser criados e
atribuídos explicitamente a certos usuários. A seguir é descrito os dois limites
apresentados:

a. Limites para as senhas

Parâmetros Uso

FAILED_LOGIN_ATTEMPTS Especifica o número de erros


consecutivos em uma senha antes
de a conta do usuário ser
bloqueada. Se a senha correta for
fornecida antes desse limite ser
alcançado, o contador é redefinido
como zero.
PASSWORD_LOCK_TIME Especifica o número de dias que
uma conta ficará bloqueada
depois que o
FAILED_LOGIN_ATTEMPTS for
atingido.
PASSWORD_LIFE_TIME Especifica o número de dias antes
de uma senha expirar. Ela ainda
poderá ser usada por algum
tempo após a expiração,
dependendo da configuração
utilizada em
PASSWORD_GRACE_TIME.
PASSWORD_GRACE_TIME Especifica o número de dias depois
do primeiro logon bem sucedido
pós a senha ter expirado. A senha
antiga ainda pode ser usada
durante esse período.
PASSWORD_REUSE_TIME Especifica o número de dias antes
que uma senha possa ser
reutilizada.
PASSWORD_REUSE_MAX Especifica o número de vezes que
uma senha pode ser reutilizada.
PASSWORD_VERIFY_FUNCTION Especifica o nome de uma função
a ser executada sempre que uma
senha for alterada. A finalidade da
função deve ser verificar se a nova
senha tem um grau de
complexidade adequado.

b. Limites para os recursos:


Os limites que podem ser aplicados ao uso dos recursos (também
conhecidos como limites de kernel) são:
Parâmetros Uso

SESSIONS_PER_USER Especifica o número de logins


concorrentes que podem ser
feitos
à mesma conta de usuário.
Sessões que tenta fazer login com
o mesmo nome de usuário após
esse limite ser alcançado serão
bloqueadas.
CPU_PER_SESSION Especifica o tempo de CPU, em
centissegundos, que um processo
de servidor de uma sessão pode
ser usado antes da sessão ser
forçadamente terminada.
CPU_PER_CALL Especifica o tempo de CPU, em
centissegundos, que um processo
de servidor de uma sessão pode
ser usado para executar uma
instrução SQL, antes de a
instrução ser forçadamente
terminada.
LOGICAL_READS_PER_SESSION Especifica o número de blocos
que podem ser lidos por uma
sessão (independentemente de
eles estarem no cache de buffer
do banco de dados ou lidos no
disco) antes que a sessão seja
forçadamente terminada.
LOGICAL_READS_PER_CALL Especifica o número de blocos
que podem ser lidos por uma
única instrução SQL
(independentemente de eles
estarem no cache de buffer do
banco de dados ou lidos no disco)
antes que a instrução seja
forçadamente terminada.
PRIVATE_SGA Para sessões conectadas por
meio da arquitetura de servidor
compartilhado, especifica o
número, em kilobytes, que a
sessão pode usar na SGA (System
Global Area).
CONNECT_TIME Especifica a duração máxima, em
minutos, máxima de uma sessão
antes de ser forçadamente
terminada.
IDLE_TIME Especifica tempo máximo, em
minutos, que uma sessão pode
ficar ociosa antes de ser
forçadamente terminada.
COMPOSITE_LIMIT Especifica uma soma ponderada
dos parâmetros acima.
Geralmente utilizamos esse
parâmetro quando precisamos
dar flexibilidade e tolerância às
operações executadas pelos
usuários, assim estamos imitando
o usuário pelo uso ponderado dos
recursos e pela disponibilidade de
cada recurso no servidor.

Os limites para os recursos só são obrigatórios se o parâmetro de


instância RESOURCE_LIMIT estiver como TRUE. Por padrão, esse
parâmetro é definido com FALSE. Uma das maneiras para ativar o
RESOURCE_LIMIT é utilizar a sintaxe: ALTER SYSTEM SET
RESOURCE_LIMIT=TRUE;
Nos limites aplicados ao uso dos recursos existem dois tipos de valores
especiais que podem ser aplicados aos seus parâmetros: UNLIMITED e
DEFAULT. O valor de parâmetro UNLIMITED significa que não há limites
sobre quanto do recurso determinado pode ser utilizado, já o valor de
parâmetro DEFAULT significa que este parâmetro assume seus valores a
partir do perfil DEFAULT.
A maneira como o banco de dados Oracle 11g trata um dos limites de
recursos que está sendo excedido, depende do tipo deste. Mas na maioria
dos casos, a sessão será forçadamente terminada quando o limite para um
recurso determinado for excedido. Por exemplo, caso haja uma transação
em andamento quando uma sessão for terminada porque o limite de um
recurso foi alcançado, ela sofrerá rollback. Se uma instrução for terminada,
o trabalho feito por ela sofrerá um rollback, mas todas as instruções
anteriores permanecerão intactas.

Exemplo para criar um perfil

CREATE PROFILE EXEMPLO LIMIT


CONNECT_TIME 120
FAILED_LOGIN_ATTEMPTS 8;

Exemplo para alterar um perfil

ALTER PROFILE EXEMPLO LIMIT


PASSWORD_LIFE_TIME 180 7
PASSWORD_GRACE_TIME 7
PASSWORD_REUSE_MAX UNLIMITED
FAILED_LOGIN_ATTEMPTS 10
PASSWORD_LOCK_TIME 1;
Exemplo para remover um perfil

DROP PROFILE EXEMPLO;

4. PRIVILÉGIOS

Em um banco de dados Oracle 11g não é possível fazer nada sem o(s)
privilégio(s) correto(s). Um usuário não pode sequer conectar-se sem ter o
privilégio para tal e, uma vez que conectado, ele não pode fazer mais nada de útil
(ou perigoso) sem receber mais privilégios.
Os privilégios são atribuídos às contas de usuários com o comando GRANT e
removidos através do comando REVOKE. Na maioria das vezes que o usuário não
possui privilégio para executar uma ação, o banco de dados Oracle 11g emite uma
mensagem de advertência semelhante a esta: “ORA-01031: Privilégios
Insuficientes”.
Podemos dividir os privilégios em dois grupos: privilégios de sistemas e
privilégios de objeto. O primeiro grupo permite que os usuários executem ações
que afetam o dicionário de dados, já o segundo grupo permite aos usuários
executar ações que afetam os dados. Um privilégio de sistema é um direito para
executar ações, que não envolvam nenhum objeto específico, mas sim
procedimentos tais como alterar os parâmetros da instância, criar atribuições e
criar usuários. Em um banco de Oracle 11g existem aproximadamente duzentos
privilégios de sistemas.
A relação completa desses privilégios pode ser encontrada na tabela do
dicionário de dados chamada SYSTEM_PRIVILEGE_MAP. Os privilégios de objeto
são definidos como um direito que permite executar comandos como ALTER,
SELECT, INSERT, UPDATE e DELETE em tabelas, visões, procedimentos ou
sequencias existentes no banco de dados.
Os privilégios de sistema podem ser concedidos para um usuário, atribuição
(será discutido mais adiante) ou para o grupo PUBLIC. Um fator importante
ressaltado é que os privilégios de sistema ou de objeto devem ser concedidos para
o grupo PUBLIC somente quando for realmente necessário. PUBLIC é um grupo
especial que inclui todos os usuários do banco de dados e é um atalho para
conceder privilégios para todas as contas de usuários.
Quando estamos concedendo um privilégio, podemos permitir que os
beneficiados pelos privilégios concedam estes mesmos a outros usuários, para isso
basta incluir o parâmetro WITH ADMIN OPTION ao final do comando GRANT. A
seguir temos a descrição de alguns privilégios de sistema.

Privilégio Capacidade

ALTER SYSTEM Permite modificar os parâmetros de


inicialização do banco de dados Oracle
11g.
CREATE USER Permite criar novos usuários.
CREATE SESSION Permite abrir uma conexão com o banco
de dados
CREATE TABLE Permite criar tabelas somente no seu
esquema.
SYSDBA Esse é um privilégio especial, permite ao
usuário executar qualquer ação dentro
do banco de dados Oracle 11g.

Exemplo de como conceder um privilégio de sistema

GRANT CREATE SESSION TO JUVENAL;

Exemplo de como retirar um privilégio de sistema

REVOKE CREATE ANY TABLE FROM JUVENAL;

Assim como nos privilégios de sistema, podemos conceder privilégios de


objeto a um usuário, atribuição ou para o grupo PUBLIC. E também podemos usar
o parâmetro WITH ADMIN OPTION para permitir que os beneficiados repassem os
mesmo privilégios a outros usuários. A seguir temos a descrição de alguns
privilégios de objeto

Privilégio Capacidade

ALTER Permite alterar a estrutura de uma


tabela ou sequencia.
EXECUTE Permite executar a função (FUNCTION)
ou procedimento
(PROCEDURE).
SELECT Permite ler as linhas de tabela ou visão,
e adicionalmente, ler o valor corrente e
o próximo valor para uma sequencia.
INSERT Permite inserir dados em uma tabela ou
visão.
DELETE Permite apagar os dados de uma tabela
ou visão.
UPDATE Permite atualizar os dados em uma
tabela ou visão

Exemplo de como conceder privilégios de objeto

GRANT SELECT ON LUCAS.TABELA01 TO JUVENAL;

GRANT SELECT, INSERT, UPDATE ON LUCAS.TABELA02 TO JUVENAL;

Exemplo de como retirar privilégios de objeto

REVOKE UPDATE ON LUCAS.TABELA02 FROM JUVENAL;

5. ATRIBUIÇÕES

No contexto do banco de dados Oracle 11g, uma atribuição (role em inglês) é


conjunto de privilégios de sistema e/ou privilégios de objeto que podem ser
concedidos e revogados com uma unidade.
Também podemos dizer que uma atribuição é um grupo nomeado de
privilégios, sejam eles de sistema ou de objeto, ou uma combinação de ambos, que
facilita a administração dos privilégios em 10 um banco de dados Oracle 11g. Em
vez de conceder privilégios de sistemas ou de objeto individualmente para cada
usuário, é possível conceder um grupo de privilégios a uma atribuição e, por sua
vez, a atribuição pode ser concedida aos usuários.
Criamos as atribuições utilizando o comando CREATE ROLE e as removemos
através do comando DROP ROLE. As atribuições não são objetos de um esquema,
ou seja, elas não pertencem a nenhum usuário específico. Uma vez que a
atribuição esteja criada, podemos conceder todos os privilégios que julgamos
necessários para a atribuição, os privilégios são concedidos através do comando
GRANT visto anteriormente.

Exemplo para criar uma atribuição

CREATE ROLE DESENVOLVEDORES;

Exemplo para conceder privilégios uma atribuição

GRANT CREATE SESSION TO DESENVOLVEDORES;

GRANT CREATE TABLE TO DESENVOLVEDORES;

GRANT CREATE VIEW TO DESENVOLVEDORES;

GRANT CREATE PROCEDURE TO DESENVOLVEDORES;

GRANT SELECT, UPDATE ON IREMAR.TABELA02 TO DESENVOLVEDORES;

Exemplo para atribuir uma atribuição a usuário

GRANT DESENVOLVEDORES TO JOAO;

Exemplo para excluir uma atribuição

DROP ROLE DESENVOLVEDORES;

6. CONCLUSÃO

Um banco de dados Oracle 11g fornece excelentes mecanismos para o


gerenciamento da segurança do usuário, além de permitir controlar, através de
perfil, os recursos disponíveis e a política de senha para os usuários. O mecanismo
de privilégios, juntamente com as atribuições, é transparente e de fácil utilização,
permitindo conceder aos usuários os direitos necessários para a execução das
tarefas.

Vous aimerez peut-être aussi