tugas 3
-DDL :
DDL atau Data Definiton Language adalah sebuah bahasa yang digunakan untuk mendefinisikan pendefinisian data. Terdiri dari perintah-perintah untuk membentuk, mengubah atau menghapus tabel beserta kolom-kolom dan type data penyusunnya, serta perintah-perintah untuk menetapkan hubungan dan batasan-batasan data.
5 Macam perintah DDL yang ada di Oracle :
- CREATE TABLE
Digunakan untuk membuat tabel. Syntax umumnya sebagai berikut :
CREATE TABLE [schema, ] table ( column datatype [DEFAULT expr][,...]);
Contoh pembuatan sebuah tabel adalah :
CREATE TABLE dept (deptno NUMBER(2), dname VARCHAR2(14), loc VARCHAR2(13));
- ALTER TABLE
Statemen ALTER TABLE digunakan untuk :
~ Menambahkan kolom baru
Untuk menambah kolom baru, syntax umumnya sebagai berikut :
ALTER TABLE table ADD (column datatype [DEFAULT expr] [, column datatype]...);
Contoh penambahan kolom pada tabel dept yang dibuat di atas adalah :
ALTER TABLE dept ADD (job_id VARCHAR2(9));
~ Memodifikasi kolom yang sudah ada
Kita dapat memodifikasi kolom dengan mengubah tipe datanya, ukuran dan nilai defaultnya.
Sintaks dari perintah ALTER TABLE untuk memodifikasi kolom sebagai berikut :
ALTER TABLE table MODIFY (column datatype [DEFAULT expr] [, column datatype] ... );
Contoh :
ALTER TABLE dept MODIFY (dname VARCHAR2(30));
Table altered.
~ Menghapus kolom
Klausa DROP COLUMN digunakan untuk menghapus kolom yang tidak diperlukan lagi pada table. Sebagai contoh untuk menghapus kolom job_id pada pada tabel dept di atas.
ALTER TABLE dept DROP COLUMN job_id;
- DROP TABLE
Digunakan untuk melakukan penghapusan tabel. Melakukan penghapusan table dengan perintah DROP, berarti mengerjakan hal berikut :
Semua data dan struktur dari table akan dihapus
Semua transaksi pending akan di-commit
Semua indeks akan dihapus
Perintah drop ini tidak bisa di-rollback
Sebagai contoh, jika kita ingin menghapus tabel dept, maka yang harus dilakukan adalah :
DROP TABLE dept;
- RENAME
Digunakan untuk merubaha nama dari suatu object (table,view,sequence atau synonim). Sebagai contoh, jika kita ingin menghapus tabel dept,maka perintah yang harus dilakukan adalah :
RENAME dept TO detail_dept;
- CREATE VIEW
View adalah tabel bayangan. Tidak menyimpan data secara fisik. Biasanya berupa hasil query dari tabel-tabel dalam sebuah database. Syntax untuk melakuakn VIEW adalah :
CREATE VIEW AS
Contoh : view MahasiswaPria yang diambil dari tabel Mahasiswa di mana field JenisKel = “L”. Syntax dari contoh tersebut adalah :
CREATE VIEW MahasiswaPria AS SELECT * FROM Mahasiswa WHERE jeniskel=”L”
- CREATE TRIGGER
Trigger adalah sebuah obyek dalam database yang berupa prosedur yang merespon setiap kali terdapat proses modifikasi pada tabel. Proses modifikasi berupa: Insert, Update dan delete. Syntax pembuatan Trigger:
CREATE TRIGGER ON TABLE FOR [DELETE] [,] [INSERT] [,] [UPDATE] AS
Sebagai contoh adalah membuat trigger dg nama tLogUbahNilai untuk setiap penambahan / update data pada tabel Pesertakul, dilakukan penambahan data pada tabel LogHistoris.
Syntax dari contoh tersebut adalah :
CREATE TRIGGER tLogUbahNilai ON TABLE pesertakul FOR UPDATE, INSERT AS INSERT INTO LogHistoris (tanggal, proses) VALUES (getDate(), ‘Terjadi proses perubahan data nilai’)
DDL - Data Definition Language
-merupakan kumpulan perintah SQL yang digunakan untuk membuat, mengubah dan menghapus
struktur dan definisimetadata dari objek-objek database.
- Database
- Table
- View
- Index
- Procedure (Stored Procedure)
- Function
- Trigger
CREATE TABLE ms_karyawan (
kode_cabang varchar(10) default NULL,
kode_karyawan varchar(10) NOT NULL,
nama_depan varchar(8) default NULL,
nama_belakang varchar(9) default NULL,
jenis_kelamin varchar(1) default NULL,
PRIMARY KEY (kode_karyawan)
)
Daftar Perintah DDL pada MySQL 5.0
- Pembuatan (CREATE)
- CREATE DATABASE
- CREATE FUNCTION
- CREATE INDEX
- CREATE PROCEDURE
- CREATE TABLE
- CREATE TRIGGER
- CREATE VIEW
- Perubahan (ALTER & RENAME)
- ALTER DATABASE
- ALTER FUNCTION
- ALTER PROCEDURE
- ALTER TABLE
- ALTER VIEW
- RENAME TABLE
- Penghapusan (DROP)
- DROP DATABASE
- DROP FUNCTION
- DROP INDEX
- DROP PROCEDURE
- DROP TABLE
- DROP TRIGGER
- DROP VIEW
Tabel Matrix Perintah DDL MySQL 5.0
OBJECT | CREATE | ALTER | DROP | RENAME |
DATABASE | Yes | Yes | Yes | |
FUNCTION | Yes | Yes | Yes | |
INDEX | Yes | Yes | ||
PROCEDURE | Yes | Yes | Yes | |
TABLE | Yes | Yes | Yes | Yes |
TRIGGER | Yes | Yes | ||
VIEW | Yes | Yes | Yes |
-DML:
DML atau Data manipulation Language merupakan perintah-perintah yang berfungsi untuk melakukan manipulasi data ataupun objek-objek yang ada didalam table. Definisi lainnya tentang DML adalah Perintah-perintah untuk memanipulasi data pada basis data, misalnya perintah untuk memilih data (query), menyisipkan, mengubah dan menghapus data dalam basis data.
Bentuk manipulasi yang dapat dilakukan oleh DML diantaranya adalah untuk keperluan pencarian kembali data lama, penyisipan data baru, penghapusan data, pengubahan data, dll. Sedangkan DML sendiri menurut jenisnya dapat dibagi menjadi 2 jenis yaitu procedural dan non procedural.
Beberapa manfaat atau kegunaan dari DML diantaranya adalah sebagai berikut :
1. Pengambilan informasi yang disimpan dalam basis data
2. Penyisipan informasi baru ke basis data
3. Penghapusan informasi dari basis data
4. Modifikasi informasi yang disimpan dalam basis data
5. Query adalah perintah yang ditulis untuk mengambil informasi. Bagian dari DML yang menangani pengambilan informasi ini disebut bahasa query.
Selanjutnya kita akan membahasa tentang sintaks dan contoh dari penggunaan DML, yaitu :
1. Insert
Berfungsi Untuk memasukkan sejumlah data kedalam table yang telah dibuat.
Syntax:
insert into table_name (column1, column2, …, column_n)
values (value1, value2, …, value_n);
Contoh:
insert into pegawai (npk,nama)
values (‘5106100032?, ‘Eko Susilo’);
2. Delete
Berfungsi untuk menghapus sejumlah data yang ada didalam table yang telah dibuat.
Syntax:
delete table_name where column_name=column_content;
Contoh:
delete mahasiswa where npk=’5106100032?;
3. Update
èBerfungsi untuk melakukan perubahan terhadap sejumlah data yang ada didalam table yang telah dibuat.Syntax:
update table_name
set column1_name=column1_content
where column2_name=column2_content;
Contoh:
update pegawai
set nama=’Eka Susila’, alamat=’U-144?
where nrp=’5106100032?;
4. Select
Berfungsi untuk melakukan pengambilan sejumlah data yang ada di dalam table untuk ditampilkan ataupun dimanipulasi
Syntax:
Select column from table_name
Contoh:
Select * from pegawai;
Konsep Basis Data
Definisi:
Basis data terdiri dari 2 kata, yaitu basis dan data. Basis adalah markas/gudang, tempat bersarang atau berkumpul, sedangkan data adalah representasi fakta dunia nyata yang mewakili suatu objek seperti manusia (pegawai, siswa, pembeli, pelanggan), barang, hewan, peristiwa, konsep, keadaan dan sebagainya yang direkam dalam bentuk angka, huruf, simbol, teks, gambar, bunyi dan kombinasinya.
Basis data dapat didefinisikan dari beberapa sudut pandang:
1. Himpunan kelompok data (arsip) yang saling berhubungan yang diorganisasi sedemikian rupa agar kelak dapat dimanfaatkan kembali secara cepat dan mudah.
2. Kumpulan data yang saling berhubungan yang disimpan secara bersama sedemikian rupa dan tanpa pengulangan (redundansi) yang tidak perlu untuk memenuhi berbagai kebutuhan.
3. Kumpulan file/tabel/arsip yang saling berhubungan dan disimpan dlm media penyimpanan elektronis.
Operasi Dasar Basis Data
Sebuah basis data umumnya dibuat untuk mewakili sebuah semesta data yang spesifik. Misalnya basis data kepegawaian, basis data akademik, basis data inventori (pergudangan) dan sebagainya. Dalam basis data akademik, misalnya kita dapat menempatkan file mata pelajaran, file guru, file jadwal, file nilai dan seterusnya. Oleh karena itu operasi-operasi dasar yang dapat kita lakukan berkenaan dengan basis data dapat meliputi:
- Pembuatan basis data baru (create database) yang identik dengan pembuatan lemari arsip yang baru.
- Penghapusan basis data (drop database) yang identik dengan perusakan lemari rasip.
- Pembuatan file/tabel baru ke suatu basis data (create table), identik dengan penambahan map arsip baru.
- Penghapusan file/tabel dari suatu basis data (drop tabel).
- Penambahan/pengisian data baru ke sebuah file/table di sebuah basis data.
- Pengambilan data dari sebuah file/tabel.
- Pengubahan data dari sebuah file/tabel.
- Penghapusan data dari sebuah file/tabel.
Tujuan Basis Data
1. Kecepatan dan Kemudahan (Speed)
2. Efisiensi Ruang Penyimpanan (Space)
3. Keakuratan (Accuracy)
4. Ketersediaan (Availability)
5. Kelengkapan (Completeness)
6. Keamanan (Security)
7. Kebersamaan Pemakaian (Sharebility)
DML - Data Manipulation Language
- merupakan kumpulan perintah SQL yang digunakan untuk proses pengolahan isi data di dalam table seperti memasukkan, merubah dan menghapus isi data - dan tidak terkait dengan perubahan struktur dan definisi tipe data dari objek database.
-
DML - Data Manipulation Language
DML sendiri adalah kumpulan perintah SQL yang berhubungan dengan pekerjaan mengolah data di dalam table - dan tidak terkait dengan perubahan struktur dan definisi tipe data dari objek database seperti table, column, dan sebagainya.
Contoh DML : Mengambil Seluruh Row Data dari table MS_KARYAWAN
SELECT *
FROM ms_karyawan
Contoh DML : Memasukkan data ke dalam tabel ms_karyawan
INSERT INTO ms_karyawan(
kode_cabang,
kode_karyawan,
nama_depan,
nama_belakang,
jenis_kelamin)
VALUES ('cab-001','kar-001','Feris','Thia','Laki-laki');Beberapa daftar Perintah DML MySQL 5.0
- CALL
- DELETE
- DO
- HANDLER
- INSERT
- LOAD DATA INFILE
- REPLACE
- SELECT
- TRUNCATE
- UPDATE
-DCL :
DCL atau Data Control Language
DCL merupakan perintah SQL yang berhubungan dengan pengaturan hak akses user MySQL, baik terhadap server, database, tabel maupun field. Perintah SQL yang termasuk dalam DCL antara lain :
* GRANT : Perintah ini digunakan untuk memberikan hak / izin akses oleh administrator (pemilik utama) server kepada user (pengguna biasa). Hak akses tersebut berupa hak membuat (CREATE), mengambil (SELECT), menghapsu (DELETE), mengubah (UPDATE) dan hak khusus berkenaan dengan sistem databasenya.
SINTAKS : GRANT privileges ON tbname TO user
CONTOH : grant select, update, insert, delete on perpustakaan.buku to 'ali'@'localhost';
* REVOKE : perintah ini memiliki kegunaan terbalik dengan GRAND, yaitu untuk menghilangkan atau mencabut hak akses yang telah diberikan kepada user oleh administrator.
SINTAKS : REVOKE privileges ON tbname FROM user
CONTOH : revoke select, update, insert, delete on perpustakaan.buku from 'ali'@'localhost';
JENIS JENIS JOIN SQL :
1. INNER JOIN : hanya akan menampilkan baris untuk data yang memiliki nilai yang sama pada field kunci dengan tabel yang berelasi
2. LEFT JOIN : hanya menampilkan data dengan mengacu pada tabel yang ada disebelah kiri.
3. RIGHT JOIN : hanya menampilkan data dengan mengacu pada tabel yang ada disebelah kanan.
4. FULL JOIN : merupakan gabungan dari LEFT JOIN dan RIGHT JOIN .
DCL adalah perintah-perintah yang digunakan untuk membantu mengontrol keamanan setiap database atau sebagian isi dari database dengan membuat hak – hak akses tertentu bagi setiap user.Perintah tersebut adalah :a. Grantb. Revoke
Penjelasan tentang Grant
- GRANT : Digunakan untuk memberikan hak akses oleh administrator (pemilik utama) server kepada user (pengguna biasa). Hak akses tersebut berupa hak membuat (CREATE), mengambil (SELECT), menghapus (DELETE), mengubah (UPDATE), dan hak khusus berkenaan dengan sistem databasenya.- Grant berfungsi juga untuk membuat user baru dan memberikan hak istimewa.- Grant digunakan untuk memberikan privilege kepada tabel yang didefinisikan kepada pemakai lain.
- Privilege untuk pemakai dalam perintah grant didefinisikan dengan menggunakan nama-nama privilege. Nama privilege memudahkan admin untuk dapat memberikan privilege tanpa harus tahu apa nama field dan tabel yang harus diisi.- Perintah grant secara otomatis akan menambah data pemakai apabila data nama pemakai yang disertakan pada perintah tersebut belum ada dalam tabel user. Perintah grant memudahkan administrator untuk tidak perlu melakukan perintah pendefinisian privilege dengan menggunakan sql. Karena dengan menggunakan sql, kita harus hafal nama tabel yang harus diisi, field apa saja yang harus diisi, jumlah field yang harus diisi.
Sintak Umum : GRANT hak_akses ON nama_tabel TO pemakai;GRANT ALL PRIVILEGES ON database_name.* TO ‘myuser’IDENTIFIED BY ‘mypassword’;Contoh Penggunaan :1. GRANT SELECT ON Point_Of_Sales.jenis TO Febe;2. GRANT SELECT ON Point_Of_Sales.jenisTO Winda;3. GRANT SELECT ON Point_Of_Sales.item TO Elfrida;4. GRANT ALL PRIVILEGES ON Point_Of_Sales.User TO Admin;5. GRANT ALL ON Point_Of_Sales.jualDetail TO Admin6. SHOW GRANTS FOR root@localhost;7. SHOW GRANTS FOR Admin;8. GRANT SELECT,INSERT ON Point_Of_Sales.jualDetail TO kasir;9. GRANT SELECT(Kode,Nama) ON Point_Of_Sales.jenis TO Elfrida;10. GRANT UPDATE (kodeItem,NmItem,kategori,Harga) ON Point_Of_Sales.item TO Elfrida;Penjelasan tentang RevokeREVOKE : Perintah ini memiliki kegunaan terbalik dengan GRANT, yaitu untuk menghilangkan hak akses yang telah diberikan kepada user oleh administrator atau mencabut hak-hak dari seorang user terhadap database tertentu atau sebagian isi dari database.
Sintak Umum Revoke :
REVOKE hak_akses ON nama_tabel FROM namaAccount@namaHost;
Menghapus batasan hak akses utk database & tabel :
REVOKE hak_akses ON nama_database.nama_tabel
FROM user;
Menghapus batasan hak akses untuk kolom tertentu :
REVOKE hak_akses(field1,field2, field3,…) ON
nama_database.nama_tabel FROM userPenulisan perintah revoke :
- Hak akses(field) : kita harus memberikan sedikitnya satu hak akses. Untuk setiap hak akses yang diberikan, dapat juga diberikan daftar field yang diletakkan dalam kurung, dan dipisahkan dengan tanda koma. Contoh : REVOKE select (nim, nama), update, insert(nim), …- NamaTabel : merupakan nama tabel yang dikenal hak akses tersebut, harus ada sedikitnya satu nama tabel. Dan dapat menggunakan simbol asterik (*) untuk mewakili semua tabel pada database aktif. Penulisan namaTabel dapat juga diikuti oleh nama database diikuti nama tabel yang dipisahkan dengan tanda titik. Menggunakan simbol *.* berarti semua database dan semua tabel yang dikenai hak akses tersebut.
Perintah-perintah lain yang termasuk dalam data control language adalah :
a. Commit
Merupakan perintah yang digunakan untuk memindahkan transaksi dari memory pemrosesan ke database atau menyimpan secara permanen perubahan-perubahan kedalam database.
b. Rollback
Merupakan perintah yang digunakan untuk membatalkan transaksi yang belum di commit atau membatalkan perubahan-perubahan terakhir dari perintah commit/rollback terakhir.Contoh normalisasi pada kasus lain
Sebelum mengetahui contoh normalisasi pada kasus kasus yang nyata, baiknya kita harus mengetahui dahulu pengertian dan penjelasan teknik normalisasi itu.
Teknik Normalisasi merupakan sebuah cara untuk membuat database dengan terstruktur dan terorganisasi supaya data terisimpan dalam tabel dengan baik dan efisien tanpa adanya pengulangan data(redudansi data).
Istilah normalisasi dapat disederhanakan menjadi memecah relasi menjadi beberapa tabel untuk mendapat database yang optimal
Contoh Normalisasi Pada Kasus Lainnya,
Memiliki field dengan banyak data / tidak tunggal
no_id tanggal nama_mahasiswa buku 1 06/03/2012 Achmad program, desain, animasi 2 06/03/2012 Aloy blog, program, musik 3 06/03/2012 Budi animasi, program, video 4 06/03/2012 Charlie website, audio
Contoh teknik normalisasi sampai ketiga
Teknik Normalisasi Pertama :
Membuat dan menentukan primary key pada tablenya, supaya setiap data atau field field lainya tergantung hanya pada satu field yaitu yang dijadikan primary key. pada kasus ini field nim yang akan dijadikan primary key bukan id_buku atau id_penerbit.
Keterangan : field yang dicetak miring yaitu primary key
tbl_peminjaman
nim nama_mahasiswa id_buku judul_buku id_penerbit penerbit 4311122006 Malik Aslam 1221 program C++ 35 Alex W 4311122007 M. fadli 1322 membuat animasi 55 Dian Sastro 4311122025 Muharam 1422 belajar program 23 Wiji S 4311122008 Nabila 1321 audio video 55 Dian Sastro 4311122014 Tiara Rahmawati 1221 program C++ 35 Alex W
Teknik Normalisasi Kedua :
lalu pada teknik yang kedua, field field yang tergantung pada satu field harus dipisahkan, seperti pada contoh field judul_buku tergantung pada field id_buku dan penerbit tergantung dengan field id_penerbit, maka dari itu field tersebut di pisahkan dengan tabel peminjaman, sehingga harus dibuat tabel yang terpisah.
tbl_peminjaman
nim nama_mahasiswa id_buku id_penerbit 4311122006 Malik Aslam 1221 35 4311122007 M. fadli 1322 55 4311122025 Muharam 1422 23 4311122008 Nabila 1321 55 4311122014 Tiara Rahmawati 1221 35
tbl_buku
id_buku judul_buku 1221 program C++ 1322 membuat animasi 1422 belajar program 1321 audio video 1221 belajar program
tbl_penerbit
id_penerbit penerbit 35 Alex W 55 Dian Sastro 23 Wiji S 55 Dian Sastro 35 Alex W
Teknik Normalisasi Ketiga :
selanjutnya teknik normalisasi ketiga, setelah field field dipisah sehingga dibuat table yang baru, maka waktunya pembenahan data. Diketahui sebelumnya pada tabel buku record kelima terdapat keganjilan data yang tidak sesuai dengan field id_bukunya dan pada tabel penerbit pun terdapat redudansi data atau pengulangan data, maka dari itu tabel buku dan tabel penerbit harus diperbaiki dan diubah sehingga tidak terjadinya kesalahan dalam penyimpanan data, seperti pada contoh di bawah ini :
tbl_buku
id_buku judul_buku 1221 program C++ 1322 membuat animasi 1422 belajar program 1321 audio video
tbl_penerbit
id_penerbit penerbit 35 Alex W 55 Dian Sastro 23 Wiji S
kurang lebih seperti itu cara teknik normalisasi sampai ketiga pada database, sebenarnya masih banyak lagi contoh teknik normalisasi pada database, seperti normalisasi Boyce-Codd, normalisasi keempat dan lain lain, hanya yang lainnya itu jarang di gunakan, dan yang digunakan hanya normalisasi sampai ketiga saja.-SQL :SQL (Structured Query Language) adalah sebuah bahasa yang digunakan untuk mengakses data dalam basis data relasional. Bahasa ini secara de facto merupakan bahasa standar yang digunakan dalam manajemen basis data relasional. Saat ini hampir semua server basis data yang ada mendukung bahasa ini untuk melakukan manajemen datanya.
Standarisasi SQL dimulai pada tahun 1986, ditandai dengan dikeluarkannya standar SQL oleh ANSI. Standar ini sering disebut dengan SQL86.Standar tersebut kemudian diperbaiki pada tahun 1989 kemudian diperbaiki lagi pada tahun 1992. Versi terakhir dikenal dengan SQL92. Pada tahun 1999 dikeluarkan standar baru yaitu SQL99atau disebut juga SQL99, akan tetapi kebanyakan implementasi mereferensi pada SQL92.-
Saat ini sebenarnya tidak ada server basis data yang 100% mendukung SQL92. Hal ini disebabkan masing-masing server memiliki dialek masing-masing.
Pemakaian dasar
Secara umum, SQL terdiri dari dua bahasa, yaitu Data Definition Language (DDL) dan Data Manipulation Language (DML). Implementasi DDL dan DML berbeda untuk tiap sistem manajemen basis data (SMBD)[3], namun secara umum implementasi tiap bahasa ini memiliki bentuk standar yang ditetapkan ANSI. Artikel ini akan menggunakan bentuk paling umum yang dapat digunakan pada kebanyakan SMBD.
Transact-SQL (disingkat T-SQL) adalah jenis bahasa untuk basis data SQL yang dikeluarkan oleh perusahaan Microsoft dan Sybase. Pada sistem berbasis Microsoft, T-SQL ini diimplementasikan pada perangkat lunak Microsoft SQL Server, sedangkan pada sistem berbasis Sybase, bahasa Transact-SQL ini dipakai pada perangkat lunaknya yang bernama Adaptive Server Enterprise dan Sybase SQL Server.
Seperti bahasa dalam kebanyakan basis data SQL, T-SQL ini mempunyai beberapa fitur:
- bahasa kendali alir (control flow)
- variabel lokal
- pemrosesan matematis, string, tanggal (date), dll
- perbaikan perintah DELETE dan UPDATE.
Kata kunci (keyword) yang dipakai meliputi perintah BEGIN dan END, BREAK, CONTINUE, GOTO, IF dan ELSE, RETURN, WAITFOR, serta WHILE. Beberapa contoh dari penggunaan bahasa T-SQL ini adalah:
IF DATEPART(dw, GETDATE()) = 7 OR DATEPART(dw, GETDATE()) = 1 PRINT 'It is the weekend.' ELSE PRINT 'It is a weekday.'
Untuk perintah lebih dari satu baris, maka blok dengan awal BEGIN dan akhiran END harus dipakai seperti contoh ini:
IF DATEPART(dw, GETDATE()) = 7 OR DATEPART(dw, GETDATE()) = 1 BEGIN PRINT 'It is the weekend.' PRINT 'Get some rest!' END ELSE BEGIN PRINT 'It is a weekday.' PRINT 'Get to work!' END
Tipe suatu variable biasanya dinyatakan dengan perintah DECLARE:
DECLARE @Counter INT SET @Counter = 10 WHILE @Counter > 0 BEGIN PRINT 'The count is ' + CONVERT(VARCHAR(10), @Counter) SET @Counter = @Counter - 1 END
Suatu variable @ArticleCount dapat diberi nilai awal dengan jumlah baris COUNT yang terdapat pada table Articles, sebagai berikut:
DECLARE @ArticleCount INT SELECT @ArticleCount = COUNT(*) FROM Articles INSERT
Injeksi SQL adalah sebuah teknik yang menyalahgunakan sebuah celah keamanan yang terjadi dalam lapisan basis data sebuah aplikasi. Celah ini terjadi ketika masukan pengguna tidak disaring secara benar dari karakter-karakter pelolos bentukan string yang diimbuhkan dalam pernyataan SQL atau masukan pengguna tidak bertipe kuat dan karenanya dijalankan tidak sesuai harapan. Ini sebenarnya adalah sebuah contoh dari sebuah kategori celah keamanan yang lebih umum yang dapat terjadi setiap kali sebuah bahasa pemrograman atau skrip diimbuhkan di dalam bahasa yang lain.
Bentuk injeksi SQL ini terjadi ketika masukan pengguna tidak disaring dari karakter-karakter pelolos dan kemudian diteruskan ke dalam sebuah pernyataan SQL. Ini menimbulkan potensi untuk memanipulasi pernyataan-pernyataan yang dilakukan pada basis data oleh pengguna akhir aplikasi.
Baris kode berikut menggambarkan celah keamanan ini:
pernyataan := "SELECT * FROM pengguna WHERE nama = '" + namaPengguna + "';"
Jika variabel "namaPengguna" dirangkai sedemikian rupa oleh pengguna yang bermaksud buruk, pernyataan SQL tersebut bisa melakukan lebih daripada yang pengarangnya maksudkan. Sebagai contoh, mengeset variabel "namaPengguna" sebagai
a' or 't'='t
menjadikan pernyataan SQL ini oleh bahasa yang memuatnya:
SELECT * FROM pengguna WHERE nama = 'a' or 't'='t';
Jika kode ini akan digunakan dalam sebuah prosedur untuk melakukan otentikasi, maka contoh ini dapat dipakai untuk memaksakan pemilihan sebuah nama pengguna yang sah karena evaluasi 't'='t' akan selalu bernilai benar.
Secara teori, perintah SQL sah apapun bisa diinjeksi melalui metode ini, termasuk menjalankan banyak pernyataan. Nilai "namaPengguna" berikut ini pada pernyataan di atas akan menyebabkan dihapusnya tabel "pengguna" dan juga pengambilan semua data dari tabel "data":
a';DROP TABLE pengguna; SELECT * FROM data WHERE nama LIKE '%
Masukan ini menjadikan pernyataan akhir SQL sebagai berikut:
SELECT * FROM pengguna WHERE nama = 'a';DROP TABLE pengguna; SELECT * FROM data WHERE nama LIKE '%';
Penanganan tipe yang tidak benar
Bentuk injeksi SQL ini terjadi ketika sebuah unsur masukan pengguna tidak bertipe kuat atau tidak diperiksa batasan-batasan tipenya. Ini dapat terjadi ketika sebuah unsur numerik akan digunakan dalam sebuah pernyataan SQL, tetapi pemrogram tidak melakukan pemeriksaan untuk memastikan bahwa masukan pengguna adalah numerik. Sebagai contoh:
pernyataan := "SELECT * FROM data WHERE id = " + variabel_a + ";"
Terlihat jelas dari pernyataan ini pengarang memaksudkan variabel_a menjadi sebuah nomor yang berhubungan dengan unsur "id". Namun begitu, jika pada kenyataannya itu adalah sebuah string, maka pengguna akhir dapat memanipulasi pernyataan tersebut sesukanya, dan karena itu mengabaikan kebutuhan akan karakter-karakter pelolos. Sebagai contoh, mengeset variabel_a sebagai
1;DROP TABLE pengguna
akan menghapus tabel "pengguna" dari basis data karena hasil akhir SQL-nya akan menjadi sebagai berikut:
SELECT * FROM data WHERE id = 1;DROP TABLE pengguna;
Microsoft SQL Server adalah sebuah sistem manajemen basis data relasional (RDBMS) produk Microsoft. Bahasa kueri utamanya adalah Transact-SQL yang merupakan implementasi dari SQL standar ANSI/ISO yang digunakan oleh Microsoft dan Sybase. Umumnya SQL Server digunakan di dunia bisnis yang memiliki basis data berskala kecil sampai dengan menengah, tetapi kemudian berkembang dengan digunakannya SQL Server pada basis data besar.