Informasi hak akses disimpan pada tabel user, db, host, tables_priv, dan columns_priv pada database mysql (yaitu database bernama mysql). Server MySQL membaca isi dari tabel-tabel ini ketika mulai dijalankan dan pada waktu-waktu tertentu.
Privilege | Column | Context |
select | Select_priv | tables |
insert | Insert_priv | tables |
update | Update_priv | tables |
delete | Delete_priv | tables |
index | Index_priv | tables |
alter | Alter_priv | tables |
create | Create_priv | databases, tables or indexes |
drop | Drop_priv | databases or tables |
grant | Grant_priv | databases or tables |
references | References_priv | databases or tables |
reload | Reload_priv | server administration |
shutdown | Shutdown_priv | server administration |
process | Process_priv | server administration |
file | File_priv | file access on server |
Privileges select, insert, update, dan delete mengijinkan anda untuk melakukan operasi pada baris-baris yang terdapat pada tabel dalam sebuah database.
Pernyataan SELECT memerlukan privilege select hanya jika benar-benar mengambil data dari tabel. Anda dapat mengeksekusi pernyataan SELECT tertentu bahkan tanpa hak akses untuk mengakses sembarang database di server. Sebagai contoh, anda dapat menggunakan program mysql klien sebagai kalkulator sederhana :
mysql> SELECT 1+1;
mysql> SELECT PI()*2;
Privilege index mengijinkan anda untuk membuat atau menghapus index.
Privilege alter mengijinkan anda untuk menggunakan ALTER TABLE.
Privilege create dan drop mengijinkan anda untuk membuat database dan tabel baru, atau untuk menghapus (drop) database dan tabel yang sudah ada.
Ingat bahwa jika anda memberi privilege drop ke database mysql ke seorang user, user tersebut dapat menghapus database dimana hak akses MySQL disimpan.!
Privilege grant mengijinkan anda untuk memberikan user lain privilege yang dimiliki oleh anda sendiri.
Privilege file memberikan anda ijin untuk membaca dan menulis file di server menggunakan pernyataan LOAD DATA INFILE dan SELECT … INTO OUTFILE. User yang diberi privilege ini dapat membaca atau menulis sembarang file yang dapat dibaca atau ditulis oleh server MySQL.
Privilege sisanya digunakan untuk operasi administratif, yang dapat dilakukan menggunakan program mysqladmin. Tabel di bawah menunjukkan perintah mysqladmin yang diijinkan oleh privilaege administratif untuk anda eksekusi:
Privilege | Commands permitted to privilege holders |
reload | reload, refresh, flush-privileges, flush-hosts, flush-logs, flush-tables |
shutdown | shutdown |
process | processlist, kill |
Perintah reload menyuruh server untuk membaca ulang tabel hak akses. Perintah refresh akan mem-flush semua tabel dan membuka dan menutup file log. flush-privileges adalah sinonim untuk reload.
Perintah shutdown akan mematikan server.
Perintah processlist akan menampilkan informasi mengenai threaad yang dieksekusi di server. Perintah kill akan menghentikan thread server.
Cara kerja sistem privilege
Sistem privilege MySQL memastikan bahwa user dapat melakukan hanya hal-hal yang diperbolehkan untuk mereka. Ketika anda connect ke server MySQL, identitas anda ditentukan oleh host tempat anda melakukan koneksi dan username yang anda ingin gunakan. Sistem memberi privilege sesuai dengan identitas anda dan apa yang ingin ada lakukan.
MySQL mempertimbangkan baik hostname dan username dalam mengidentifikasi karena mungkin ada alasan untuk menganggap bahwa username yang diberikan adalah milik orang yang sama dimanapun di Internet. Sebagai contoh, user bill yang connect dari whitehouse.gov tidak harus orang yang sama dengan user bill yang connect dari microsoft.com. MySQL menangani hal ini dengan mengijinkan anda un tuk menentukan user dari host yang berbeda yang mungkin namanya sama : anda dapat memberi bill sebuah himpunan privilege untuk koneksi dari whitehouse.gov, dan himpunan privilege yang lain untuk koneksi dari microsoft.com.
Kendali akses MySQL melibatkan dua tingkat:
· Tingkat 1: server mengecek apakah anda diijinkan untuk connect ke server.
· Tingkat 2: Dianggap anda dapat connect, server mengecek tiap permintaan yang anda jalankan untuk melihat apakah privilege anda cukup untuk menjalankannya. Contohnya, jika anda mencoba untuk memilih baris dari tabel dalam database atau menghapus sebuah tabel dari database, server memastikan bahwa anda memiliki privilege select untuk tabel tersebut atau privilege drop untuk database.
Server menggunakan tabel user, db dan host dalam database mysql pada kedua tingkat kendali akses.
Field-field pada tabel grant diberikan berikut:
Table name | user | db | host |
Scope fields | Host | Host | Host |
| User | Db | Db |
| Password | User | |
Privilege fields | Select_priv | Select_priv | Select_priv |
| Insert_priv | Insert_priv | Insert_priv |
| Update_priv | Update_priv | Update_priv |
| Delete_priv | Delete_priv | Delete_priv |
| Index_priv | Index_priv | Index_priv |
| Alter_priv | Alter_priv | Alter_priv |
| Create_priv | Create_priv | Create_priv |
| Drop_priv | Drop_priv | Drop_priv |
| Grant_priv | Grant_priv | Grant_priv |
| References_priv | | |
| Reload_priv | | |
| Shutdown_priv | | |
| Process_priv | | |
| File_priv | | |
Untuk tingkat kedua dari kendali akses (verifikasi permintaan), jika permintaan melibatkan tabel, ditambah dengan konsultasi ke tabel tables_priv dan columns_priv. Field-field dari tabel tersebut ditunjukkan berikut:
Table name | tables_priv | columns_priv |
Scope fields | Host | Host |
| Db | Db |
| User | User |
| Table_name | Table_name |
| | Column_name |
Privilege fields | Table_priv | Column_priv |
| Column_priv | |
Other fields | Timestamp | Timestamp |
| Grantor | |
Tiap tabel grant memiliki field jangkauan dan field privilege.
Field jangkauan menentukan jangkauan dari tiap entry dalam tabel. Contohnya, jika sebuah entry tabel user dengan nilai Host dan User ‘thomas.loc.gov’ dan ‘bob’ akan digunakan untuk mengauttentifikasi koneksi yang dibuat ke server oleh bob dari host thomas.loc.gov. Misalnya, ada entry di tabel db dengan field Host, User dan Db ‘thomas.loc.gov’, ’bob’ dan ‘reports’ akan digunakan ketika bob connect dari host thomas.loc.gov untuk mengakses database reports. Tabel tables_priv dan columns_priv berisi jangkauan fields yang mengindikasikan kombinasi tabel atau tabel/kolom dimana tiap entry berlaku. Untuk tujuan pengecekan akses, pembandingan nilai host adalah case insensitive. Nilai User, Password, Db dan Tabel_name adalah case sensitive. Nilai Column_name adalah case insensitive pada MySQL 3.22.12 atau selanjutnya.
Field privilege menunjukkan privilege yang diberikan oleh sebuah entry tabel, yaitu operasi apa yang dapat dilakukan. Server mengkombinasikan informasi dari bermacam tabel grant untuk membuat deskripsi komplet privilee user.
Field jangkauan adalah string, deklarasinya ditunjukkan di bawah, nilai default untuk tiap kolomnya adalah string kosong:
Field name | Type | |
Host | CHAR(60) | |
User | CHAR(16) | |
Password | CHAR(16) | |
Db | CHAR(64) | (CHAR(60) for the tables_priv and columns_priv tables) |
Table_name | CHAR(60) | |
Column_name | CHAR(60) | |
Di dalam tabel user, db dan host, semua field privilege dideklarasikan sebagai ENUM(‘N’,’Y’) – masing-masing dapat memiliki nilai ‘N’ atau ‘Y’, dan nilai defaultnya adalah ‘N’.
Dalam tabel tables_priv dan columns_priv, field privilege dideklarasikan sebagai field himpunan:
Table name | Field name | Possible set elements |
tables_priv | Table_priv | 'Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', 'Index', 'Alter' |
tables_priv | Column_priv | 'Select', 'Insert', 'Update', 'References' |
columns_priv | Column_priv | 'Select', 'Insert', 'Update', 'References' |
Singkatnya, server menggunakan tabel grant sebagai berikut:
· Field jangkauan tabel user menentukan aapakah koneksi yang diminta diijinkan atau ditolak. Untuk mengijinkan koneksi, sembarang privilege yang diberikan dalam tabel user menunjukkan privilege global user. Privilege ini berlaku untuk semua database di server.
· Tabel db dan host digunakan bersama:
· Field jangkauan tabel db menentukan user mana yang dapat mengakses database mana dari host mana. Field privilege menentukan operasi apa saja yang diijinkan.
· Tabel host digunakan sebagai ekstensi dari tabel db jika anda ingin entry tabel db tertentu untuk berlaku bagi beberapa host. Contohnya, jika anda ingin user untuk bisa menggunakan database dari beberapa host di network anda, biarkan nilai Host kosong dalam entry tabel db bagi user, lalu isilah tabel host dengan entry dari host-host tersebut.
· Tabel tables_priv dan columns_priv mirip dengan tabel db, tetapi untuk hal yang lebih detail: mereka berlaku untuk level tabel dan kolom dan bukannya pada level database.
Ingat bahwa privilege administratif (reload, shutdown, dll) hanya khusus ada di dalam tabel user. Hal ini karena operasi administratif adalah operasi di server itu sendiri dan tidak khusus untuk sebuah database, jadi tidak ada alasan untuk memasukkan privilege ini ke tabel grant yang lain. Bahkan, hanya tabel user yang butuh untuk dilihat untuk menentukan apakah boleh anda melakukan operasi administratif.
Privilege file juga khusus hanya di tabel user. Ini bukan privilege administratif, tetapi kemampuan anda untuk membaca dan menulis file di host server itu tidak terkait dengan database yang anda akses.