visualizar usuarios usuario sobre rol privilegios permisos otro otorgar listar grants gestion esquema dar copiar consultar asignar oracle schema grant

sobre - otorgar privilegios a usuarios oracle



Forma correcta de otorgar a los usuarios acceso a esquemas adicionales en Oracle (3)

AFAIK necesita hacer el objeto de subvenciones de a uno por vez.

Normalmente, usaría un script para hacer esto, algo como:

SELECT ''GRANT ALL ON ''||table_name||'' TO BOB;'' FROM ALL_TABLES WHERE OWNER = ''ALICE'';

Y similar para otros objetos db.

Puede poner un paquete en cada esquema que necesite para emitir el subsidio desde el cual pasará por todas las llamadas de cada declaración de GRANT a través de un EJECUTAR INMEDIATO.

p.ej

PROCEDURE GRANT_TABLES IS BEGIN FOR tab IN (SELECT table_name FROM all_tables WHERE owner = this_user) LOOP EXECUTE IMMEDIATE ''GRANT SELECT, INSERT, UPDATE, DELETE ON ''||tab.table_name||'' TO other_user''; END LOOP; END;

Tengo dos usuarios, Bob y Alice, en Oracle, ambos creados al ejecutar los siguientes comandos como sysdba de sqlplus:

create user $blah identified by $password; grant resource, connect, create view to $blah;

Quiero que Bob tenga acceso completo al esquema de Alice (es decir, a todas las tablas), pero no estoy seguro de qué concesión ejecutar y si ejecutarla como sysdba o como Alice.

Feliz de escuchar acerca de cualquier buen puntero al material de referencia también, no parece ser capaz de obtener una buena respuesta a esto, ya sea de Internet o "Oracle Database 10g The Complete Reference", que está sentado en mi escritorio.


Hay muchas cosas a considerar. Cuando dices acceso, ¿prefieres las tablas con el nombre de otros usuarios? Puede usar sinónimos públicos para que pueda ocultar el propietario original, si eso es un problema. Y luego conceda privilegios en el sinónimo.

También quiere planificar lo mejor que pueda. Más tarde, ¿querrá que Frank también pueda acceder al esquema de Alice? No desea tener que volver a otorgar privilegios en N número de tablas. Usar una función de base de datos sería una mejor solución. Otorgue la selección a la función "ALICE_TABLES", por ejemplo, y cuando otro usuario necesite acceso, solo otorgue privilegios a la función. Esto ayuda a organizar las subvenciones que hace dentro de la base de datos.


Otra solución si tienes un dueño diferente:

BEGIN FOR x IN (SELECT owner||''.''||table_name ownertab FROM all_tables WHERE owner IN (''A'', ''B'', ''C'', ''D'')) LOOP EXECUTE IMMEDIATE ''GRANT SELECT ON ''||x.ownertab||'' TO other_user''; END LOOP; END;