2011-06-01 15 views
8

Tengo un montón de tablas en un tablespace, casi 100. Tengo que otorgar privilegios Select, Insert, Update en todas esas tablas a un usuario. ¿Es posible? Cuando escribo:Grant Select, Insert, Update to a Tablespace

GRANT USE OF TABLESPACE MYTABLESPACE TO USERNAME 

me sale error de Oracle "privilegio válido o falta"

Respuesta

8

utilizar la vista de diccionario de datos dba_tables (resp all_tables, si no se puede acceder dba_tables.):

declare 
    l_SQL varchar2(4000); 
begin 
    for cur in (
    select * from dba_tables where tablespace_name = 'mytablespace') 
    loop 
    l_sql := 'grant select, insert, update on ' || cur.owner || '.' || cur.table_name || ' to myuser'; 
    --dbms_output.put_line(l_SQL || ';'); 
    execute immediate l_SQL; 
    end loop; 
end; 

Si solo desea generar una secuencia de comandos, comente la ejecución inmediata y elimine el comentario de dbms_output.

+1

Gracias, eso hizo mi trabajo. –

10

USE OF TABLESPACE no es una opción documentada, ¿dónde lo encontraste?

Usted puede hacer esto para permitir a un usuario crear objetos en un espacio de tabla:

alter user username quota [amount] on mytablespace; 

Para concesión de seleccionar, insertar, actualizar y eliminar los objetos que tiene que ejecutar un comando separado grant para cada tabla:

grant select, insert, update, delete on mytable1 to username; 
.... 
Cuestiones relacionadas