On importing a schema from ORacle 8 to 9, I find that certain dictionary and sys objects are not getting recognized , which is causing the corresponding packages and triggers to fail in compilation .
On querying the dba_sys_privs fro the user rights I find the following

CREATE ANY INDEX
CREATE ANY SEQUENCE
CREATE ANY SYNONYM
CREATE ANY TRIGGER
CREATE DATABASE LINK
CREATE SESSION
CREATE TABLE
CREATE VIEW
SELECT ANY TABLE
UNLIMITED TABLESPACE

the objects which are failing to get recognized are

dba_segments
v$parameter
user_tables

I get the following compilation errors.
462/1 PL/SQL: SQL Statement ignored
468/6 PL/SQL: ORA-00942: table or view does not exist


On checking the permissions on 'user_tables' I find
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTOR LIKE 'SYS%'
AND TABLE_NAME='USER_TABLES';

Grantee
======
PUBLIC

What are the points I need to investigate between the two schemas
Is not the 'SELECT ANY' privilege enough to read the above objects?Is there any package/SQL that needs to be run as part of the migration.

Is there some way to prevent me from doing the horrible step of doing explicit GRANTS on each of the above ( and possibly more ) objects for the particular user?

PS: What is the table I should query to know the permissioning for synonyms like v$parameter?