Bagaimana cara memberikan semua hak istimewa pada semua tabel dalam suatu skema kepada pengguna di IBM DB2?

9

Pertama-tama, saya ingin mengekspor basis data dari IBM DB2 AIX ke jendela IBM DB2. Sayangnya, saya tidak dapat menggunakan perintah BACKUP dan RESTORE karena masalah perbedaan OS. Jadi saya harus menggunakan perintah db2move .

Saya telah mengekspor skema myschema dan semua tabel dari basis data dbemp di IBM DB2 AIX jarak jauh menggunakan perintah ini:

db2move dbemp export -sn myschema

Ketika saya menjalankan perintah itu saya masuk sebagai pengguna bernama dbuser1 .

Ini menghasilkan banyak file di folder saat ini. Saya ambil file ke mesin lokal saya (windows) yang telah menginstal IBM DB2 LUW.

Sekarang di IBM DB2 mesin lokal saya, saya menjatuhkan skema schema yang ada terlebih dahulu dengan menggunakan IBM Data Studio (saya juga punya database dbemp lokal juga).

Lalu saya mengimpor file menggunakan perintah ini:

db2move dbemp import

Ini berhasil mengimpor skema dan tabel ke database dbemp lokal .

Ketika saya melakukan tindakan di atas, saya masuk sebagai pengguna winuser1 .

Saya memiliki pengguna lokal bernama dbuser1 juga di mesin lokal saya (windows). Di IBM Data Studio, saya membuat profil koneksi yang terhubung ke dbemp lokal menggunakan pengguna dbuser1 dan saya dapat menelusuri skema myschema dan tabel, tetapi saya tidak bisa menelusuri data tabel (saya mendapat kesalahan hak istimewa). Pengguna winuser1 dapat menelusuri data tabel, tetapi untuk tujuan pengembangan, saya harus terhubung ke database menggunakan pengguna dbuser1 .

Jadi saya menemukan bahwa saya dapat memberikan hak istimewa kepada pengguna di atas meja seperti ini:

GRANT ALL ON myschema.table1 TO USER dbuser1

Masalahnya adalah saya memiliki 100 tabel, saya tidak ingin mengetikkan garis itu untuk setiap tabel. Dan sayangnya, tidak ada solusi wildcard seperti ini juga:

GRANT ALL ON myschema.* TO USER dbuser1 -- this doesn't work

Jadi pertanyaannya adalah bagaimana memberikan semua hak istimewa pada semua tabel dalam skema kepada pengguna? Atau ada alternatif solusi yang lebih baik? mungkin dengan menyalin semua hak istimewa dari winuser1 ke dbuser1 ?

batal
sumber

Jawaban:

8

Jika Anda ingin akses ke semua data (yaitu, semua tabel di semua skema), Anda perlu memberikan akses data.

db2 grant dataaccess on database to user winuser1

Jika Anda hanya ingin winuser1 mengakses hanya 100 tabel dalam skema yang Anda maksud, maka sayangnya, tidak ada cara mudah, Anda perlu memberikan SELECT pada setiap tabel. Yang sedang berkata, itu dapat dicapai melalui scripting.

Anda bisa melakukan hal berikut

db2 -tnx "select distinct 'GRANT ALL ON TABLE '||
    '\"'||rtrim(tabschema)||'\".\"'||rtrim(tabname)||'\" TO USER winuser1;'
    from syscat.tables
    where tabschema = 'myschema' "  >> grants.sql

db2 -tvf grants.sql

Ini memanfaatkan kueri katalog sistem untuk secara dinamis menghasilkan skrip untuk mengizinkan hal-hal. Ini adalah banyak cara kami mengizinkan pengguna yang kami tidak ingin memberikan akses data.

Ini adalah halaman yang bagus dari otoritas untuk DB2 .

Chris Aldrich
sumber
terima kasih, db2 grant dataaccessbekerja. Saya tidak keberatan memberikannya kepada semua skema karena saya berada di lingkungan pengembangan.
null
0

Jika Anda menggunakan editor SQL seperti Toad, skrip ini dapat membantu juga. Anda dapat menyalin / menempelkan hasilnya di jendela baru.

SELECT DISTINCT
      'GRANT Select ON TABLE '
   || rtrim (tabschema)
   || '.'
   || rtrim (tabname)
   || ' TO USER USERNAME;'
  FROM syscat.tables
 WHERE tabschema = 'Schema'
 UNION
 SELECT    'GRANT Select ON VIEW '
   || rtrim (VIEWSCHEMA)
   || '.'
   || rtrim (viewname)
   || ' TO USER USERNAME;'
 FROM SYSCAT.VIEWS
 WHERE VIEWSCHEMA = 'Schema';
John Arick
sumber
0

Anda juga dapat mencoba (menggunakan editor SQL):

BEGIN
 FOR v AS cur CURSOR FOR 
    select 
        'GRANT SELECT, INSERT, UPDATE, DELETE ON ' || trim(tabschema) || '.' || trim(tabname) || ' TO YourUser' stmt 
    from 
        syscat.tables 
    where 
        tabschema = 'YourSchema' 
  DO 
    EXECUTE IMMEDIATE v.stmt;
  END FOR;
END
Florin Dragan
sumber