oracledba.help
Security

Privileges

TOC

Display

-- All Users with DBA Role

SELECT * FROM dba_role_privs WHERE granted_role='DBA';

-- User

SELECT owner, grantee, table_name, privilege
FROM dba_tab_privs
WHERE grantee='UserName|RoleName';

-- System

SELECT grantee, privilege, admin_option
FROM dba_sys_privs
WHERE grantee='UserName'
ORDER BY grantee, privilege;

-- Get Privs

SELECT * FROM USER_ROLE_PRIVS WHERE username = 'SCOTT';
SELECT * FROM USER_TAB_PRIVS  WHERE grantee  = 'SCOTT';
SELECT * FROM USER_SYS_PRIVS  WHERE username = 'SCOTT';

Grant

GRANT privilege ON <SchemaObject> TO <Username|Rolename>; 

Privileges to a Role are not Inheritied by PL/SQL (procs etc.) and Views

For a PL/SQL app to interact with external schema, the schema it is running from (ex: scott) must be explicitly granted the privilege on the object.

Example: GRANT SELECT ON etl.table42 TO scott;

Per Doc ID 13615.1

GRANT select ON hr.emp TO scott; 
GRANT connect,resource,dba TO scott;
GRANT create procedure TO scott;
GRANT UNLIMITED TABLESPACE TO scott;

CREATE PROCEDURE privilege includes create function and create package.

RESOURCE Is Now Deprecated - Use One of the Below Methods

  ALTER USER scott QUOTA UNLIMITED ON MyTablespace;
  GRANT UNLIMITED TABLESPACE TO scott;

DML Option

 GRANT ALL ON <Object> TO <User|Role>;
 -- Is the same as:
 GRANT SELECT, INSERT, UPDATE, DELETE, REFERENCES, ALTER, INDEX ON <Object> TO <User|Role>;

 -- Example
 GRANT ALL ON hr.emp TO scott;

 -- Grant All but sysdba Privs to a User
 GRANT SELECT ANY TABLE, INSERT ANY TABLE, UPDATE ANY TABLE, 
 DELETE ANY TABLE, EXECUTE ANY PROCEDURE, ALTER ANY PROCEDURE, 
 CREATE ANY TABLE, ALTER ANY TABLE, DROP ANY TABLE, CREATE ANY PROCEDURE, 
 DROP ANY PROCEDURE, CREATE ANY VIEW, DROP ANY VIEW, CREATE ANY INDEX, 
 DROP ANY INDEX, CREATE ANY SEQUENCE, DROP ANY SEQUENCE, 
 CREATE ANY TRIGGER, DROP ANY TRIGGER TO scott;

Data Steward Option

 -- This Allows a User to Perform DDL and DML on All User Tables in Database.
 GRANT ALL PRIVILEGES TO <Username|Role>;

Does not allow many DBA operations however.

Bulk Grant Privs via a Script

Confirm Schema Object (Tables) to Be Granted SELECT table_name FROM dba_tables WHERE owner='HR' ORDER BY table_name;

Create Script

spool C:\app\scripts\sql\spool\grants_APP1-to-HR.sql

SELECT 'GRANT SELECT ON HR.' || table_name || ' TO APP1;'  
FROM dba_tables 
WHERE owner='HR' 
ORDER BY table_name;

spool off

Example 2

SELECT 'GRANT SELECT ON ' || owner ||'.'|| table_name || ' TO RO_ROLE;'  
FROM dba_tables 
WHERE owner IN('AAA','BBB','CCC') 
OR    owner IN('XXX','YYY,'ZZZ') 
ORDER BY owner,table_name;

Review script removing any header info and then run it. @C:\app\scripts\sql\spool\grants_APP1-to-HR.sql2

Revoke

REVOKE Object_priv: <SELECT, INSERT, UPDATE, DELETE...> 
ON [schema.]object FROM <user|role|PUBLIC>;
----
REVOKE System_priv FROM <UserName, | rolename, | PUBLIC>;
REVOKE RoleName    FROM <UserName, | rolename, | PUBLIC>;
REVOKE select ON hr.emp FROM scott;
REVOKE imp_full_database FROM scott;
REVOKE dba FROM scott;

Create: User\Role\Priv Session

  -- Create User
 CREATE USER BI IDENTIFIED BY "************"
 DEFAULT   TABLESPACE BI
 TEMPORARY TABLESPACE temp;

 GRANT connect,resource TO BI;
 ALTER USER BI QUOTA UNLIMITED on BI;

 connect BI/************@DBTEST
 @/u01/app/scripts/tools/testdata.create.sql

 -- UPDATE BI.TEST1 SET name='Test000' WHERE test1_id=100;
 -- COMMIT;
 -- SELECT name FROM BI.TEST1 WHERE test1_id=100;

  -- Test
 CREATE USER x15 IDENTIFIED BY "************"
 DEFAULT   TABLESPACE BI
 TEMPORARY TABLESPACE temp;
 GRANT connect,resource TO x15;
 ALTER USER x15 QUOTA UNLIMITED on BI;

  -- Create Role
 CREATE ROLE BI_RW;

  -- GRANT Privs
 GRANT ALL ON BI.TEST1 TO BI_RW;
 GRANT BI_RW TO x15;

 connect x15/************@DBTEST

 -- UPDATE BI.TEST1 SET name='Test111' WHERE test1_id=100;
 -- COMMIT;
 -- SELECT name FROM BI.TEST1 WHERE test1_id=100;

 SYS> GRANT CREATE TABLE ON BI.TEST1 TO BI_RW;

 X15>
 CREATE TABLE BI.test2 (
 test2_id   number,
 title      varchar2(50) CONSTRAINT test_title_nn  NOT NULL,
 CONSTRAINT test2_pk PRIMARY KEY("TEST2_ID") USING INDEX TABLESPACE BI
 )
 TABLESPACE BI;

For more info see this.

<- Security