Assume I do the following:
CREATE PUBLIC SYNONYM emp FOR scott.emp; GRANT insert ON scott.emp TO public; GRANT select ON scott.emp TO public;Then as another user, I can do the following without any problems:
SELECT * FROM emp; INSERT INTO emp VALUES .....;If you are still experiencing problems, you'll have to post your exact code along with complete error messages.
Also, it is typically a bad idea to grant privileges to PUBLIC. Grant privileges to only those users that need it. If granting privileges to multiple users is cumbersome, consider granting to a role you create and then grant that role to those users.