Sunday, December 8, 2013

Belajar MYSQL

Bacar - Pelajari - Sebarkan 
    Server MySQL dapat dijalankan pada sistem operasi Windows maupun keluarga   UNIX.  Adapun syntax query pada Win 9x dan keluarga UNIX adalah sama. Syntax query pada MySQL tidak case sensitive.

A.   Login ke Server MySQL:

Pada Win 9x
Masuk pada mode command prompt ( run -> command) , asumsikan MySQL diinstall pada direktori MySQL, maka user harus pindah ke direktori MySQL lalu masuk ke direktori bin.
Asumsi, lokasi awal pada tampilan command prompt adalah drive C, nama user adalah budi dan password adalah adi
syntaksnya: (note : nomor untuk menunjukkan urutan langkah)
 C:\cd mysql
 C:\mysql>cd bin
 C:\mysql\bin>winmysqladmin
 C:\mysql\bin>mysql –u budi –p
     password :***
Kalau berhasil akan ada prompt
Welcome to the MySQL monitor. Command end with ; tr\g.
Your MySQL connection id is 14 to server version : 3.23.49
Type ‘help:’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.

  1. Pada Keluarga UNIX
Pada shell ketik
# mysql –u budi –p
   password:*** 
Kalau berhasil akan ada prompt
 Welcome to the MySQL monitor. Command end with ; tr\g.
 Your MySQL connection id is 14 to server version : 3.23.49
 Type ‘help:’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.


B.   Strutur Data Pada MySQL

      Struktur penyimpanan data pada MySQL adalah sebagai berikut
                                                    
                                                            Database
                                                               /               \
                                                      Table            Table
                                                           /       \            /      \
                                                       Field    Field  Field   Field
    
    Database default yang dimiliki oleh root adalah mysql dan test.
    Untuk dapat melihat database yang terdapat pada MySQL digunakan perintah
        mysql>show databases;
        kemudian akan terlihat


           +-------------------------+
            |  Database             |
           +-------------------------+
            |  mysql                       |
            |  test                           |
           +-------------------------+

      Untuk dapat mempergunakan database mysql, digunakan
          mysql> use mysql;
    
      Untuk melihat isi database mysql ( table yang terdapat di dalam database       mysql )
          mysql> show tables;
( Note : Jika anda belum memilih database yang dipergunakan, maka commandnya   menjadi
      mysql> show tables from mysql; )
          kemudian akan telihat :


     
      Untuk melihat isi table user ( fields yang terdapat di dalam table user)
         mysql>show fields from user;
        kemudian akan terlihat:


  Untuk melihat isi data yang terdapat pada field host, user, password digunakan
    mysql> select host, user, password from user;
  Untuk melihat semua data yang terdapat pada field user digunakan
    mysql> select * from user;
 
Root dapat menambahkan user baru pada server MySQL
   Misalkan root menambahkan user budi dengan password adi pada host localhost.
   mysql> insert into user values(“ localhost”,”budi”,password(“adi”),”Y”,”Y”,”Y”, ”Y”,”Y”,”N”,”N”,”N”,”N”,”Y”,”N”,”Y”,”Y”,”Y”);
Sebagai root, anda harus selalu mengawasi masalah keamanan data pada database server anda, salah satu cara pencegahan pengaksesan database oleh orang lain dan pemakaian hak akses database anda, adalah dengan cara memberikan password kepada para user. Password yang disimpan dalam table user seharusnya disimpan dalam bentuk enkripsi, oleh sebab itu dipergunakan perintah
                    password(“adi”)
pada sintaks diatas, untuk user-user yang tidak memiliki password, sebaiknya user tersebut di remove, sintaksnya:
    mysql> delete from user where password=’’;
Root dapat mengubah passwordnya dengan cara
    mysql> update user set password=password(“password_baru”) where  user=”root”;
Untuk lebih jelasnya, baca bagian E.

 C. Database dan Table

     Database Level

  • Membuat database
Untuk membuat database baru, sehingga tidak berlaku jika database sudah ada atau anda tidak memiliki  privilege.
Sintaksnya :
CREATE DATABASE nama_db

  • Menghapus database
Untuk menghapus database beserta seluruh table di dalamnya. Perintah ini tidak berlaku jika database tidak ada atau anda tidak memiliki  privilege. Sintaksnya :
DROP DATABASE nama_db

  • Menggunakan database
Untuk menjadikan database menjadi default dan referensi dari table yang nantinya anda gunakan. Perintah ini tidak berlaku jika database tidak ada atau anda tidak memiliki  privilege. Sintaksnya :
USE nama_db

  • Menampilkan database
Untuk menampilkan daftar yang ada dalam system saat itu. Sintaksnya :
SHOW DATABASES


            Tampilannya adalah :

           +-----------------+

| Database      |

           +-----------------+

| contoh_db    |

| mysql             |

| test                 |

| ujian              |

           +-----------------+

4 rows in set (0.00 sec)

  
       Table Level
  • Membuat table
Untuk membuat table minimal anda harus menentukan namanya dan tipe kolom yang anda inginkan. Sintaks yang paling sederhana (tanpa ada definisi lain) adalah :
CREATE TABLE nama_tbl
(kolom1 tipekolom1(),kolom2 tipekolom2(), …)
Contoh : Anda ingin membuat table dengan nama profil yang memiliki kolom nama (bertipe char, lebar 20), kolom umur (bertipe integer), kolom jenis_kelamin (bertipe enum, berisi M dan F). Sintaksnya :
                        CREATE TABLE profil (
nama CHAR(20), umur INT NOT NULL,
jenis_kelamin ENUM(‘F’,’M’) );

Sedangkan perintah yang agak lengkap dalam membuat sebuah table adalah dengan menyertakan definisi tertentu. Misalnya perintah seperti ini :
                  CREATE TABLE peserta (
                    No SMALL INT UNSIGNED NOT NULL AUTO_INCREMENT,
                    Nama CHAR(30) NOT NULL,
                    BidangStudi ENUM(‘TS’,’WD’) NOT NULL,
                    PRIMARY KEY (No),
                    INDEX (Nama, BidangStudi)  );

Perintah di atas berarti membuat table peserta dengan kolom No sebagai PRIMARY KEY yaitu indeks table yang unik yang tidak bisa diduplikat dengan atribut AUTO_INCREMENT yaitu kolom yang otomatis dapat mengurutkan angka yang diisikan padanya. Sedangkan kolom Nama dan BidangStudi dijadikan indeks biasa.

  • Membuat indeks pada table
Menambahkan indeks pada table yang sudah ada baik yang unik ataupun yang biasa.

Sintaksnya :
CREATE INDEX nama_index ON nama_tbl (nama_kolom)
   CREATE UNIQUE INDEX nama_index ON nama_tbl (nama_kolom)


  • Menghapus table
Untuk menghapus table dalam database tertentu. Jika dilakukan maka semua isi, indeks dan atribut lain akan terhapus. Sintaksnya :
            DROP TABLE nama_tbl

  • Menghapus indeks
Untuk menghapus indeks pada suatu table. Sintaksnya :
            DROP INDEX nama-index ON nama_tbl

  • Melihat informasi table
Untuk melihat table apa saja yang ada di database tertentu. Sintaksnya :
SHOW TABLES FROM nama_db
Sedangkan untuk melihat deskripsi table atau informasi tentang kolom gunakan sintaks :       
DESC nama_tbl nama_kolom
            atau    SHOW COLUMNS FROM nama_tbl FROM nama_db
           
Misal untuk contoh di atas akan ditampilkan :
            +-----------------------------+
| Tables_in_contoh_db |
+-----------------------------+
| peserta                       |
| profil                           |
+-----------------------------+
2 rows in set (0.00 sec)



+-------------------------+-------------------------+-------+--------+---------------+------+
| Field                         | Type                         | Null   | Key   | Default       |Extra|
+-------------------------+-------------------------+-------+--------+---------------+------+
| nama                        | char(20)                   | YES  |           | NULL         |        |
| umur                         | int(11)                       |           | 0        |                     |       |
| jenis_kelamin         | enum('F','M')           | YES |           | NULL         |        |
+-------------------------+-------------------------+-------+--------+---------------+------+
3 rows in set (0.02 sec)

  • Mendapatkan atau menampilkan informasi dari table
Untuk menampilkan isi table dengan option-option tertentu. Misalnya untuk menampilkan seluruh isi table digunakan :
SELECT * FROM nama_tbl
            Untuk menampilkan kolom-kolom tertentu saja :
SELECT kolom1,kolom2,... FROM nama_tbl
            Untuk menampilkan isi suatu kolom dengan kondisi tertentu
SELECT kolom1 FROM nama_tbl WHERE kolom2=isikolom
  • Modifikasi struktur table
Dapat digunakan untuk mengganti nama table atau mengubah strukturnya seperti manambah kolom atau indeks, menghapus kolom atau indeks, mengubah tipe kolom dsb. Sintaks umum :
            ALTER TABLE nama_tbl action
            Untuk menambah kolom baru di tempat tertentu dapat menggunakan :
                        ALTER TABLE nama_tbl
                                    ADD kolom_baru type() definisi
Untuk menambah kolom_baru bertipe integer setelah kolom1 digunakan :
            ALTER TABLE nama_tbl
ADD kolom_baru INT NOT NULL AFTER kolom1

Untuk menambah indeks baru pada table tertentu baik yang unik ataupun yang biasa:
   ALTER TABLE nama_tbl ADD INDEX nama_index (nama_kolom)
   ALTER TABLE nama_tbl ADD UNIQUE nama_indeks (nama_kolom)
   ALTER TABLE nama_tbl ADD PRIMARY KEY nama_indeks   (nama_kolom)

Untuk mengubah nama kolom dan definisinya, misalnya mengubah nama kolom_baru dengan tipe integer menjadi new_kolom dengan tipe char dengan lebar 30 digunakan:
                        ALTER TABLE nama_tbl
                        CHANGE kolom_baru new_kolom CHAR(30) NOT NULL
Untuk menghapus suatu kolom dan seluruh atributnya, misal menghapus   kolom1 :
            ALTER TABLE nama_tbl DROP kolom1

Untuk menghapus indeks baik yang unik ataupun yang biasa digunakan :
            ALTER TABLE nama_tbl DROP nama_index
            ALTER TABLE nama_tbl DROP PRIMARY KEY

  • Modifikasi informasi dalam table.
Untuk menambah record atau baris baru dalam table, sintaksnya :
            INSERT INTO nama_tbl (nama_kolom) VALUES (isi_kolom)
atau    INSERT INTO nama_tbl SET nama_kolom=’isi_kolom’

Misalnya untuk menambah dua baris pada table  profil dengan isi  nama = deden & ujang  dan isi umur = 17 & 18 adalah :
   INSERT INTO profil (nama,umur) VALUES (deden,17), (ujang,18)
atau    INSERT INTO profil SET nama=’deden’, umur=’17’;
            INSERT INTO profil SET nama=’ujang’, umur=’18’;

Untuk memodifikasi record atau baris yang sudah ada yang bersesuaian dengan suatu kolom. Misalnya untuk mengubah umur deden menjadi 18 pada contoh di atas dapat digunakan sintaks :
                        UPDATE profil SET umur=18 WHERE nama=’deden’;

Untuk menghapus record atau baris tertentu dalam suatu table. Misalnya untuk menghapus baris yang ada nama ujang digunakan sintaks :
                        DELETE FROM profil WHERE nama=’ujang’;
            Jika WHERE tidak disertakan maka semua isi dalam table profil akan terhapus.


D. User dan Privileges

            Dalam system MySQL user diberikan hak istimewa (privilege) untuk mengakses suatu database beserta isinya yang masing-masing user dapat berbeda haknya. Jadi semacam set permisi dalam file system UNIX. Privilege tersebut terbagi atas :

Privilege untuk database dan table
Merupakan privilege yang mengoperasikan perintah-perintah dalam database dan table, terdiri atas :
§  CREATE
Mengijinkan user untuk membuat database dan table tapi tidak untuk membuat indeks.
§  DELETE
Mengijinkan user untuk menghapus record pada table.
§  DROP
Mengijinkan user untuk menghilangkan database dan table tapi tidak untuk menghilangkan indeks.
§  INDEX
Mengijinkan user untuk membuat indeks dari table.
§  INSERT
Mengijinkan user untuk memasukkan record baru pada table.
§  REFERENCES
Biasanya tidak digunakan.
§  SELECT
Mengijinkan user untuk menampilkan data dari table dengan perintah SELECT. Privilege ini tidak berguna untuk perintah SELECT yang tidak berhubungan dengan table.
§  UPDATE
Mengijinkan user untuk memodifikasi record yang sudah ada di dalam table.
§  ALTER
Megijinkan user untuk menggunakan perintah ALTER TABLE. Kadang-kadang cukup berbahaya memberikan hak ini pada sembarang user. Misalnya seorang user diberikan akses pada table-1 tapi tidak untuk table-2. Jika ia memiliki hak ini, maka ia dapat merubah nama table-2 menjadi table-1 sehingga otomatis ia bisa mengaksesnya.

Privilege untuk administrative
Merupakan privilege untuk operasi administrasi server dan mengontrol user dalam memberikan hak administratif pada user lain, terdiri atas :
§  FILE
Mengijinkan user untuk membaca atau menulis file di server. User ini akan dapat melihat perintah yang sedang dieksekusi oleh orang lain. Sebagai contoh, seseorang dengan hak seperti ini dapat melihat pasword user atau bahkan root yang sedang dimodifikasi didalam tabel user. Jadi akan sangat berbahaya memberikan hak ini pada sembarang user.
§  GRANT
Mengijinkan user untuk memberikan privilege yang dimilikinya kepada orang lain termasuk GRANT privilege. Anda harus berhati-hati memberikan hak ini karena jika ada dua user memiliki privilege yang berbeda tapi sama-sama punya GRANT privilege, kemudian saling memberikan privilege masing-masing, maka tentunya mereka akan lebih luas aksesnya.
§  PROCESS
Mengijinkan user untuk melihat informasi tentang proses apa yang sedang dijalankan server dengan perintah SHOW PROCESSLIST atau untuk membunuh proses yang sedang berjalan dengan perintah KILL.
§  RELOAD
Mengijinkan user untuk melakukan operasi administrasi server seperti melakukan FLUSH ataupun perintah mysqladmin reload, refresh, flush-host, flush-logs, flush-privileges, dan flush-tables.
§  SHUTDOWN
Mengijinkan user untuk menjalankan perintah mysqladmin shutdown untuk mematikan server.

Semua privilege di atas merupakan kolom-kolom yang terletak di dalam table-tabel pada database mysql.
Berikut contoh tampilan kolom dalam tabel user :

+-----------+-------+------------------+-------------+-------------+
| host      | user  | password         | select_priv | insert_priv |
+-----------+-------+------------------+-------------+-------------+
| localhost |       |                  | N           | N           |
| localhost | root  | 19a8f79627287ead | Y           | Y           |
| localhost | trans | 3d0b6786550a1849 | Y           | Y           |
+-----------+-------+------------------+-------------+-------------+

+-------------+-------------+-------------+-----------+-------------+
| update_priv | delete_priv | create_priv | drop_priv | reload_priv |
+-------------+-------------+-------------+-----------+-------------+
| N           | N           | N           | N         | N           |
| Y           | Y           | Y           | Y         | Y           |
| Y           | Y           | Y           | Y         | Y           |
+-------------+-------------+-------------+-----------+-------------+
+---------------+--------------+-----------+------------+
| shutdown_priv | process_priv | file_priv | grant_priv |
+---------------+--------------+-----------+------------+
| N             | N            | N         | N          |
| Y             | Y            | Y         | Y          |
| N             | N            | N         | N          |
+---------------+--------------+-----------+------------+
+-----------------+------------+------------+
| references_priv | index_priv | alter_priv |
+-----------------+------------+------------+
| N               | N          | N          |
| Y               | Y          | Y          |
| N               | Y          | Y          |
+-----------------+------------+------------+

Untuk lebih jelasnya lihat table berikut.

Struktur Grant Tabel Myself

user                    db                   host          tables_priv   column_priv

Kolom Akses

Host                    Host                 Host          Host          Host
User                    Db                   Db            Db            Db
Password         User                              User          User
                                                    Table_name    Table_name
                                                   Column_name

Kolom Privilege Database/Tabel

Alter_priv       Alter_priv           Alter_priv           -             -
Select_priv             Select_priv          Select_priv          -             -     
Insert_priv             Insert_priv          Insert_priv          -             -
Index_priv       Index_priv           Index_priv           -             -
Update_priv             Update_priv          Update_priv          -             -
Delete_priv             Delete_priv          Delete_priv          -             -
Create_priv             Create_priv          Create_priv          -             -
Drop_priv        Drop_priv            Drop_priv            -             -
Reference_priv   Reference_priv       Reference_priv       -             -

Kolom Privilege Administratif

File_priv        Grant_priv           Grant_priv    Table_priv    Column_priv
Grant_priv       -                          -             -             -
Reload_priv             -                          -             -             -
Shutdown_priv           -                          -             -             -
Process_priv            -                          -             -             -

E. Mengeset User

    Membuat User Baru
Setelah anda mengetahui tentang grant table dan hak privilege, anda dapat mulai membuat user baru dan memberikan hak istimewa kepada mereka. Secara umum sintaksnya adalah :
     GRANT privilege (kolom)
            ON apa
            TO user INDENTIFIED BY “password”
            WITH GRANT OPTION

Untuk menggunakan perintah di atas anda dapat mengganti kata yang dicetak miring dengan ketentuan sebagai berikut :
§     privilege
Diiisi dengan hak privilege seperti yang telah diterangkan di atas. Hak privilege yang tidak dapat diisikan di bagian ini adalah GRANT privilege karena ia didefinisikan di tempat lain. Selain itu, dapat juga diisikan perintah khusus yaitu :
ALL                             untuk memberikan semua hak privilege pada user
USAGE          jika tidak ada hak privilege yang diberikan, meskipun user dibuat
§     kolom
Diisi dengan nama kolom tertentu yang padanya diberikan hak privilege Ini adalah optional, dan jika lebih dari satu kolom maka dipisahkan dengan tanda koma.
§     apa
Diisi dengan nama level yang akan diberikan hak privilege padanya. Level di sini bisa berarti global (untuk semua database dan semua table), datebase tertentu dengan semua table di dalamnya, ataupun untuk table tertentu. Sedangkan untuk kolom didefinisikan dengan perintah kolom seperti di atas.
§     user
Diisi dengan user yang akan memperoleh hak privilege. Terdiri atas nama user dan nama host, jadi bisa juga anda memberikan hak privilege yang berbeda untuk dua user dengan nama yang sama tapi dari host yang berbeda. Nama user di sini adalah nama user di system MySQL, dan bukan nama user di Linux. Tapi biasanya MySQL akan langsung menjadikan nama user di Linux sebagai default jika saat koneksi tidak menyebutkan nama secara spesifik.
§     password
Diisi dengan password yang akan digunakan oleh user. Jika password dikosongkan berarti user tersebut dapat masuk ke system dengan tanpa password. Password ditulis di dalam tanda string dengan tulisan biasa karena dengan perintah GRANT ini, otomatis password akan terenkripsi.
Sedangkan perintah WITH GRANT OPTION adalah optional. Dengan perintah ini  GRANT privilege akan diberikan kepada user.

Perlu diketahui bahwa nama user, password, nama database, dan nama table adalah case sensitive, artinya sensitif  dengan besar-kecilnya huruf. Sedangkan nama host dan nama kolom dalam grant table tidak sensitif. Berikut diberikan beberapa contoh penggunaan perintah ini :

§     GRANT  ALL ON *.* TO ‘robi’@’localhost IDENTIFIED BY “gold”
WITH GRANT OPTION

Notasi *.* berarti user diberikan hak untuk mengakses semua database dan semua table. Di sini anda menjadikan seorang user sebagai superuser (setingkat root) dengan memberikan seluruh hak privilege termasuk GRANT privilege kepadanya. Ia

§     GRANT  ALL ON contoh_db.* TO ‘boris’@’localhost’ IDENTIFIED BY “ruby”
GRANT  ALL ON contoh_db.* TO ‘fred’@’ares.mars.net
IDENTIFIED BY “quartz”

Notasi             contoh_db.* berarti user diberikan hak untuk mengakses semua table di dalam database contoh_db. Di sini anda memberikan semua hak privilege kecuali GRANT privilege pada seorang user dari host tertentu.

§     GRANT  ALL ON contoh_db.* TO ‘max’@’% IDENTIFIED BY “diamond”

Karakter ‘%’ berarti untuk semua host.  Jadi user tersebut dapat mengakses semua table dalam database contoh_db dari seluruh host di dunia. Hal ini tentu saja sangat tidak aman kecuali anda memiliki pertimbangan tertentu.

§     GRANT  ALL ON contoh_db.* TO ‘joe’@’192.168.1.10 IDENTIFIED BY “water”
GRANT  ALL ON contoh_db.* TO ‘ardi’@’192.168.1.%IDENTIFIED BY “snow”
GRANT  ALL ON contoh_db.* TO ‘rick’@’192.168.1.0/28’ IDENTIFIED BY “air”

Nama host dapat juga diganti dengan nomor IP yang spesifik seperti baris pertama. Pada baris kedua berarti user dapat akses dari seluruh nomor IP di belakang 192.168.1. Sedangkan pada baris ketiga user yang akses berasal dari range IP 192.168.1.0 – 192.168.1.15.

§     GRANT RELOAD ON *.* TO ‘flush’@’localhost’ IDENTIFIED BY “flushpass”
GRANT SELECT ON contoh_db.* TO ‘roy’@’%’ IDENTIFIED BY “rock”
GRANT SELECT,INSERT,DELETE,UPDATE ON contoh_db.* TO ‘nani’@’%
IDENTIFIED BY “neon”
Perintah-perintah di atas memberitahukan bahwa user dibatasi hak privilege-nya hanya pada hal-hal tertentu saja.

§     GRANT SELECT ON contoh_db.anggota TO ‘asisten’@’localhost
IDENTIFIED BY “apple”
GRANT UPDATE (nama) ON contoh_db.anggota TO ‘asisten’@’localhost
GRANT UPDATE (alamat,TTL,status) ON contoh_db.anggota

Pada perintah pertama user dibolehkan menampilkan table anggota dari database contoh_db serta mengeset passwordnya.  Sedangkan pada baris kedua dan ketiga password tidak dituliskan lagi karena sebelumnya sudah ditentukan untuk user yang sama dan hak akses table yang sama pula.

Itulah beberapa kegunaan perintah GRANT untuk membuat user baru dan memberikan hak akses kepadanya. Untuk melihat kembali privilege apa saja yang telah anda berikan kepada seorang user gunakan perintah :
            SHOW GRANTS FOR user@host
Misal untuk user robi sebagai superuser seperti contoh di atas akan terlihat tampilan berikut:

+--------------------------------------------------------------------------------------------------------------+
| Grants for robi@localhost                                                                                     |
+--------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'robi'@'localhost' IDENTIFIED BY PASSWORD '5520dcc8561f8186' WITH GRANT OPTION |
+--------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

Sebenarnya prinsip kerja perintah ini adalah memasukkan informasi atau data ke kolom-kolom dalam table privilege. Untuk privilege dengan level global dimasukkan  ke table user, untuk privilege level database ke tabel db, sedangkan untuk privilege dengan level table dan kolom dimasukkan ke table tables_priv dan columns_priv.
Misalnya perintah untuk membuat superuser yaitu :
GRANT  ALL ON *.* TO ‘robi’@’localhost IDENTIFIED BY “gold”
WITH GRANT OPTION
akan sama dengan perintah INSERT di table user seperti berikut :
INSERT INTO user VALUES (“localhost”,”robi”,PASSWORD(“gold”),”Y”,”Y”, ”Y”,”Y”,”Y”,”Y”,”Y”,”Y”,”Y”,”Y”,”Y”,”Y”,”Y”,”Y”)
dengan tampilan tabel user sebagai berikut :
+-----------+------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+
| Host      | User | Password         | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv |
+-----------+------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+
| localhost | robi| 5520dcc8561f8186 | Y           | Y           | Y           | Y           | Y           | Y         | Y           | Y             | Y            | Y         | Y          | Y               | Y          | Y          |
+-----------+------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+
1 row in set (0.00 sec)

Atau untuk user yang dibatasi hak privilege-nya seperti :
      GRANT RELOAD ON *.* TO ‘flush’@’localhost’ IDENTIFIED BY “flushpass”
akan sama dengan perintah :
            INSERT INTO user (Host,User,Password,Reload_priv)
                        VALUES (“localhost”,”flush”,PASSWORD(“flushpass”),”Y”)
dengan tampilan dalam tabel user sebagai berikut :

+-----------+-------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+
| Host      | User  | Password         | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv |
+-----------+-------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+
| localhost | flush | 5cee8877294d3476 | N           | N           | N           | N           | N           | N         | Y           | N             | N            | N         | N          | N               | N          | N          |
+-----------+-------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+
1 row in set (0.00 sec)

Jadi yang diset Y hanya privilege RELOAD saja.
Sedangkan untuk privilege dengan level database seperti :
GRANT  ALL ON contoh_db.* TO ‘boris’@’localhost’ IDENTIFIED BY “ruby”
maka selain dituliskan di table user, data juga dituliskan di table db yaitu :
            INSERT INTO user (Host,User,Password)
                        VALUES (“localhost”,”boris”,PASSWORD(“ruby”))
            INSERT INTO db VALUES (“localhost”,”contoh_db”,”boris”,
”Y”,”Y”,”Y”,”Y”,”Y”,”Y”,”N”,”Y”,”Y”,”Y”)
kolom yang berisi “N” adalah kolom GRANT privilege karena pada perintah ini memang tidak menyertakan hak GRANT privilege kepada user. Tampilan pada tabel user :
+-----------+-------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+
| Host      | User  | Password         | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv |

+-----------+-------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+
| localhost | boris | 545f44c858d7b58a | N           | N           | N           | N           | N           | N         | N           | N             | N            | N         | N          | N               | N          | N          |
+-----------+-------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+
1 row in set (0.00 sec)

terlihat bahwa semua privilege dalam tabel user diset ‘N’. Sedangkan dalam tabel db :

+-----------+-----------+-------+-------------+-------------+-------------+-------------+-------------+-----------+------------+-----------------+------------+------------+
| Host      | Db        | User  | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Grant_priv | References_priv | Index_priv | Alter_priv |
+-----------+-----------+-------+-------------+-------------+-------------+-------------+-------------+-----------+------------+-----------------+------------+------------+
| localhost | contoh_db | boris | Y           | Y           | Y           | Y           | Y           | Y         | N          | Y               | Y          | Y          |
+-----------+-----------+-------+-------------+-------------+-------------+-------------+-------------+-----------+------------+-----------------+------------+------------+
1 row in set (0.00 sec)

terlihat bahwa semua diset ‘Y’ kecuali privilege GRANT.
Namun perlu diingat bahwa jika anda langsung memasukkan data ke tabel privilege, anda harus mengaktifkan semua perubahan yang anda lakukan yaitu dengan perintah :
FLUSH PRIVILEGES;
Atau anda keluar dulu dari MySQL kemudian melakukan perintah  :
# mysqladmin –u root –p reload


Menghapus user dan mencabut hak privilege
Untuk menghapus user MySQL anda dapat melakukan perintah DELETE pada tabel user dengan menghapus nama user dan nama host-nya.
DELETE FROM user WHERE User=”nama_user” and Host=”nama_host”

Sedangkan untuk mencabut hak privilege seorang user dapat dilakukan dengan sintaks berikut :
            REVOKE privilege (kolom) ON apa FROM user

Setelah itu jangan lupa untuk mengaktifkan perubahan yang telah dilakukan.

No comments:

Post a Comment