I think your problem is that the user have rights to access tables etc, but there is no public synonym. So when selecting from a table Oracle tryis to find the table in the schema of the user and if not found, using any public synonym. There are two ways to solve this.
1. include the schemaname in the form, so that the query will be like this : selet * from scott.emp
2. simply create a public synonym for the tables and be careful with grants to users.