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.