I've create a user account that has "read only" for a database. I want this user account to also be able to query dba_free_space, dba_data_files,...... Right now, when you try to do something basic, like desc dba_free_space, I get SYS.DBA_FREE_SPACE does not exist. So I believe the user account does not have enough privilege. I want this account to only be able to query the information.
The user account was created by:
ursor_1 := DBMS_SQL.OPEN_CURSOR;
sqlstmt_1 := 'CREATE USER vcgrp IDENTIFIED BY readonly DEFAULT TABLESPACE vc_data
TEMPORARY TABLESPACE vc_temp
QUOTA UNLIMITED ON vc_data
QUOTA UNLIMITED ON vc_temp
QUOTA UNLIMITED ON vc_index';
DBMS_SQL.PARSE (cursor_1, sqlstmt_1, DBMS_SQL.NATIVE);
DBMS_SQL.CLOSE_CURSOR(cursor_1);
END IF;
activity := 'granting permissions to vcgrp';
cursor_1 := DBMS_SQL.OPEN_CURSOR;
sqlstmt_1 := 'GRANT CREATE SESSION, SELECT ANY TABLE, SELECT ANY DICTIONARY TO vcgrp';
DBMS_SQL.PARSE (cursor_1, sqlstmt_1, DBMS_SQL.NATIVE);
DBMS_SQL.CLOSE_CURSOR(cursor_1);
Is my assumption correct that I'm missing some permission? Thank you
SQL> grant CREATE SESSION, SELECT ANY TABLE, SELECT ANY DICTIONARY TO harry;
Grant succeeded.
SQL> conn harry@test
Enter password: *****
Connected.
SQL> desc dba_free_space;
Name Null? Type
----------------------------------------- -------- ----------------------------
TABLESPACE_NAME VARCHAR2(30)
FILE_ID NUMBER
BLOCK_ID NUMBER
BYTES NUMBER
BLOCKS NUMBER
RELATIVE_FNO NUMBER
SQL> select * from dba_free_space
2 where rownum <4;
Bookmarks