You are on page 1of 5

SQL> create user SCOTT identified by TIGER 2 default tablespace USERS 3 quota unlimited on USERS; SQL> grant connect,resource

to SCOTT;
Se os comandos acima forem executados no banco de dados, o usurio SCOTT ter cota de espao apenas no tablespace USERS? No. Por qu? Porque a role RESOURCE concedida logo aps a criao do usurio, tambm conceder o privilgio de sistema UNLIMITED TABLESPACE automaticamente. Para facilitar o gerenciamento destes privilgios e de forma a evitar confuso, eu recomendo a criao de uma role que ter o mesmo propsito das roles CONNECT e RESOURCE juntas de forma que o privilgio UNLIMITED TABLESPACE no atrapalhe os planos do DBA. Neste caso, os privilgios de sistema podem ser concedidos um a um uma nova role, ou as roles CONNECT e RESOURCE podem ser concedidas diretamente a esta nova role. Para facilitar melhor o entendimento, irei realizar algumas simulaes ...

C:\>sqlplus / as sysdba SQL*Plus: Release 10.2.0.1.0 - Production on Qui Fev 26 09:45:32 2009 Copyright (c) 1982, 2004, Oracle. All rights reserved.

Conectado a: Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production -- Criao da role ACESSO SYS> create role acesso; Funo criada. -- Apenas para mostrar que o privilgio UNLIMITED TABLESPACE no pode ser concedido -- nenhuma role SYS> grant unlimited tablespace to acesso; grant unlimited tablespace to acesso * ERRO na linha 1: ORA-01931: no possvel conceder UNLIMITED TABLESPACE para uma atribuio -- Verificando os privilgios concedidos role CONNECT SYS> select privilege from dba_sys_privs where grantee = 'CONNECT'; PRIVILEGE ---------------------------------------CREATE SESSION -- Verificando os privilgios concedidos role RESOURCE SYS> select privilege from dba_sys_privs where grantee = 'RESOURCE'; PRIVILEGE ---------------------------------------CREATE SEQUENCE CREATE TRIGGER CREATE CLUSTER CREATE PROCEDURE CREATE TYPE CREATE OPERATOR CREATE TABLE CREATE INDEXTYPE

8 linhas selecionadas.
Podemos perceber pelo resultado acima que o privilgio de sistema UNLIMITED TABLESPACE no apareceu na lista de privilgios de sistema concedidos role RESOURCE.

-- Criao do usurio SCOTT SYS> create user SCOTT identified by TIGER 2 default tablespace USERS 3 quota unlimited on USERS; Usurio criado. -- Verificando a cota de espao no tablespace USERS. Vale a pena salientar que a coluna -- MAX_BYTES contm o valor (-1) que significa espao de cota ilimitado SYS> select tablespace_name,username,max_bytes 2 from dba_ts_quotas 3 where username='SCOTT'; TABLESPACE_NAME USERNAME MAX_BYTES ------------------------------ ------------------------------ --------USERS SCOTT -1 -- Concedendo as roles CONNECT e RESOURCE SYS> grant connect,resource to scott; Concesso bem-sucedida.
Abaixo irei conectar com o usurio SCOTT ...

SYS> connect scott/tiger Conectado. SCOTT> select * from session_roles; ROLE -----------------------------CONNECT RESOURCE SCOTT> select * from session_privs; PRIVILEGE ---------------------------------------CREATE SESSION UNLIMITED TABLESPACE CREATE TABLE CREATE CLUSTER CREATE SEQUENCE CREATE PROCEDURE CREATE TRIGGER CREATE TYPE CREATE OPERATOR CREATE INDEXTYPE 10 linhas selecionadas.

-- Simulando a criao da tabela EMP SCOTT> create table emp (id number) tablespace SYSTEM; Tabela criada.
Podemos perceber acima que, apesar de eu ter especificado cota ilimitada apenas para o tablespace USERS, o usurio SCOTT conseguiu criar a tabela EMP no tablespace SYSTEM. Para resolver este problema, poderemos revogar do usurio SCOTT o privilgio de sistema UNLIMITED TABLESPACE:

SCOTT> connect / as sysdba Conectado. SYS> revoke unlimited tablespace from scott; Revogao bem-sucedida. -- Simulando novamente a criao da tabela EMP SYS> create table scott.emp (id number) tablespace SYSTEM; create table emp (id number) tablespace system * ERRO na linha 1: ORA-01950: no h privilgios no tablespace SYSTEM
Agora irei realizar a mesma simulao, mas concedendo a role ACESSO criada anteriormente ao usurio SCOTT. Para isso, irei conceder as roles CONNECT e RESOURCE role ACESSO.

SYS> drop user scott cascade; Usurio eliminado. SYS> grant connect,resource to acesso; Concesso bem-sucedida. SYS> select * from dba_role_privs where grantee = 'ACESSO'; GRANTEE -----------------------------ACESSO ACESSO GRANTED_ROLE -----------------------------RESOURCE CONNECT ADM --NO NO DEF --YES YES

-- Criando novamente o usurio SCOTT SYS> create user SCOTT identified by TIGER 2 default tablespace USERS 3 quota unlimited on USERS; Usurio criado. -- Concedendo a role ACESSO SYS> grant acesso to scott; Concesso bem-sucedida. SYS> connect scott/tiger Conectado. SCOTT> select * from session_privs; PRIVILEGE ----------------------------------------

CREATE CREATE CREATE CREATE CREATE CREATE CREATE CREATE CREATE

SESSION TABLE CLUSTER SEQUENCE PROCEDURE TRIGGER TYPE OPERATOR INDEXTYPE

9 linhas selecionadas.
Podemos perceber acima que o privilgio UNLIMITED TABLESPACE no foi concedido implicitamente ao usurio SCOTT, e que a criao da tabela EMP no tablespace SYSTEM falhar como demonstrado abaixo:

SCOTT> create table emp (id number) tablespace SYSTEM; create table emp (id number) tablespace system * ERRO na linha 1: ORA-01950: no h privilgios no tablespace SYSTEM
No mais, como as roles so grupos nomeados de privilgios, acredito que roles criadas e definidas pelo prprio DBA permitem um gerenciamento mais fcil e melhor destes privilgios.

Questo de Segurana
No bom que um usurio comum (no administrador) tenha cota em um tablespace crtico como o SYSTEM. Em relao ao privilgio UNLIMITED TABLESPACE que permite que um usurio tenha cotas ilimitadas em todos os tablespaces, inclusive no SYSTEM, realmente isso no meu ponto de vista caracteriza-se como uma falha de segurana. Para verificar se algum usurio possui o privilgio de sistema UNLIMITED TABLESPACE, utilize o SQL abaixo, e caso alguma linha seja retornada aconselho que seja feita uma anlise para identificar realmente a necessidade deste(s) usurio(s) ter(em) cota ilimitada em todos os tablespaces do banco de dados:

SQL> select grantee from dba_sys_privs where privilege = 'UNLIMITED TABLESPACE' order by grantee;
Para verificar se algum usurio (comum) possui alguma cota que foi concedida de forma explcita no tablespace SYSTEM, utilize o SQL abaixo, e caso alguma linha seja retornada, aconselho que a mesma seja revogada (definindo QUOTA 0) o quando antes:

SQL> select username,bytes,max_bytes from dba_ts_quotas where tablespace_name = 'SYSTEM' order by username;
Para verificar se algum usurio (comum) possui algum segmento (tabela e/ou ndce) no tablespace SYSTEM, utilize o SQL abaixo, e caso alguma linha seja retornada, analise a possibilidade mover o segmento (ALTER TABLE ... MOVE ou ALTER INDEX ... REBUILD) para um tablespace diferente do SYSTEM.

SQL> select owner,segment_type,segment_name from dba_segments where tablespace_name = 'SYSTEM' and

owner not in ('SYS','SYSTEM') order by owner,segment_name; Leia mais: http://eduardolegatti.blogspot.com/2009/02/unlimited-tablespace-vsresource.html#ixzz1K9t2PWOn Under Creative Commons License: Attribution Non-Commercial

You might also like