Wednesday, November 20, 2024

.::: Allow user oracle access to another user /schema :::.


Agar user aisyah dapat mengakses semua objek dalam schema adminx dengan hak istimewa yang sama seperti yang dimiliki adminx, Anda perlu memberikan akses eksplisit untuk semua objek, atau Anda bisa memberikan peran penuh pada schema tersebut. Berikut langkah-langkahnya:

1. Berikan Hak Akses untuk Seluruh Objek Schema adminx
Gunakan perintah GRANT untuk memberikan akses ke semua objek milik adminx kepada aisyah.

SELECT 'GRANT ALL ON ADMIN.' || object_name || ' TO AISYAH' AS grant_command
FROM all_objects
WHERE owner = 'ADMIN' AND object_type IN ('TABLE', 'VIEW', 'SEQUENCE', 'PROCEDURE', 'FUNCTION')

   


Memberikan Akses ke Semua Objek Secara Otomatis
Gunakan PL/SQL untuk memberikan hak akses ke semua tabel, view, prosedur, dan objek lainnya di schema adminx:


BEGIN
   FOR obj IN (
      SELECT 'GRANT ALL ON ADMIN.' || object_name || ' TO AISYAH' AS grant_command
      FROM all_objects
      WHERE owner = 'ADMIN' AND object_type IN ('TABLE', 'VIEW', 'SEQUENCE', 'PROCEDURE', 'FUNCTION')
   ) LOOP
      EXECUTE IMMEDIATE obj.grant_command;
   END LOOP;
END;
/

Penjelasan:
ALL_OBJECTS: Menyediakan daftar objek di database.
GRANT ALL: Memberikan semua hak istimewa (seperti SELECT, INSERT, UPDATE, DELETE) pada objek.
EXECUTE IMMEDIATE: Menjalankan perintah SQL secara dinamis untuk setiap objek.

2. Memberikan Peran yang Lebih Luas
Jika Anda ingin memberikan akses global pada seluruh schema, gunakan perintah berikut:

GRANT DBA TO AISYAH;

Namun, perintah ini hanya berfungsi di Oracle versi tertentu (19c ke atas) dan membutuhkan hak administrator. Jika tidak berfungsi, gunakan metode PL/SQL di atas.

3. Gunakan Peran (Role) untuk Mempermudah
Untuk mempermudah pengelolaan hak akses, Anda bisa membuat role khusus dan memberikan semua hak dari schema adminx ke role tersebut, lalu memberikan role itu ke aisyah.

CREATE ROLE adminx_access;

GRANT adminx_access TO AISYAH;


4. Memberikan Hak untuk Objek Baru Secara Otomatis
Untuk memastikan aisyah mendapatkan hak otomatis pada objek baru yang dibuat di schema adminx, Anda dapat menggunakan schema-level privileges:

ALTER DEFAULT PRIVILEGES IN SCHEMA adminx GRANT ALL PRIVILEGES TO AISYAH;

Catatan Penting:
Koneksi ke Schema adminx: Untuk mengakses objek di schema adminx, aisyah harus menggunakan prefiks schema:

SELECT * FROM adminx.table_name;

Jika Anda ingin aisyah mengakses objek tanpa menggunakan prefiks schema, buatkan synonym:

CREATE SYNONYM table_name FOR adminx.table_name;

Hak Tambahan: Jika user aisyah perlu membuat objek di schema adminx, berikan hak berikut:

GRANT CREATE ANY TABLE TO aisyah;
GRANT CREATE ANY PROCEDURE TO aisyah;


5. atau ganti dengan ini

BEGIN
   FOR objects IN
   (
         SELECT 'GRANT ALL ON "'||owner||'"."'||object_name||'" TO aisyah' grantSQL
           FROM all_objects
          WHERE owner = 'ADMIN'
            AND object_type NOT IN
                (
                   --Ungrantable objects.  Your schema may have more.
                   'SYNONYM', 'INDEX', 'INDEX PARTITION', 'DATABASE LINK',
                   'LOB', 'TABLE PARTITION', 'TRIGGER'
                )
       ORDER BY object_type, object_name
   ) LOOP
      BEGIN
         EXECUTE IMMEDIATE objects.grantSQL;
      EXCEPTION WHEN OTHERS THEN
         --Ignore ORA-04063: view "X.Y" has errors.
         --(You could potentially workaround this by creating an empty view,
         -- granting access to it, and then recreat the original view.)
         IF SQLCODE IN (-4063) THEN
            NULL;
         --Raise exception along with the statement that failed.
         ELSE
            raise_application_error(-20000, 'Problem with this statement: ' ||
               objects.grantSQL || CHR(10) || SQLERRM);
         END IF;
      END;
   END LOOP;
END;
/

No comments:

Post a Comment

Popular Posts