Minimum Permissions for Scan Accounts
Forcepoint DSPM Oracle structured data connectors scan Oracle data sources to enable cataloging and classification. This section outlines the minimum Oracle privileges needed for a scan
account, enabling customers to create a least-privilege user instead of relying on SYS, SYSTEM, or a DBA-level account.
Applies to: Oracle Database 12c and later (on-prem / Oracle Cloud / Autonomous DB).
| Requirement | Reason |
|---|---|
| Network reachability to the Oracle listener host:port (default 1521) | Establish TCP connection |
A database user with CREATE SESSION system privilege |
Establish JDBC connection |
The connector uses the Oracle thin JDBC driver. No SYSDBA / SYSOPER administrative connection is required. The DBA role is also not
required, although a number of DBA_* dictionary views are read.
The connector reads a mix of ALL_* and DBA_* data-dictionary views. ALL_* views show only
objects the current user has at least one privilege on; DBA_* views show every object in the database but require explicit dictionary access. Full coverage for table-size
calculation depends on DBA_SEGMENTS, DBA_LOBS, and DBA_INDEXES, which are DBA-only.
The simplest way to grant DBA_* read
access without granting the full DBA role is the SELECT ANY DICTIONARY system privilege.
Operations and Required Permissions
- Connection test and database metadata
Operation Dictionary views read Minimum grant Test connection CREATE SESSIONSchema enumeration ALL_USERSImplicit Table/view listing ALL_TABLES,ALL_OBJECTSImplicit (rows filtered to objects the user can SELECT)Column / PK / FK metadata (bulk prefetch) ALL_TAB_COLUMNS,ALL_TAB_IDENTITY_COLS,ALL_CONSTRAINTS,ALL_CONS_COLUMNSImplicit Approximate row count ALL_TABLES(NUM_ROWS)Implicit Approximate table & index size DBA_TABLES,DBA_SEGMENTS,DBA_LOBS,DBA_INDEXESSELECT ANY DICTIONARY - Data sampling
Operation Tables read Minimum grant SAMPLE(percent)row sampleTarget user table/view SELECTon the target table/viewFirst-N-rows fallback ( WHERE ROWNUM <= ?)Target user table/view SELECTon the target table/viewColumn payload sampling Target user table/view SELECTon the target table/view - Trustee (users & roles) extraction
Operation Dictionary views read Minimum grant List users DBA_USERSSELECT ANY DICTIONARYList roles DBA_ROLES,SELECT ANY DICTIONARYRecursive role membership / admin-role detection DBA_ROLE_PRIVS SELECT ANY DICTIONARYThe connector detects admin-role holders by checking membership in (
DBA,SYSDBA,SYSOPER,SYSBACKUP',SYSDG,SYSKM,IMP_FULL_DATABASE,EXP_FULL_DATABASE,DATAPUMP_EXP_FULL_DATABASE,DATAPUMP_IMP_FULL_DATABASE) viaDBA_ROLE_PRIVSviaDBA_ROLE_PRIVS. - Permissions extraction
Operation Dictionary views read Minimum grant Database-level system privileges ( CREATE SESSION,CONNECT)DBA_SYS_PRIVS,DBA_ROLE_PRIVSSELECT ANY DICTIONARYSchema- and table-level grants DBA_TAB_PRIVSSELECT ANY DICTIONARYColumn-level grants DBA_COL_PRIVSSELECT ANY DICTIONARYAdmin-role holders DBA_ROLE_PRIVSSELECT ANY DICTIONARY
Granting data access
db_datareader is the SELECT ANY
TABLE system privilege, which grants SELECT on every current and future user table and view (excluding the SYS schema by
default):GRANT SELECT ANY TABLE TO FP_USER;This privilege is read-only; it does not allow INSERT, UPDATE, DELETE, or any DDL.
-- 1) Create the scan account
CREATE USER FP_USER IDENTIFIED BY "<STRONG_PASSWORD>";
-- 2) Allow JDBC login
GRANT CREATE SESSION TO FP_USER;
-- 3) Data + metadata access — full read access to the entire datasource
GRANT SELECT ANY TABLE TO FP_USER;
-- 4) Dictionary access for metadata, trustee, and permissions extraction
GRANT SELECT ANY DICTIONARY TO FP_USER;Verification
FP_USER and
run:-- Connection + privilege overview
SELECT * FROM SESSION_PRIVS;
SELECT * FROM USER_SYS_PRIVS;
-- Metadata & data scan
SELECT COUNT(*) FROM ALL_USERS;
SELECT OWNER, TABLE_NAME, NUM_ROWS FROM ALL_TABLES FETCH FIRST 5 ROWS ONLY;
SELECT * FROM <SCHEMA>.<TABLE> WHERE ROWNUM <= 10;
SELECT SUM(BYTES) FROM DBA_SEGMENTS; -- via SELECT ANY DICTIONARY
-- Trustee scan
SELECT USERNAME, ACCOUNT_STATUS FROM DBA_USERS FETCH FIRST 5 ROWS ONLY;
SELECT ROLE FROM DBA_ROLES FETCH FIRST 5 ROWS ONLY;
SELECT GRANTEE, GRANTED_ROLE FROM DBA_ROLE_PRIVS FETCH FIRST 5 ROWS ONLY;
-- Permissions extraction
SELECT GRANTEE, PRIVILEGE FROM DBA_SYS_PRIVS FETCH FIRST 5 ROWS ONLY;
SELECT * FROM DBA_TAB_PRIVS FETCH FIRST 5 ROWS ONLY;
SELECT * FROM DBA_COL_PRIVS FETCH FIRST 5 ROWS ONLY;All queries should return without ORA-00942 (table or view does not exist) or ORA-01031 (insufficient privileges). Empty result sets are acceptable when the
underlying object has no matching rows.
What is not required
-
SYSDBA,SYSOPER,SYSBACKUP,SYSDG,SYSKMadministrative connections -
The
DBArole -
IMP_FULL_DATABASE,EXP_FULL_DATABASE,DATAPUMP_*roles -
ALTER ANY TABLE,CREATE ANY TABLE,DROP ANY TABLE -
INSERT ANY TABLE,UPDATE ANY TABLE,DELETE ANY TABLE -
UNLIMITED TABLESPACE.