6

次のようなクエリを使用して、本番データベースからサンドボックスにデータを移植しようとしています。

INSERT `dbsandbox`.`SomeTable`(Field1, Field2, Field3)
SELECT t.Field1, t.Field2, t.Field3
FROM `dbprod`.`SomeTable` t;

このクロスデータベース結合を試みると、次のエラーが発生します。

エラー 1142 (42000): テーブル 'SomeTable' のユーザー 'myusername'@'server.domain.tdl' に対する SELECT コマンドが拒否されました

問題のユーザーは、両方のデータベースの問題のテーブルへのアクセス許可を持っています。UNIX mysql クライアントと Windows MySQL Query Browser アプリケーションの両方でこれを試しましたが、結果は同じでした。

私は何が欠けていますか?

4

2 に答える 2

9

パーミッションの問題であることが判明しました。ソース データベースでは、テーブルにアクセスするために使用していたユーザー名のパスワードが必要でした。ターゲットは、ユーザー名がローカルホスト上にあることのみを必要としました。

クロスデータベース クエリのコンテキスト内で毎回パスワードを使用して MySQL クライアントを起動しても、別の接続が試行されます。この接続は、最初にパスワードを使用してクライアントに対して認証したことを記憶していないため、サンドボックスから運用データベースへの接続に失敗しました。テーブルのデータベース名を明示的に指定すると、別の接続が必要になることもあるようです。

答えは、本番データベースからクエリを開始し、データベース修飾子なしでローカル テーブルを参照してから、サンドボックス データベース テーブルに挿入することでした。今回はうまくいきました:

dbprod を使用する

挿入しdbsandboxます。SomeTable(Field1、Field2、Field3) SELECT t.Field1、t.Field2、t.Field3 FROM SomeTablet;

于 2008-12-11T18:59:02.853 に答える
6

権限の問題のようです。多くの場合、ユーザー権限はデータベースのようにデータベースに設定されるため、宛先のユーザーはソースにアクセスできません。

最初に、ソース データベースから選択できることを確認します。

SELECT t.Field1, t.Field2, t.Field3
FROM `dbprod`.`SomeTable` t;

それは動作しますか?そうでない場合は、ソース データベースに対する選択権限をユーザーに付与する必要があります。

両方のデータベースが同じサーバー上にありますか?

于 2008-12-03T18:52:15.837 に答える