DCL Commands (Oracle)

Download as pdf or txt
Download as pdf or txt
You are on page 1of 14

DB Security

Authentication: Authentication is a process of verifying the


credentials (username & password) of a user to login into the
system.

Authorization: Authorization is process of verifying whether the


user as permissions to perform any operation on the database.

Data Control Language: DCL commands are used to enforce


database security in multiple users’ database environment. These
are two types….

 GRANT
 REVOKE

GRANT: Grant command is used for giving a privilege or


permission for a user to perform operations on the database.

Syntax: GRANT <Privilege Name> on <object name> To {User} ;

Privilege Name: Used to granted permission to the users for some


rights are ALL and SELECT.

Object Name: It is the name of database objects like Table, Views


and Stored Procedure etc….

User: Used for to whom an access rights is being granted.

REVOKE: Revoke command removes user access rights /


privileges to the database OR taking back the permission that is
given to a user.

Syntax: Revoke <privilege name> on <object name > from {user};


WORKING WITH DCL COMMANDS:

STEP1: CONNECT WITH SYSTEM DBA:

SQL> CONN SYSTEM / MANAGER;

CONNECTED.

STEP2: CREATE A NEW USER IN ORACLE DB:

SYNTAX:

SQL> CREATE USER <USER NAME> IDENTIFIED BY <PASSWORD>;

EX:

SQL> CREATE USER A IDENTIFIED BY A;

STEP3: CONNECT WITH USER "A":

SQL> CONN A/A;

ERROR:

ORA-01045: user A lacks CREATE SESSION privilege; logon denied

Warning: You are no longer connected to ORACLE.

NOTE: USER WAS CREATED BUT THIS USER IS DUMMY USER


BECAUSE IS NOT HAVING CONNECT PERMISSION.SO PERMISSION
MUST BE GIVEN TO USER "A".

STEP4: GRANTING CONNECT PERMISSIONS TO USER "A”:

SQL> CONN SYSTEM / MANAGER;

CONNECTED.

SQL> GRANT CONNECT TO A;

CONNECT = TO CONNECT TO ORACLE DB.


STEP5: NOW CONNECT WITH USER " A”:

SQL> CONN A/A;

CONNECTED.

STEP6: HOW TO CHANGING USER PASSWORD:

SQL> PASSWORD

Changing password for A

Old password: A

New password: 123

Retype new password: 123

Password changed

SQL> CONN A/123;

Connected.

NOTE:

1. PASSWORD CAN BE CHANGED BOTH USER & DBA.

2. PASSWORD CAN BE CHANGED BUT USERNAME CANNOT BE


CHANGED.

3. USER NAME IS NOT CASE SENSITIVE BUT PASSWORD IS CASE


SENSITIVE.

STEP7: NOW USER "A" CAN CREATE ITS OWN TABLES:

EX:

SQL> CREATE TABLE TEST1(SNO INT, NAME VARCHAR2(10));

Error: INSUFFICIENT PRIVILEGE.


STEP8: GRANTING CREATE TABLE PERMISSION FROM DBA:

SQL> CONN SYSTEM / MANAGER;

CONNECTED.

SQL> GRANT CREATE TABLE TO A;

GRANTED.

SQL> CONN A/123

EX:

SQL> CREATE TABLE TEST1(SNO INT, NAME VARCHAR2(10));

TABLE CREATED

STEP9: NOW USER "A" CAN INSERT ROWS INT A TABLE:

SQL> INSERT INTO TEST1 VALUES (1021,'SAI');

ERROR: INSUFFICIENT PRIVILEGE ON TABLE SPACE.

STEP10: GRANTING TABLE SPACE PERMISSION FROM DBA:

SQL> GRANT UNLIMITED TABLE SPACE TO A;

GRANTED.

SQL> CONN A/123

SQL> INSERT INTO TEST1 VALUES (1021,'SAI');

SQL> INSERT INTO TEST1 VALUES (1022,'JONES');

SQL> COMMIT;

SQL> UPDATE TEST1 SET NAME='MILLER' WHERE SNO=1022;

SQL> COMMIT;

SQL> DELETE FROM TEST1 WHERE SNO=1022;

SQL> COMMIT;

SQL> SELECT * FROM TEST1;


PRIVILEGES: PRIVILEGE IS RIGHT / PERMISSION GIVEN TO THE
USERS.ALL DATABASES ARE HAVING TWO TYPES OF PRIVILEGES.

i) SYSTEM PRIVILEGES

ii) OBJECT PRIVILEGES

i) SYSTEM PRIVILEGES:

> SYSTEM PRIVILEGES ARE GIVEN BY DBA.SUCH AS CREATE


SYNONYM, CREATE VIEW, CREATE MATERIALIZED VIEW, CREATE
INDEX ...............etc.

SYNTAX:

SQL> GRANT <SYSTEM PRIVILEGE> TO <USER1>;

EX:

SQL> CONN SYSTEM/MANAGER;

Connected.

SQL> GRANT CREATE SYNONYM, CREATE VIEW TO A;

Grant succeeded.

SQL> CONN A/123;

Connected.

SQL> CREATE SYNONYM SYN1 FOR TEST1;

Synonym created.

SQL> CREATE VIEW V1 AS SELECT * FROM TEST1;

View created.

NOTE:IF WE WANT TO VIEW SYSTEM PRIVILEGES RELATED TO USER


IN ORACLE DB THEN WE FOLLOW THE FOLLOWING
DATADICTIONARY IS " SESSION_PRIVS "SYNTAX:

SQL> SELECT * FROM SESSION_PRIVS;


ii) OBJECT PRIVILEGES: OBJECT PRIVILEGES ARE USED TO USERS
TO ALLOWED TO PERFORM SOME OPERATIONS ON OBJECT.THESE
PRIVILEGES ARE GIVEN BY EITHER DBA (OR) DB DEVELOPER.
ORACLE HAVING THE FOLLOWING OBJECT PRIVILEGES ARE INSERT,
UPDATE, DELETE, SELECT.

> THESE FOUR OBJECT PRIVILEGES ARE REPRESENTED BY USING


"ALL" KEYWORD.

SYNTAX:

GRANT <OBJECT PRIVILEGES> ON <OBJECT NAME> TO USER1;

EX:

SQL> CONN A/123;

SQL> SELECT * FROM DEPT;

(OR)

SQL> SELECT * FROM SYSTEM.DEPT;

ERROR at line 1:

ORA-00942: table or view does not exist

NOTE:USER "A" CANNOT SELECT / ACCESS DATA FROM DEPT TABLE


BECAUSE USER "A" IS NOT HAVING PERMISSION OF ACCESSING
DATA FROM DEPT.SO THAT WE WANT TO TAKE GRANT SELECT
PERMISSION FROM DBA.

EX:

SQL> CONN SYSTEM/MANAGER

Connected.

SQL> GRANT SELECT ON DEPT TO A;

Grant succeeded.
SQL> CONN A/123;

Connected.

SQL> SELECT * FROM SYSTEM.DEPT; -----ALLOWED

SQL> INSERT INTO SYSTEM.DEPT VALUES (50,'SAP','INDIA'); ---NOT


ALLOW

SQL> UPDATE SYSTEM.DEPT SET LOC='HYD' WHERE DEPTNO=50; ---


NOT ALLOW

SQL> DELETE FROM SYSTEM.DEPT WHERE DEPTNO=50; ---NOT


ALLOW

NOTE: USER "A" CANNOT PERFORM DML OPERATIONS ON DEPT


TABLE BECAUSE USER "A" DID NOT HAVE PERMISSION FROM DBA.

EX:

SQL> CONN SYSTEM/MANAGER

SQL> GRANT INSERT, UPDATE, DELETE ON DEPT TO A;

SQL> CONN A/123;

SQL> INSERT INTO SYSTEM.DEPT VALUES (50,'SAP','INDIA'); ---


ALLOW

SQL> UPDATE SYSTEM.DEPT SET LOC='HYD' WHERE DEPTNO=50; ---


ALLOW

SQL> DELETE FROM SYSTEM.DEPT WHERE DEPTNO=50; --- ALLOW

NOTE:TO VIEW THE INFORMATION ABOUT PRIVILEGE AND ALSO


GRANTER THEN WE USE FOLLOWING DATADICTIONARY "
USER_TAB_PRIVS_MADE ".

EX:

SQL> CONN SYSTEM/MANAGER;

SQL> DESC USER_TAB_PRIVS_MADE;

SQL> SELECT GRANTEE, TABLE_NAME, GRANTOR, PRIVILEGE FROM


USER_TAB_PRIVS_MADE;
GRANTEE TABLE_NAME GRANTOR PRIVILEGE

A DEPT SYSTEM DELETE

NOTE:TO VIEW THE INFORMATION ABOUT PRIVILEGE AND ALSO


WHO RECEIVIED PERMISSION(GRANTEE) THEN WE USE FOLLOWING
DATADICTIONARY " USER_TAB_PRIVS_RECD".

EX:

SQL> CONN A/123;

SQL> DESC USER_TAB_PRIVS_RECD;

SQL> SELECT GRANTOR, PRIVILEGE, TABLE_NAME FROM


USER_TAB_PRIVS_RECD;

GRANTOR PRIVILEGE TABLE_NAME

SYSTEM UPDATE DEPT

EX:

SQL> CONN SYSTEM/MANAGER

SQL> REVOKE ALL ON DEPT FROM A;

> DBA(SYSTEM) CANCELLED ALL PERMISSIONS OF USER " A ".

WITH GRANT OPTION:

WHEN A USER RECEIVING PERMISSIONS "WITH GRANT OPTION"


THEN THAT USER ALSO ALLOW TO GIVE OBJECT PRIVILEGE TO
ANOTHER USER.EX:

SQL> CONN SYSTEM/MANAGER

SQL> GRANT SELECT ON DEPT TO U1;


SQL> CONN U1/U1;

SQL> GRANT SELECT ON SYSTEM.DEPT TO U2;

ERROR:

INSUFFICIENT PRIVIKEGES TO GRANT TO U2.

> TO OVERCOME THE ABOVE PROBLEM THEN USE "WITH GRANT


OPTION " BY SYSTEM.

EX:

SQL> CONN SYSTEM/MANAGER

SQL> GRANT SELECT ON DEPT TO U1 WITH GRANT OPTION;

SQL> CONN U1/U1;

SQL> GRANT SELECT ON SYSTEM.DEPT TO U2;

Grant succeeded.

SQL> CONN U2/U2;

SQL> SELECT * FROM SYSTEM.DEPT; -----ALLOWED

CREATE SESSION:BY USING CREATE SESSION SYSTEM PRIVILEGE


ONLY USER ARE ALLOWED TO CONNECT TO ORACLE DB OTHERWISE
ORACLE SERVER RETURNS AN ERROR.

EX:

SQL> CONN SYSTEM/MANAGER

SQL> CREATE USER U3 IDENTIFIED BY U3;

User created.

SQL> CONN U3/U3;

ERROR:

ORA-01045: user U3 lacks CREATE SESSION privilege; logon denied


> TO OVERCOME THE ABOVE "CREATE SESSION" PRIVILEGE
PROBLEM THEN WE FOLLOW THE FOLLOWING SOLUTION IS,

SQL> CONN SYSTEM/MANAGER

SQL> GRANT CREATE SESSION TO U3;

SQL> CONN U3/U3;

CONNECTED.

SQL> CREATE TABLE TEST11(SNO INT, NAME VARCHAR2(10));

ERROR at line 1:

ORA-01031: insufficient privileges

SQL> CONN SYSTEM/MANAGER

SQL> GRANT CREATE TABLE TO U3;

SQL> GRANT UNLIMITED TABLESPACE TO U3;

SQL> CONN U3/U3;

SQL> CREATE TABLE TEST11(SNO INT, NAME VARCHAR2(10));

TABLE CREATED.

SQL> INSERT INTO TEST11 VALUES(1021,'SAI');

SQL> UPDATE TEST11 SET NAME='SAI KUMAR' WHERE SNO=1021;

SQL> DELETE FROM TEST11 WHERE SNO=1021;

SQL> SELECT * FROM TEST11;

NOTE:TO VIEW ALL USERS DETAILES IN ORACLE THEN WE FOLLOW


THE FOLLOWING DATADICTIONARY IS "ALL_USERS".

EX:

SQL> DESC ALL_USERS;

SQL> SELECT USERNAME FROM ALL_USERS;


SYNTAX TO DROP A USER:

SQL> DROP USER <USER NAME> CASCADE;

EX:

SQL> DROP USER A CASCADE;

ROLE: ROLE IS COLLECTION OF SYSTEM / OBJECT PRIVILEGES


AND CREATED BY DBA.

WHY WE NEED TO CREATE ROLE:

IN REALTIME ENVIRONMENT NO. OF USERS WORKING ON


SAME PROJECT IN THIS SOME GROUP OF USERS REQUIRES COMMON
SET OF SYSTEM PRIVILEGES OR OBJECT PRIVILEGES AT THIS TIME
DBA CREATING ROLE AND ASSIGNING THAT ROLE TO THE NO. OF
USERS.

STEPS TO CREATE A ROLE:

STEP1: CREATE A ROLE:

SYNTAX:

CREATE ROLE <ROLE NAME>;

STEP2: ASSIGN SYSTEM / OBJECT PRIVILEGES TO A ROLE:

SYNTAX:

GRANT SYSTEM PRIVILEGES / OBJECT PRIVILEGES TO <ROLE


NAME>;

STEP3: ASSIGN ROLE TO THE NO. OF USERS:

SYNTAX:

GRANT ROLENAME TO USER1, USER2, USER3, ..................;


EX:

SQL> CONN SYSTEM/MANAGER

SQL> CREATE ROLE R1;

Role created.

SQL> GRANT CREATE SYNONYM TO R1;

Grant succeeded.

SQL> GRANT R1 TO U1, U2;

Grant succeeded.

NOTE1:TO VIEW SYSTEM PRIVILEGES RELATED TO ROLE THEN WE


ARE USING THE FOLLOWING DATADICTIONARY IS "
ROLE_SYS_PRIVS ".

EX:

SQL> DESC ROLE_SYS_PRIVS;

SQL> SELECT ROLE, PRIVILEGE FROM ROLE_SYS_PRIVS WHERE


ROLE='R1';

ROLE PRIVILEGE

----------- --------------------------------

R1 CREATE SYNONYM

NOTE2:TO VIEW OBJECT PRIVILEGES RELATED TO ROLE THEN WE


USE THE FOLLOWING DATADICTIONARY IS " ROLE_TAB_PRIVS "

EX:

SQL> DESC ROLE_TAB_PRIVS;

SQL> SELECT ROLE, PRIVILEGE, TABLE_NAME FROM


ROLE_TAB_PRIVS WHERE ROLE='R1';
ROLE PRIVILEGE TABLE_NAME

--------- --------------------- ----------------------

R1 SELECT DEPT

NOTE3:TO VIEW ROLES GRANTED TO A USER IN ORACLE DB THEN


USE THE FOLLOWING DATADICTIONARY IS "USER_ROLE_PRIVS".

EX:

SQL> CONN U1/U1;

SQL> DESC USER_ROLE_PRIVS;

SQL> SELECT USERNAME, GRANTED_ROLE FROM


USER_ROLE_PRIVS;

USERNAME GRANTED_ROLE

---------------- ---------------------------

U1 R1

NOTE: "WITH GRANT OPTION " DOESN’T WORK ON ROLE.

EX:

SQL> CONN SYSTEM/MANAGER

SQL> GRANT INSERT ON DEPT TO R1 WITH GRANT OPTION;

ERROR at line 1:

ORA-01926: cannot GRANT to a role WITH GRANT OPTION

SYNTAX TO DROP A ROLE:

SQL> DROP ROLE <ROLE NAME>;

EX:

SQL> DROP ROLE R1;


GRANTING PERMISSIONS TO DIFFERENT LEVELS:

SYNTAX:

GRANT <SYSTEM PRIVILEGES> TO <USER> / <ROLE> / <PUBLIC>;

&

GRANT <OBJECT PRIVILEGES> ON <OBJECT NAME> TO <USER> /


<ROLE> / <PUBLIC>;

REVOKING PERMISSIONS TO DIFFERENT LEVELS:

SYNTAX:

REVOKE <SYSTEM PRIVILEGES> FROM <USER> / <ROLE> /


<PUBLIC>;

&

REVOKE <OBJECT PRIVILEGES> ON <OBJECT NAME> FROM <USER>


/ <ROLE> / <PUBLIC>;

You might also like