Kontrol Akses untuk Pengguna dan Peran dalam SQL

Keamanan sangat penting bagi administrator basis data yang berusaha melindungi gigabyte data bisnis penting mereka dari mata-mata orang luar yang tidak sah dan orang dalam yang berusaha melampaui wewenang mereka. Semua sistem manajemen basis data relasional menyediakan semacam mekanisme keamanan intrinsik yang dirancang untuk meminimalkan ancaman ini. Mulai dari perlindungan kata sandi sederhana yang ditawarkan oleh Microsoft Access hingga struktur pengguna / peran kompleks yang didukung oleh basis data relasional canggih seperti Oracle dan Microsoft SQL Server. Artikel ini berfokus pada mekanisme keamanan umum untuk semua database yang mengimplementasikan Structured Query Language (atau SQL ). Bersama-sama, kami akan menjalani proses penguatan kontrol akses data dan memastikan keamanan data Anda.

Pengguna

Database berbasis server semua mendukung konsep pengguna yang mirip dengan yang digunakan dalam sistem operasi komputer. Jika Anda terbiasa dengan hierarki pengguna / grup yang ditemukan di Microsoft Windows NT dan Windows 2000, Anda akan menemukan bahwa grup pengguna / peran yang didukung oleh SQL Server dan Oracle sangat mirip.

Sangat disarankan agar Anda membuat akun pengguna database individual untuk setiap orang yang akan mengakses database Anda. Secara teknis memungkinkan untuk membagi akun di antara pengguna atau hanya menggunakan satu akun pengguna untuk setiap jenis pengguna yang perlu mengakses database Anda, tetapi saya sangat tidak menyarankan praktik ini karena dua alasan. Pertama, ini akan menghilangkan pertanggungjawaban individu — jika seorang pengguna membuat perubahan ke basis data Anda (katakanlah dengan memberi dirinya kenaikan $ 5.000), Anda tidak akan dapat melacaknya kembali ke orang tertentu melalui penggunaan log audit. Selain itu, jika pengguna tertentu meninggalkan organisasi Anda dan Anda ingin menghapus aksesnya dari basis data, Anda akan dipaksa untuk mengubah kata sandi yang semua pengguna andalkan.

Metode untuk membuat akun pengguna bervariasi dari platform ke platform dan Anda harus berkonsultasi dengan dokumentasi khusus DBMS Anda untuk prosedur yang tepat. Pengguna Microsoft SQL Server harus menyelidiki penggunaan prosedur tersimpan sp_adduser. Administrator database Oracle akan menemukan perintah CREATE USER berguna. Anda juga mungkin ingin menyelidiki skema otentikasi alternatif. Sebagai contoh, Microsoft SQL Server mendukung penggunaan Windows NT Integrated Security. Di bawah skema ini, pengguna diidentifikasi ke database oleh akun pengguna Windows NT mereka dan tidak perlu memasukkan ID pengguna dan kata sandi tambahan untuk mengakses database. Pendekatan ini sangat populer di kalangan administrator basis data karena itu menggeser beban manajemen akun ke staf administrasi jaringan dan memberikan kemudahan satu kali masuk ke pengguna akhir.

Peran

Jika Anda berada di lingkungan dengan sejumlah kecil pengguna, Anda mungkin akan menemukan bahwa membuat akun pengguna dan memberikan izin langsung kepada mereka sudah cukup untuk kebutuhan Anda. Namun, jika Anda memiliki sejumlah besar pengguna, kemungkinan besar Anda akan kewalahan oleh beban pemeliharaan akun dan izin yang tepat. Untuk meringankan beban ini, database relasional mendukung gagasan peran. Peran basis data berfungsi mirip dengan grup Windows NT. Akun pengguna ditetapkan untuk peran dan izin kemudian ditugaskan untuk peran secara keseluruhan daripada akun pengguna individu. Misalnya, kita dapat membuat peran DBA dan kemudian menambahkan akun pengguna staf administrasi kami ke peran ini. Setelah kami melakukan ini, kami dapat menetapkan izin khusus untuk semua administrator yang hadir (dan yang akan datang) dengan hanya menetapkan izin untuk peran tersebut. Sekali lagi, prosedur untuk membuat peran bervariasi dari platform ke platform. Administrator MS SQL Server harus menyelidiki prosedur tersimpan sp_addrole sementara Oracle DBAs harus menggunakan sintaks CREATE ROLE.

Pemberian Izin

Sekarang setelah kami menambahkan pengguna ke basis data kami, saatnya untuk mulai memperkuat keamanan dengan menambahkan izin. Langkah pertama kami adalah memberikan izin basis data yang sesuai kepada pengguna kami. Kami akan mencapai hal ini melalui penggunaan pernyataan GRANT SQL.

Berikut sintaks pernyataannya:

GRANT
[ON

]
UNTUK
[DENGAN GRAN OPTION]

Sekarang, mari kita lihat pernyataan baris per baris ini. Baris pertama, GRANT , memungkinkan kami untuk menentukan izin tabel khusus yang kami berikan. Ini bisa berupa izin tingkat tabel (seperti SELECT, INSERT, UPDATE dan DELETE) atau izin basis data (seperti CREATE TABLE, ALTER DATABASE dan GRANT). Lebih dari satu izin dapat diberikan dalam satu pernyataan GRANT, tetapi izin tingkat tabel dan izin tingkat basis data mungkin tidak digabungkan dalam satu pernyataan.

Baris kedua, ON

, digunakan untuk menentukan tabel yang terpengaruh untuk izin tingkat-tabel. Baris ini dihilangkan jika kita memberikan izin tingkat-database. Baris ketiga menentukan pengguna atau peran yang diberikan izin.

Akhirnya, baris keempat, DENGAN GRANT OPTION, adalah opsional. Jika baris ini termasuk dalam pernyataan, pengguna yang terpengaruh juga diizinkan untuk memberikan izin yang sama ini kepada pengguna lain. Perhatikan bahwa OPSI DENGAN HIBAH tidak dapat ditentukan saat izin ditugaskan untuk peran.

Contoh

Mari kita lihat beberapa contoh. Dalam skenario pertama kami, kami baru-baru ini mempekerjakan sekelompok 42 operator entri data yang akan menambahkan dan mempertahankan catatan pelanggan. Mereka harus dapat mengakses informasi dalam tabel Pelanggan, mengubah informasi ini dan menambahkan catatan baru ke tabel. Mereka seharusnya tidak dapat sepenuhnya menghapus catatan dari database. Pertama, kita harus membuat akun pengguna untuk setiap operator dan kemudian menambahkan semuanya ke peran baru, DataEntry. Selanjutnya, kita harus menggunakan pernyataan SQL berikut untuk memberi mereka izin yang sesuai:

GRANT SELECT, INSERT, UPDATE
ON Pelanggan
UNTUK DataEntry

Dan hanya itu saja! Sekarang mari kita periksa kasus di mana kami memberikan izin tingkat basis data. Kami ingin mengizinkan anggota peran DBA untuk menambahkan tabel baru ke database kami. Selanjutnya, kami ingin mereka dapat memberikan izin kepada pengguna lain untuk melakukan hal yang sama. Berikut pernyataan SQL:

GRANT CREATE TABLE
KE DBA
DENGAN PILIHAN GRANT

Perhatikan bahwa kami telah menyertakan baris OPSI DENGAN HIBAH untuk memastikan bahwa DBA kami dapat memberikan izin ini kepada pengguna lain.

Menghapus Izin

Setelah kami memberikan izin, seringkali diperlukan untuk mencabutnya di kemudian hari. Untungnya, SQL menyediakan kami dengan perintah REVOKE untuk menghapus izin yang diberikan sebelumnya. Berikut sintaksnya:

REVOKE [GRANT OPTION FOR]
ON


DARI

Anda akan melihat bahwa sintaks dari perintah ini mirip dengan perintah GRANT. Satu-satunya perbedaan adalah bahwa DENGAN PILIHAN GRANT ditentukan pada baris perintah REVOKE daripada di akhir perintah. Sebagai contoh, mari kita bayangkan kita ingin mencabut izin Mary yang sebelumnya diberikan untuk menghapus rekaman dari basis data Pelanggan. Kami akan menggunakan perintah berikut:

REVOKE DELETE
ON Pelanggan
DARI Mary

Dan hanya itu saja! Ada satu mekanisme tambahan yang didukung oleh Microsoft SQL Server yang perlu disebutkan — perintah DENY. Perintah ini dapat digunakan untuk secara eksplisit menolak izin untuk pengguna yang mungkin mereka miliki melalui keanggotaan peran saat ini atau di masa depan. Berikut sintaksnya:

DENY
ON


UNTUK

Contoh

Kembali ke contoh sebelumnya, mari bayangkan bahwa Mary juga anggota peran Manajer yang juga memiliki akses ke tabel Pelanggan. Pernyataan REVOKE sebelumnya tidak akan cukup untuk menolak aksesnya ke meja. Itu akan menghapus izin yang diberikan kepadanya melalui pernyataan GRANT yang menargetkan akun penggunanya, tetapi tidak akan memengaruhi izin yang diperoleh melalui keanggotaannya dalam peran Manajer. Namun, jika kami menggunakan pernyataan DENY, itu akan memblokir warisan izinnya. Inilah perintahnya:

DENY DELETE
ON Pelanggan
UNTUK Mary

Perintah DENY pada dasarnya menciptakan "izin negatif" dalam kontrol akses basis data. Jika kemudian kami memutuskan untuk memberi izin kepada Mary untuk menghapus baris dari tabel Pelanggan, kami tidak bisa hanya menggunakan perintah GRANT. Perintah itu akan segera diganti oleh DENY yang ada. Sebagai gantinya, pertama-tama kita akan menggunakan perintah REVOKE untuk menghapus entri izin negatif sebagai berikut:

REVOKE DELETE
ON Pelanggan
DARI Mary

Anda akan melihat bahwa perintah ini persis sama dengan yang digunakan untuk menghapus izin positif. Ingat bahwa perintah DENY dan GRANT keduanya bekerja dengan cara yang sama * mdash; keduanya membuat izin (positif atau negatif) dalam mekanisme kontrol akses basis data. Perintah REVOKE menghapus semua izin positif dan negatif untuk pengguna yang ditentukan. Setelah perintah ini dikeluarkan, Mary akan dapat menghapus baris dari tabel jika dia adalah anggota dari peran yang memiliki izin itu. Sebagai alternatif, perintah GRANT dapat dikeluarkan untuk memberikan izin DELETE langsung ke akunnya.

Sepanjang artikel ini, Anda telah belajar banyak tentang mekanisme kontrol akses yang didukung oleh Bahasa Query Standar. Pengantar ini seharusnya memberi Anda titik awal yang baik, tetapi saya mendorong Anda untuk mereferensikan dokumentasi DBMS Anda untuk mempelajari langkah-langkah keamanan yang ditingkatkan yang didukung oleh sistem Anda. Anda akan menemukan bahwa banyak basis data mendukung mekanisme kontrol akses yang lebih canggih, seperti pemberian izin pada kolom tertentu.