スキーマ内のすべてのテーブルに対するすべての権限をIBM DB2のユーザーに付与する方法は?


9

まず、データベースをIBM DB2 AIXからIBM DB2ウィンドウにエクスポートします。残念ながら、OSの問題により、BACKUPとRESTOREコマンドを使用できません。そのため、db2moveコマンドを使用する必要があります。

私は、エクスポートされたMYSCHEMAのからスキーマとテーブルのすべてをdbempのこのコマンドを使用してリモートIBM DB2 AIXでのデータベース:

db2move dbemp export -sn myschema

このコマンドを実行すると、dbuser1という名前のユーザーとしてログインしました

現在のフォルダーにたくさんのファイルを生成します。IBM DB2 LUWがインストールされているローカルマシン(Windows)にファイルを取得します。

次に、ローカルマシンのIBM DB2で、IBM Data Studioを使用して、最初に既存のスキーマmyschemaを削除しました(ローカルdbempデータベースもありました)。

次に、次のコマンドを使用してファイルをインポートしました。

db2move dbemp import

スキーマとテーブルをローカルのdbempデータベースに正常にインポートします。

上記のアクションを実行したとき、ユーザーwinuser1としてログインしていました

ローカルマシン(Windows)にもdbuser1という名前のローカルユーザーがいます。IBM Data Studioで、dbuser1ユーザーを使用してローカルdbempに接続する接続プロファイルを作成しました。myschemaスキーマとテーブルを参照できますが、テーブルのデータを参照できません(特権エラーが発生しました)。ユーザーwinuser1はテーブルのデータを参照できますが、開発のために、ユーザーdbuser1を使用してデータベースに接続する必要があります。

そのため、次のようにテーブルのユーザーに特権を付与できることがわかりました。

GRANT ALL ON myschema.table1 TO USER dbuser1

問題は、100個のテーブルがあることです。テーブルごとにその行を入力したくありません。残念ながら、次のようなワイルドカードソリューションはありません。

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

したがって、問題は、スキーマ内のすべてのテーブルに対するすべての特権をユーザーにどのように付与するかということです。または、より良い代替ソリューションはありますか?多分からすべての権限をコピーしてwinuser1dbuser1

回答:


8

すべてのデータ(つまり、すべてのスキーマのすべてのテーブル)にアクセスする場合は、dataaccessを付与する必要があります。

db2 grant dataaccess on database to user winuser1

winuser1が参照しているスキーマ内の100個のテーブルのみにアクセスするようにしたい場合、残念ながら簡単な方法はなく、各テーブルにSELECTを付与する必要があります。そうは言っても、それはスクリプトで実現できます。

あなたは次のことができます

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

これは、システムカタログのクエリを利用して、許可を与えるスクリプトを動的に生成します。これは、データへのアクセスを許可したくないユーザーに許可を与える方法の多くです。

以下は、DB2の権限に関する優れたページです


おかげで、db2 grant dataaccess作品。私は開発環境にいるので、すべてのスキーマにそれらを許可してもかまいません。
nullの

0

ToadなどのSQLエディタを使用している場合は、このスクリプトも役立つ場合があります。結果を新しいウィンドウにコピーして貼り付けることができます。

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';

0

(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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.