Create New User oracle (read-only)

Oke, sesuai slogan ku, yang ada di bawah sana.. itu tuh.. di bagian footer. “ikatlah ilmu dengan mempostingnya”… hehehehe,, kali ini aku ingin ngikat ilmu baru lagi (buat saya lho ini, klo buat situ ini udah lama ya terserah, yang penting buatku ini ilmu baru… *gitu aja kok repot). Baiklah, jadi saya dapat assignment untuk buat project baru dengan koneksi ke database pake username dan password yang berbeda tapi mengarah ke schema yang sudah ada, kali ini user nya hanya punya hak akses read-only aja, karena aplikasi yang baru ini cuma untuk membaca data saja. Ok, sampe di sini cukup jelas apa yang harus saya lakukan, berarti tinggal create user baru, kasih grant connect dan create session, setelah itu tinggal cukup beri privileges “select” ke schema yang ada. Karena kemarin biasa ngotak – otik oracle pake si kodok a.k.a  TOAD, maka semua urusan menjadi mudah, tinggal klik, klik dan klik selese… bahkan untuk mende-bug store procedure pun juga bisa, pokoknya jadi ga susah lah.

 

Dann… jeng..jeng..jeng.. Ketika mau eksekusi, ternyata TOAD di laptopku ga mau jalan, entah kenapa, mungkin aja karena kemarin habis ganti ODAC ato.. ato.. au ahhh, daripada tugas ga kelar – kelarkarena  mbenerin TOAD, mending pake cara klasik, yap… pake command prompt akhirnya.. Urusan create user masih bisa lah, klo pake sqlplus, sekarang giliran ngasih grant select ke user yang baru gimana ya? masak iya satu persatu table aku select in eh grant nin (kok ga enak ya bahasanya..hehehe.. pokoknya gitu deh), klo harus satu persatu, dan dengan sebanyak itu table yang harus aku kasih grant, Nggak banget lah.. Nggak efektif banget.

Akhirnya jurus terakhir, eh bukan ding, sempet juga nelpon senior untuk ngasih pencerahan alurnya gimana, buat bekal untuk searching di google. Akhirnya ada gambaran juga, nyari di google, sulit banget nemunya. Finally, setelah coba pake beberapa kta kunci nemu juga. Dan berikut ini adalah hasilnya. Asumsikan, ini asumsi aja.. Sudah ada schema dengan nama “notebook” berikut dengan tabel – tabel yang ada di dalamnya dan sudah ada user lama “NOTEBOOK”, kini tugasnya adalah membuat user baru dengan nama “monitor” dan harus punya akses read-only ke schema “notebok”.


C:\Users\admin>sqlplus

SQL*Plus: Release 11.2.0.3.0 Production on Fri May 11 07:45:27 2012

Copyright (c) 1982, 2011, Oracle. All rights reserved.

Enter user-name: system
Enter password:

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> create user monitor identified by monitor;

User created.

SQL> grant connect, create session to monitor;

Grant succeeded.

SQL> SELECT 'GRANT SELECT ON NOTEBOOK.'||table_name||' to monitor;' FROM ALL_TABLES WHERE OWNER = 'NOTEBOOK';

'GRANTSELECTONNOTEBOOK.'||TABLE_NAME||'TOMONITOR;'
-------------------------------------------------------------------
grant select on notebook.HARDISK_DRIVE to monitor;
grant select on notebook.VGA_CARD to monitor;
grant select on notebook.OPTICAL_DRIVE to monitor;
grant select on notebook.KEYBOARD to monitor;
grant select on notebook.RESOLUTIION_SCREEN to monitor;
grant select on notebook.ACTION_LOG to monitor;
grant select on notebook.BIOS to monitor;
grant select on notebook.NETWORK to monitor;
grant select on notebook.TOUCHPAD to monitor;
grant select on notebook.USB_DRIVE to monitor;
grant select on notebook.SOUND to monitor;

10 rows selected
SQL>

jadi ceritanya, perintah SELECT ‘GRANT SELECT ON NOTEBOOK.’||table_name||’ to monitor;’ FROM ALL_TABLES
WHERE OWNER = ‘NOTEBOOK’; ini digunakan untuk men-generate query grant, setelah di generate, di blok aja query grant nya kemudian di copy setelah itu paste kan di bawahnya


SQL>>>grant select on notebook.HARDISK_DRIVE to monitor;
Grant succeeded.
SQL>>>grant select on notebook.VGA_CARD to monitor;
Grant succeeded.
SQL>>>grant select on notebook.OPTICAL_DRIVE to monitor;
Grant succeeded.
SQL>>>grant select on notebook.KEYBOARD to monitor;
Grant succeeded.
SQL>>>grant select on notebook.RESOLUTIION_SCREEN to monitor;
Grant succeeded.
SQL>>>grant select on notebook.ACTION_LOG to monitor;
Grant succeeded.
SQL>>>grant select on notebook.BIOS to monitor;
Grant succeeded.
SQL>>>grant select on notebook.NETWORK to monitor;
Grant succeeded.
SQL>>>grant select on notebook.TOUCHPAD to monitor;
Grant succeeded.
SQL>>>grant select on notebook.USB_DRIVE to monitor;
Grant succeeded.
SQL>>>grant select on notebook.SOUND to monitor;
Grant succeeded.
SQL>>>

ketika anda paste kan otomatis query akan otomatis akan di eksekusi, keculai yang paling bawah (terakhir), anda masih butuh usaha untuk menekan tombol ENTER.

Sebenarnya ada cara lain sih, tapi pake PL/SQL, untuk me-loop query tersebut. Tapi tadi aku coba gagal, akhirnya pake cara ini, seenggaknya lebih cepet dari pada harus nge-grant satu per satu table… hehehehehe

ini contoh PL/SQL nya

FOR x IN (SELECT table_name FROM dba_tables WHERE owner=<<schema name>>)
LOOP
EXECUTE IMMEDIATE 'GRANT SELECT ON <<schema name>>.' || x.table_name || ' TO <<role name>>';
END LOOP;

Seee yaaa….

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>