web-dev-qa-db-ja.com

Windows上のDB2 9.7でローカルdb2adminにすべての特権を付与するにはどうすればよいですか?

私の開発ステーションには、OS Windowsを搭載したラップトップがありますXP Professional Edition、Service Pack 3。

Express-CエディションのIBM DB2 UDB 9.7フィックスパック4をダウンロードしてインストールしました。

DB2のローカルインストールでローカルデータベース管理者として使用しているdb2adminというローカルWindowsアカウントがあります(開発者専用)。

コマンドウィンドウを実行すると、問題なく以下を実行できます。

db2 attach to db2 user db2admin using xxxxxxxxxx

これにより、DB2というインスタンスに接続できます。

データベース作成コマンドを実行できます。

次に、データベースに接続して、DB2のdb2adminアカウントにすべての特権を付与します。

db2 CONNECT TO MYDB;
SET SCHEMA DB2ADMIN;
db2 GRANT DBADM,CREATETAB,BINDADD,CONNECT,CREATE_NOT_FENCED_ROUTINE,IMPLICIT_SCHEMA,LOAD,CREATE_EXTERNAL_ROUTINE,QUIESCE_CONNECT,SECADM ON DATABASE TO USER DB2ADMIN;
CONNECT RESET;

しかし、それを実行すると、実際のWindowsユーザーアカウント(synprgcma)にはユーザーdb2adminに権限を付与する権限がないことがDB2から通知されます。

したがって、2番目のスクリプトを次のように変更すると、

db2 CONNECT TO MYDB USER db2admin USING xxxxxxxx;
SET SCHEMA DB2ADMIN;
db2 GRANT DBADM,CREATETAB,BINDADD,CONNECT,CREATE_NOT_FENCED_ROUTINE,IMPLICIT_SCHEMA,LOAD,CREATE_EXTERNAL_ROUTINE,QUIESCE_CONNECT,SECADM ON DATABASE TO USER DB2ADMIN;
CONNECT RESET;

次に、DB2は、db2adminがそれ自体に対して権限を取り消したり付与したりできないことを通知します(実際には、IDがそれ自体に対して権限を取り消したり付与したりすることはできません)。

だから私は困惑しています。以前のDB2のインストール(9.5、およびどのフィックスパックを使用していたか覚えていません)では、この問題はありませんでした。

ローカル管理者アカウントに必要な権限を付与するにはどうすればよいですか?次に必要なbindコマンドを実行するには、これが必要だと思います。

db2 CONNECT TO MYDB;
db2 bind @db2cli.lst blocking all grant public sqlerror continue CLIPKG 20;
db2 CONNECT RESET;

任意の助けいただければ幸いです。

編集:これに関連する次のリンクがいくつか見つかりました。それがどのように機能するかはまだわかりませんが、少なくともいくつかのドキュメントを見つけました。

10
Chris Aldrich

私の質問に対する私の編集の最後の上記のリンクに基づいて、私は私の答えを見つけました。システムへのログオンはLDAPからであり、グループを制御できないため、システムアカウントを微調整できません。

だから私は次のことをしました:

  1. DB2 GUIを開きました(この方法が最も簡単でした)。
  2. Db2adminとして目的のデータベースに接続しました。
  3. ユーザーとしてデータベースに私のログオンを追加しました。
  4. そのID(私のID)に対するすべての権限を付与します。
  5. 切断。
  6. IDとして目的のデータベースに接続します。
  7. すべての権限をdb2adminに付与します。
  8. 切断。

出来上がり! db2adminがすべての権限としてログオンします。

編集: DB2で興味深いことを行う方法を学ぶのに役立ったので、上記はそのままにしておきます。ただし、インスタンス所有者に付与されたDATAACCESSおよびACCESSCTRL権限を持つDBADM/SECADM(私の場合はdb2admin id)には、データベースとの対話に必要なすべての権限があることを知りました。実際には、スクリプトの上記の許可の行をコメント化しただけかもしれません。これらは、古いバージョンのDB2に対して実行されたスクリプトから残されました。また、データベースBからデータベースAに復元した後にインスタンス所有者DBADMが必要な場合は、レジストリー変数DB2_RESTORE_GRANT_ADMIN_AUTHORITYをYESに設定するのが最も簡単です(フィックスパック2以降で利用可能)。その後、インスタンス所有者にDBADMを付与する必要はありません。これは、インスタンスに復元されたデータベースに自動的に付与されます。フィックスパック5を使用していない場合、これを有効にするにはインスタンスをバウンスする必要があります。

5
Chris Aldrich