creating a read only user in Oracle I have an Oracle database and a user that has all privileges to access that database. Now I want to create a new read only user who can only get the DDL of that database and can only read the data. What are the least privileges or roles that are needed to be granted to the new user? I don't want to perform any kind of alter, update or delete on that database.
You need to grant the create session privilege in order for the user to be able to connect. Then grant the select privilege on every table the user needs to access. To grant the user the privilege to read all tables in the entire database you can use the select any table privilege. 

I think the PUBLIC role has the execute privilege for the DBMS_METADATA package so the user should be able to extract the DDL of the tables automatically.