administração de usuários no sgbd oracle 11g

Propaganda
1
ADMINISTRAÇÃO DE USUÁRIOS NO SGBD ORACLE 11G
JUVENAL LONGUINHO DA SILVA NETO 1
IREMAR NUNES DE LIMA 2
Resumo: Este artigo 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.
Palavras-chave: Banco de Dados, Oracle, Administração, Usuário, Perfil, Atribuição e Privilégio.
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
1
2
Especialista em Banco de Dados e Business Inteligence ([email protected]).
DBA, Mestre em informática e Professor do Centro Universitário Newton Paiva ([email protected]).
2
um mecanismo, chamado de perfil, para controlar o limite desses recursos que o usuário pode
utilizar.
Este artigo discute as funcionalidades para criar usuários, controlar perfis, conceder privilégios e
estabelecer atribuições no SGBD Oracle 11g. Para entendimento deste artigo é necessário
conhecimentos de conceitos básicos do SGBD Oracle.
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: tabelas, índices,
seqüências, visões, entre outros (WATSON, 2010).
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 (WATSON, 2010). Abaixo, conforme apresentando por
BRYLA & LONEY (2009), 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.
3
Parâmetros
QUOTA
Uso
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.
Tabela 1: Principais parâmetros para a criação da conta de usuário.
Fonte: BRYLA & LONEY (2009)
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 de
autorização para controlar como as senhas de usuários são criadas, reutilizadas e validadas (BRYLA
& LONEY, 2009).
4
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
(WATSON, 2010). A seguir é descrito os dois limites apresentados:
a. Limites para as senhas
Segundo WATSON (2010), os limites que podem ser aplicados a política de senha são:
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 bemsucedido apó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.
Tabela 2: Principais limites aplicados a política de senha.
5
Fonte: WATSON (2010)
b. Limites para os recursos
Segundo WATSON (2010), 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 limitando o usuário pelo uso ponderado
6
Parâmetros
Uso
dos recursos e pela disponibilidade de cada recurso no servidor.
Tabela 3: Principais limites aplicados aos recursos.
Fonte: WATSON (2010)
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;
Segundo BRYLA & LONEY (2009), 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.
Ainda conforme BRYLA & LONEY (2009), 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
Segundo WATSON (2010), 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: “ORA01031: Privilégios Insuficientes”.
Ainda segundo WATSON (2010), 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.
Outra definição que podemos usar é dada por BRYLA & LONEY (2009): eles nos dizem que 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 por BRYLA &
LONEY (2009) como um direito que permite executar comandos como ALTER, SELECT,
8
INSERT, UPDATE e DELETE em tabelas, visões, procedimentos ou seqüências 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 tanto por BRYLA & LONEY
(2009), como por WATSON (2010), é 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
(BRYLA & LONEY, 2009):
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.
Tabela 4: Alguns privilégios de sistema.
Fonte: (BRYLA & LONEY, 2009)
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;
9
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 (BRYLA & LONEY, 2009):
Privilégio
Capacidade
ALTER
Permite alterar a estrutura de uma tabela ou seqüência.
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 seqüência.
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.
Tabela 5: Alguns privilégios de objeto.
Fonte: (BRYLA & LONEY, 2009):
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 (WATSON, 2010).
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 (BRYLA & LONEY, 2009).
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 (WATSON, 2010).
Exemplo para criar uma atribuição
CREATE ROLE DESENVOLVEDORES;
Exemplo para conceder privilégios uma atribuição
GRANT
GRANT
GRANT
GRANT
GRANT
CREATE SESSION TO DESENVOLVEDORES;
CREATE TABLE TO DESENVOLVEDORES;
CREATE VIEW TO DESENVOLVEDORES;
CREATE PROCEDURE TO DESENVOLVEDORES;
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.
11
REFERÊNCIAS
BRYLA, Bob; LONEY, Kevin. Oracle Database 11g: Manual do DBA. Tradução Altair Caldas
Dias de Moraes. Porto Alegre. Ed. Bookman. 2009.
WATSON, John. OCA Oracle Database 11g: Administração I: guia do exame 1Z0-052.
Tradução Altair Caldas Dias de Moraes. Porto Alegre. Ed. Bookman. 2010.
Download