Mengatur Hak Akses
Posted by Riyansyah Iqbal Saputra on January 8th, 2012 02:56 PM " SQL Fundamental
Pemberian Hak akses merupakan salah satu cara dalam mengatur tingkat keamanan dalam database. Database Security sendiri dikategorikan berdasarkan 2 jenis yaitu : System Security dan Data Security
System Security melindungi dan mengatur hak akses dan penggunaan database pada level sistem, seperti username, password, alokasi disc space yang diberikan pada user dan pengoperasian sistem yang dapat dioperasikan oleh user.
Data Security yaitu memastikan tidak adanya data yang corrupt dan terkontrolnya pengaksesan terhadap data tersebut.
System Privilege
System Privilege ini digunakan oleh database administrator untuk memberikan hak istimewa kepada user dalam menjalankan sistem.
Tipe-tipe hak istimewa DBA atau DBA Privileges :
CREATE USER : penerima privilege dapat membuat user database baru
DROP USER : penerima privilege dapat menghapus user
DROP ANY TABLE : penerima privilege dapat menghapus tabel apa saja dalam suatu schema
BACK UP ANY TABLE : penerima privilege dapat mem-back up tabel apa saja
SELECT ANY TABLE : penerima privilege dapat membuat query, tabel dan view dalam suatu schema
CREATE ANY TABLE : penerima privilege dapat membuat tabel pada schema apapun
MEMBUAT USER
Sebelum memberikan privilege, hal pertama yang harus kita lakukan yaitu membuat user baru terlebih dahulu yang diberi nama 'manager'.
Syntax :
CREATE USER user
IDENTIFIED BY password
contoh :
CREATE USER manager
IDENTIFIED BY 123
Pada tahap ini manager belum dapat melakukan apapun, karena manager hanya dibuat tanpa diberikan suatu privilege oleh database administrator.
HAK ISTIMEWA USER
Setelah user dibuat, maka database administrator dapat memberikanya system privilege
contoh System privilege yang dapat diberikan :
CREATE SESSION : untuk connect ke database
CREATE TABLE : untuk membuat tabel
CREATE SEQUENCE : membuat urutan dalam database schema
CREATE VIEW : membuat sebuah VIEW dalam suatu schema
CREATE PROCEDURE : membuat STORE PROCEDURE, FUNCTION atau PACKAGE dalam user's schema
Memberikan System Privilege Kepada User
Contoh :
GRANT CREATE SESSION, CREATE TABLE, CREATE SEQUENCE, CREATE VIEW, CREATE PROCEDURE
TO manager
Pada query diatas DBA memberikan 5 hak akses sekaligus yaitu create session, create table, create sequence, create view, dan create procedure
Memberikan Tablespace kepada USER
setelah kita memberikan sebuah privileges kepada user, kita harus memberikan sebuah quota agar user tersebut dapat melakukan aktifitasnya seperti membuat schema dll. Jika kita tidak memberikan quota, maka ketika user tersebut melakukan suatu pekerjaan membuat table contohnya maka akan terjadi pesan error sbb:
create table m (ad number) *
ERROR at line 1:
ORA-01950: no privileges on tablespace 'USERS'
Syntax memberikan quota yaitu :
GRANT size TABLESPACE TO user_name;
contoh :
GRANT UNLIMITED TABLESPACE TO Fern;
Membuat ROLE
Apa itu role ?? Role merupakan nama group dari beberapa privilege yang saling berhubungan yang dapat diberikan kepada user. Metode ini digunakan untuk memudahkan dalam mencabut dan mengontrol privilege yang diberikan.
User dapat mempunyai beberap role dan user yang berbeda dapat mempunyai role yang sama.
Syntax :
CREATE ROLE nama_roll
Membuat role :
CREATE ROLE manager
Memberikan Privilege kepada ROLE
GRANT CREATE SESSION, CREATE TABLE, CREATE SEQUENCE, CREATE VIEW, CREATE PROCEDURE
TO manager
Memberika Sebuah ROLE kepada USER
GRANT manager TO Fern, Beifern
Pada query diatas, Fern dan Beifern telah mendapat suatu roll manager yang berisikan hak akses berupa create session, create table, create sequence, create view, dan create procedure. dengan catatan Fern dan Beifern telah dibuat sebelumnya.
Selaint ROLE diatas, sudah ada role yang telah didefinisikan terlebih dahulu oleh Oracle yaitu:
CONNECT
Mencangkup System Privileges : ALTER SESSION, CREATE CLUSTER, CREATE DATABASE LINK, CREATE SEQUENCE, CREATE SESSION, CREATE SYNONYM, CREATE TABLE, CREATE VIEW
RESOURCES
Mencangkup System privileges : CREATE CLUSTER, CREATE INDEXTYPE, CREATE OPERATOR, CREATE PROCEDURE, CREATE SEQUENCE, CREATE TABLE, CREATE TRIGGER, CREATE TYPE
DBA
Mencangkup semua System Privileges
Contoh memberikan privileges DBA :
GRANT DBA TO Fern
Merubah PASSWORD
Selain membuat account user, DBA juga dapat merubah password dari user tersebut
contoh :
ALTER USER nama_user
IDENTIFIED BY password_baru
OBJECT PRIVILEGES
Apa itu Object Privilege? Object Privilege adalah sebuah privilege yang diberikan kepada user agar user tersebut dapat melakukan aksi tertentu seperti SELECT, UPDATE, dll kepada tabel, view, sequence, atau store procedure.
Perhatikan tabel dibawah ini :
Berdasarkan table diatas, ALTER hanya dapat memanipulasi TABLE dan SEQUENCE. SELECT hanya dapat memanipulasi TABLE, VIEW , dan SEQUENCE.
Syntax :
GRANT tipe_object_privilege(s)
ON OBJECT(nama_tabel/nama_view/nama_sequence/nama_procedure)
TO nama_user
Contoh Grant SELECT :
GRANT SELECT
ON employees
TO Fern
Contoh Grant UPDATE :
GRANT UPDATE(employee_id, job_id)
ON employees
TO Fern, Beifern
Contoh Grant SELECT yang diberikan kepada semua user :
GRANT SELECT
ON employees
TO PUBLIC
Karena tabel employees terdapat pada SCHEMA HR, maka Fern harus menggunakan SELECT statement dengan cara :
SELECT * FROM HR.employees
atau dapat juga menggunakan SYNONIM
contoh :
CREATE SYNONIM emp FOR HR.employees;
SELECT * FROM emp;
Guideline:
untuk memberikan sebuah object privilegE, object tersebut harus terdapat pada schema yang kita miliki.
Sang pemilik object dapat memberikan object privilege yang ia miliki kepada user lain
Sang pemilik object otomatis memiliki semua object privileges dari object tersebut
WITH GRANT OPTION
Mungkin timbul pertanyaan dibenak kalian, bisa ga sih user yang kita buat tadi seperti Fern dan Beifern dapat meneruskan hak aksesnya kepada user lain?? jawabanya BISA. yaitu dengan menggunakan statement WITH GRANT OPTION
contoh :
GRANT SELECT, INSERT
ON employees
TO Fern
WITH GRANT OPTION
Dengan query diatas, Fern dapat meneruskan hak akses yang dia miliki kepada user lain
MENCABUT HAK AKSES YANG DIBERIKAN
Setelah kita memberikan hak akses kepada user lain, kita juga dapat mencabut privilege yang kita berikan yaitu dengan menggunakan REVOKE statement
Syntax :
REVOKE jenis_privilege " all
ON object
FROM user
[CASCADE CONSTRAINT]
contoh :
REVOKE SELECT
ON EMPLOYEES
FROM Fern