Rabu, 27 Juli 2011

Hak Akses (Privileges) pada MySQL

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.

0 komentar:

Posting Komentar