ver usuario sobre rol privilegios permisos listar grants esquema ejemplo dar consultar asignar all oracle

sobre - listar grants de usuario oracle



Seleccionar Grant en todas las tablas que posee un usuario específico (4)

Necesito otorgar permiso de selección para todas las tablas propiedad de un usuario específico a otro usuario. ¿Puedo hacer esto con un solo comando en la línea de:

Grant Select on OwningUser.* to ReceivingUser

O tengo que generar el sql para cada tabla con algo como:

Select ''GRANT SELECT ON OwningUser.''||Table_Name||''TO ReceivingUser'' From All_Tables Where Owner=''OWNINGUSER''


Bueno, no es una declaración única, pero es lo más cercano que se puede obtener con Oracle:

BEGIN FOR R IN (SELECT owner, table_name FROM all_tables WHERE owner=''TheOwner'') LOOP EXECUTE IMMEDIATE ''grant select on ''||R.owner||''.''||R.table_name||'' to TheUser''; END LOOP; END;


Desde http://psoug.org/reference/roles.html , crea un procedimiento en tu base de datos para que tu usuario lo haga:

CREATE OR REPLACE PROCEDURE GRANT_SELECT(to_user in varchar2) AS CURSOR ut_cur IS SELECT table_name FROM user_tables; RetVal NUMBER; sCursor INT; sqlstr VARCHAR2(250); BEGIN FOR ut_rec IN ut_cur LOOP sqlstr := ''GRANT SELECT ON ''|| ut_rec.table_name || '' TO '' || to_user; sCursor := dbms_sql.open_cursor; dbms_sql.parse(sCursor,sqlstr, dbms_sql.native); RetVal := dbms_sql.execute(sCursor); dbms_sql.close_cursor(sCursor); END LOOP; END grant_select;


sí, es posible, ejecuta este comando:

digamos que tienes un usuario llamado thoko

grant select any table, insert any table, delete any table, update any table to thoko;

nota: trabajó en la base de datos oráculo


tablas + vistas + informes de errores

SET SERVEROUT ON DECLARE o_type VARCHAR2(60) := ''''; o_name VARCHAR2(60) := ''''; o_owner VARCHAR2(60) := ''''; l_error_message VARCHAR2(500) := ''''; BEGIN FOR R IN (SELECT owner, object_type, object_name FROM all_objects WHERE owner=''SCHEMANAME'' AND object_type IN (''TABLE'',''VIEW'') ORDER BY 1,2,3) LOOP BEGIN o_type := r.object_type; o_owner := r.owner; o_name := r.object_name; DBMS_OUTPUT.PUT_LINE(o_type||'' ''||o_owner||''.''||o_name); EXECUTE IMMEDIATE ''grant select on ''||o_owner||''.''||o_name||'' to USERNAME''; EXCEPTION WHEN OTHERS THEN l_error_message := sqlerrm; DBMS_OUTPUT.PUT_LINE(''Error with ''||o_type||'' ''||o_owner||''.''||o_name||'': ''|| l_error_message); CONTINUE; END; END LOOP; END; /