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; /