Pedro F. Carvalho Analista de Sistemas [email protected] www.pedrofcarvlho.com.br SEGURANÇA DE USUÁRIOS Cada banco de dados Oracle possui uma lista de usuários válidos, identificados por USERNAMES. Todos os usuários são cadastrados no Dicionário de Dados do Banco em tabelas e views consultados pelo DBA. Quando o usuário do Banco de Dados é criado, um Schema correspondente com mesmo nome é criado para o usuário. Um Schema é o conjunto de informações sobre o USERNAME. Isso inclui: • • • • • • • Username Password Privilégios permitidos Tablespaces de seus objetos Quotas nas Tablespace Profile Role Agora que já entendemos o que vem a ser um usuário no Oracle, veremos como criar, alterar, excluir e monitorá-los. Criando um novo usuário: SQL> CREATE USER [Usuário] IDENTIFIED BY [Senha/Externally/Globally as] DEFAULT TABLESPACE [Nome Default] TEMPORARY TABLESPACE [Nome Temporária] PROFILE [Nome Profile] QUOTA [K/M/Unlimited] ON [Tablespace] PASSWORD EXPIRE ACCOUNT [Lock/Unlock] Onde: • • • • • Usuário - Nome do usuário a ser criado. Senha - Especifica a senha do usuário. Externally - Verifica o acesso do usuário através do sistema operacional. Globally As - Especifica que o usuário será autenticado por um sistema externo de Gerenciamento de Segurança (Oracle Security Server) ou outro Sistema de Gerenciamento de autenticação. Default Tablespace - Identifica a Tablespace onde serão criados os objetos dos usuários. Pedro F. Carvalho Analista de Sistemas [email protected] www.pedrofcarvlho.com.br • • • • • • • • Temporary Tablespace - Identifica a Tablespace para segmentos temporários. Profile - O nome do Profile associado ao usuário. Quota - Especifica o valor da quota na Tablespace Unlimited - Permite ao usuário alocar espaço dentro de uma Tablespace sem limites. On - Especifica o nome da Tablespace cujo espaço será controlado peça Quota. Password Expire - Torna a senha do usuário extinta, solicitando uma nova senha no próximo login. Lock - Desabilita o login. Unlock - Habilita o login. Exemplo: SQL> CREATE USER iMasters IDENTIFIED BY Revista DEFAULT TABLESPACE User_Data TEMPORARY TABLESPACE User_Temp PROFILE [Nome Profile] QUOTA 15M ON User_Data QUOTA 10M ON User_Temp PASSWORD EXPIRE ACCOUNT Unlock PROFILE Default; Alterando um Usuário: SQL> ALTER USER <Usuário> <Opções a serem alteradas> <Novo Valor> DEFAULT TABLESPACE [Nome Default] Exemplo: SQL> ALTER USER iMasters QUOTA 5M ON User_Data; Excluindo um Usuário: SQL> DROP USER <Usuário> [CASCADE] <Opções a serem alteradas> <Novo Valor> Pedro F. Carvalho Analista de Sistemas [email protected] www.pedrofcarvlho.com.br DEFAULT TABLESPACE [Nome Default] Onde: CASCADE Permite a exclusão de todos os objetos associados ao usuário. Essa opção somente será usado em raras exceções. Quando o usuário é excluído com a opção CASCADE, o Username e seu Schema associado são removidos do Dicionário de Dados e todos objetos contidos no usuário são imediatamente excluídos. Exemplo: SQL> DROP USER Imasters; Monitorando Usuários: O Oracle armazena, no Dicionário de Dados, informações completas de todos os usuários do banco. Views do Dicionário de Dados: • • • • • • • • • • • • DBA_USERS - Descreve todos os usuários do Banco de Dados ALL_USERS - Lista os usuários visíveis ao usuário atual, mas não os descreve USER_USERS - Descreve somente o usuário atual DBA_TS_QUOTAS - Descreve as quotas da Tablespace USER_TS_QUOTAS - Descreve as quotas da Tablespace USER_PASSWORD_LIMITS - Descreve os parâmetros do perfil da senha que são atribuídos ao usuário USER_RESOURCE_LIMITS - Indica os limites do recurso para o usuário atual DBA_PROFILES - Indica todos os perfis e seus limites RESOURCE_COST - Lista o custo para cada recurso VSESSION - Lista a informação da sessão para cada sessão atual, incluí o nome do usuário VSESSTAT - Lista as estatísticas da sessão do usuário PROXY_USERS - Descreve os usuários que podem assumir a identidade de outros usuários Todas as consultas às tabelas ou visões do Dicionário de Dados só serão possíveis com privilégio adequado. Exemplo: Mostrando informações dos usuários, a partir do Dicionário de Dados: SQL> SELECT USERNAME, PROFILE, ACCOUNT_STATUS FROM DBA_USERS; USERNAME ---------------SYS SYSTEM IMASTER DEFAULT PROFILE -------------DEFAULT DEFAULT OPEN ACCOUNT_STATUS ---------------------------OPEN OPEN Pedro F. Carvalho Analista de Sistemas [email protected] www.pedrofcarvlho.com.br Mostrando informações sobre a quantidade de espaço que um usuário pode usar nas Tablespaces, a partir do Dicionário de Dados: SQL> SELECT * FROM DBA_TS_QUOTAS WHERE USERNAME IMASTER; O gerenciamento de usuários e seus respectivos privilégios aos objetos do banco de dados, dependendo do número de objetos e usuários, pode ser tornar uma tarefa árdua para o administrador do banco de dados. Quando este número ultrapassa 10 usuários a DBA já deve começar a tomar cuidado para não se passar ao conceder os Grants (permissões) para os objetos do banco em nível de usuário, ou seja, um a um. Uma forma muito simples de minimizar este trabalho é a utilização de Roles (papéis). O que é uma role? Uma Role pode ser definida como um “pacote” de privilégios que podem ser associados de forma muito fácil aos usuários do banco de dados. Por exemplo, podemos criar uma role com privilégio total a todos os objetos de nosso banco de dados, ou seja, privilégio de administrador. Sendo assim, todos os usuários com papel de administradores do banco de dados deverão ser associados a esta role. Desta forma, fica muito fácil o gerenciamento de privilégios para um grupo de usuários, pois se antes era necessário realizarmos Grant de todas as tabelas, views, functions e procedures para todos os usuários com permissão de administradores, agora, com a Role, necessitamos apenas associar estes usuários a ela. Metendo a mão na massa Para ficar mais claro o conceito de Role vamos ilustrar com exemplos como funciona o gerenciamento de um banco de dados com e sem Roles. Vamos conceder privilégios de administrador para um usuário. Definindo privilégios sem o uso de Role: GRANT ALL ON CLIENTES TO PAULO; GRANT ALL ON PRODUTOS TO PAULO; GRANT ALL ON ESTOQUES TO PAULO; Repare que se fosse necessário criamos outro usuário, deveríamos executar novamente o mesmo script modificando apenas o nome do usuário: GRANT ALL ON CLIENTES TO VERA; GRANT ALL ON PRODUTOS TO VERA; GRANT ALL ON ESTOQUES TO VERA; Para bancos de dados com poucos usuários e poucos objetos esta tarefa é muito simples e não exige grande esforço, porém, sabemos que na realidade, um banco de dados pode tranqüilamente ultrapassar uma centena de objetos e algumas dezenas de usuários. Quando isto ocorre o DBA pode ter muitas dores de cabeça caso tenha que Pedro F. Carvalho Analista de Sistemas [email protected] www.pedrofcarvlho.com.br controlar privilégios para cada usuário, abaixo veremos como esta tarefa pode ser bem mais tranqüila, com a utilização de Roles. Primeiro vamos criar a Role: CREATE ROLE ADMINISTRADOR; Agora vamos atribuir os privilégios a esta Role ao invés de atribuir aos usuários: GRANT ALL ON CLIENTES TO ADMINISTRADOR; GRANT ALL ON PRODUTOS TO ADMINISTRADOR; GRANT ALL ON ESTOQUES TO ADMINISTRADOR; Uma vez que nossa Role ADMINISTRADOR já foi criada e recebeu privilégios para os objetos do banco de dados, é hora de associarmos nossos usuários a ela, notem como é muito mais simples atribuir privilégios aos usuários com a utilização da Role criada: GRANT ADMINISTRADOR TO PAULO, VERA; Reparem como ficou muito mais simples a atribuição de permissões aos objetos com a utilização da Role, caso seja necessário modificar os privilégios dos usuários PAULO e VERA, devemo apenas executar Grant e Revoke a Role que automaticamente isto se refletirá em todos os usuários associados a ela. Autenticando usuários Autenticação significa verificar a identidade de alguém ou algo (um usuário, dispositivo ou outra entidade) que quer usar os dados, recursos ou aplicativos. Validando que a identidade estabelece uma relação de confiança para interações mais. Autenticação também permite a responsabilização, tornando possível a ligação de acesso e ações de identidades específicas. Após a autenticação, processos de autorização podem permitir ou limitar os níveis de acesso e de acção que têm permissão para essa entidade. Quando você cria um usuário, você deve decidir sobre a técnica de autenticação para usar, que podem ser modificados posteriormente. Senha: Este também é conhecido como autenticação pelo banco de dados Oracle. Criar cada usuário com uma senha associada que deve ser fornecida quando o utilizador tenta estabelecer uma conexão. Ao configurar uma senha, você pode expirar a senha imediatamente, o que força o usuário a alterar a senha após a primeira exploração madeireira polegadas Se você decidir que termina senhas de usuários, certifique-se que os usuários têm a capacidade de alterar a senha. Alguns aplicativos não têm esta funcionalidade. Todas as senhas criadas no Oracle Database 11g são sensíveis ao caso por padrão. Essas senhas também podem conter caracteres multibyte e são limitadas a 30 bytes. Cada senha criados em um banco de dados que é atualizado para o Oracle Database 11g permanece maiúsculas e minúsculas até que a senha seja alterada. As senhas são sempre de forma automática e transparente criptografada usando o algoritmo Advanced Encryption Standard (AES) em rede (cliente / servidor e servidor / servidor) conexões antes de enviá-los através da rede. Pedro F. Carvalho Analista de Sistemas [email protected] www.pedrofcarvlho.com.br Externa: Esta é a autenticação através de um método fora do banco de dados (sistema operacional, Kerberos ou RADIUS). A Opção de Segurança Avançada é necessário para Kerberos ou RADIUS. Os usuários podem se conectar ao banco de dados Oracle sem especificar um nome de usuário ou senha. A Opção de Segurança Avançada (que é uma autenticação forte) permite que os usuários sejam identificados através do uso da biometria, certificados x509 e dispositivos token. Com a autenticação externa, sua base de dados depende do sistema operacional, serviço de autenticação de rede ou serviço de autenticação externa para restringir o acesso a contas de banco de dados. Uma senha de banco de dados não é usado para este tipo de login. Se seu sistema operacional ou autorizações de serviços de rede, você pode tê-lo autenticar os usuários. Se você usar autenticação do sistema operacional, definir o parâmetro de inicialização OS_AUTHENT_PREFIX e utilizar este prefixo em nomes de usuários Oracle. O parâmetro OS_AUTHENT_PREFIX define um prefixo que o banco de dados Oracle adiciona ao início de cada nome da conta do usuário do sistema operacional. O valor padrão desse parâmetro é $ OPS para compatibilidade com versões anteriores do software Oracle. O banco de dados Oracle compara o nome prefixado com os nomes de usuários Oracle em banco de dados quando um usuário tenta se conectar. Por exemplo, suponha que OS_AUTHENT_PREFIX é definido como segue: OS_AUTHENT_PREFIX OPS = $ Se um usuário com uma conta do sistema operacional chamado tsmith precisa se conectar a um banco de dados Oracle e ser autenticado pelo sistema operacional, o banco de dados Oracle verifica se há um usuário de banco correspondente OPS $ tsmith e, nesse caso, permite que o usuário se conectar. Todas as referências a um usuário é autenticado pelo sistema operacional deve incluir o prefixo, como visto na de inicialização. Global: Com a opção do Oracle Advanced Security, a autenticação global permite que os usuários sejam identificados através do uso do Oracle Internet Directory. Para mais informações sobre métodos avançados de autenticação, consulte o Oracle Database Security curso. Perfis de Usuários : Perfis impor um conjunto chamado de limite de recursos no uso dos recursos de banco de dados ea instância. Os perfis também gerenciar o status da conta limitações e colocar em senhas de usuários (comprimento, tempo de expiração, e assim por diante). Cada utilizador é atribuído um perfil e pode pertencer a apenas um perfil em um determinado momento. Se os usuários já registrados em quando você muda seu perfil, a alteração não terá efeito até o seu próximo login. O perfil DEFAULT serve como base para todos os outros perfis. Como ilustrado no slide, as limitações de um perfil pode ser especificada implicitamente (como no CPU / sessão), pode ser ilimitada (como no CPU / Call), ou pode fazer referência a qualquer definição no perfil padrão (como no tempo de conexão). Perfis não pode impor limitações de recursos de usuários a menos que o parâmetro de inicialização RESOURCE_LIMIT é definida como TRUE. Com RESOURCE_LIMIT em seu valor padrão de FALSE, as limitações do perfil são ignorados. Perfil de configurações de senha sempre são aplicadas Perfis permitir ao administrador controlar os recursos do sistema a seguir: CPU: os recursos da CPU pode ser limitada por sessão ou por chamada. A CPU / limitação Sessão de 1000 significa que se uma sessão individual, que utiliza este perfil consome mais de 10 segundos de tempo de CPU (limitações de tempo de CPU está em centésimos de segundo), a sessão recebe um erro e é registrado fora: ORA-02392: ultrapassou o limite da sessão sobre a utilização de CPU, você está sendo desconectado Uma limitação por chamada faz a mesma coisa, mas ao invés de limitar global da sessão do usuário, que impede qualquer comando único da CPU consumir muito. Se a CPU / Call é limitada e que o usuário exceder o limite, anula comando. O usuário recebe uma mensagem de erro como o seguinte: Pedro F. Carvalho Analista de Sistemas [email protected] www.pedrofcarvlho.com.br ORA-02393: excedeu o limite de chamada em uso de CPU Rede / Memória: Cada sessão de banco de dados consome recursos do sistema e recursos de memória (se a sessão é de um usuário que não é local para o servidor) da rede. Você pode especificar o seguinte: Connect Time: Indica de quantos minutos o usuário pode estar conectado antes de ser automaticamente desconectado Idle Time: Indica de quantos minutos a sessão do usuário pode permanecer inativa antes de ser automaticamente desconectado. O tempo ocioso é calculada para o processo de servidor único. Ele não leva em conta a atividade dos aplicativos. O limite IDLE_TIME não é afetado por consultas de longa duração e outras operações. Sessões Simultâneas: indica quantas sessões simultâneas podem ser criados usando uma conta de usuário do banco de dados Private SGA: Limita a quantidade de espaço consumido no Sistema Global Area (SGA) para a classificação, a fusão bitmaps, e assim por diante. Essa restrição tem efeito apenas se a sessão utiliza um servidor compartilhado. (Servidores compartilhados são abordados na lição intitulada "Configurando o Oracle Ambiente de Rede"). Disk I / O: Isso limita a quantidade de dados que um usuário pode ler no nível por sessão ou o nível de cada chamada. Lê sessão e / Lê / Call estabelecer uma limitação sobre o número total de leituras da memória e do disco. Isso pode ser feito para garantir que nenhum I / O uso excessivo de memória intensiva declarações e discos. Perfis permitem também um limite de composto. Composto limites são baseados em uma combinação ponderada de CPU / Session, Lê / sessão, tempo de conexão, e privados PIG. Composto limites são discutidos em mais detalhes no Oracle Database Security Guide. Para criar um perfil, clique na guia Servidor e clique em perfis sob o título Security. Na página de perfis, clique no botão Criar. Nota: Resource Manager é uma alternativa para muitas das configurações do perfil. Para mais detalhes sobre o Resource Manager, consulte o Guia do Oracle Database Administrator.