Saya perlu memberikan izin pilih untuk semua tabel yang dimiliki oleh pengguna tertentu kepada pengguna lain. Dapatkah saya melakukan hal ini dengan satu perintah seperti di bawah ini:
Grant Select on OwningUser.* to ReceivingUser
Atau apakah saya harus membuat sql untuk setiap tabel dengan perintah seperti di bawah ini:
Select 'GRANT SELECT ON OwningUser.'||Table_Name||'TO ReceivingUser'
From All_Tables Where Owner='OWNINGUSER'
Yah, ini bukan pernyataan tunggal, tetapi ini hampir sedekat yang bisa Anda dapatkan dengan oracle:
BEGIN
FOR R IN (SELECT owner, table_name FROM all_tables WHERE owner='TheOwner') LOOP
EXECUTE IMMEDIATE 'grant select on '||R.owner||'.'||R.table_name||' to TheUser';
END LOOP;
END;
tabel + tampilan + pelaporan kesalahan
SET SERVEROUT ON
DECLARE
o_type VARCHAR2(60) := '';
o_name VARCHAR2(60) := '';
o_owner VARCHAR2(60) := '';
l_error_message VARCHAR2(500) := '';
BEGIN
FOR R IN (SELECT owner, object_type, object_name
FROM all_objects
WHERE owner='SCHEMANAME'
AND object_type IN ('TABLE','VIEW')
ORDER BY 1,2,3) LOOP
BEGIN
o_type := r.object_type;
o_owner := r.owner;
o_name := r.object_name;
DBMS_OUTPUT.PUT_LINE(o_type||' '||o_owner||'.'||o_name);
EXECUTE IMMEDIATE 'grant select on '||o_owner||'.'||o_name||' to USERNAME';
EXCEPTION
WHEN OTHERS THEN
l_error_message := sqlerrm;
DBMS_OUTPUT.PUT_LINE('Error with '||o_type||' '||o_owner||'.'||o_name||': '|| l_error_message);
CONTINUE;
END;
END LOOP;
END;
/
ya, mungkin saja, jalankan perintah ini:
katakanlah Anda memiliki pengguna bernama thoko
grant select any table, insert any table, delete any table, update any table to thoko;
catatan: bekerja pada basis data oracle