本トピックでは、セキュアアクセスプロキシを有効化した後、MySQL プロトコル経由でターゲットインスタンスに接続する方法について説明します。
前提条件
-
インスタンスでセキュアアクセスプロキシが有効化されていること。詳細については、「セキュアアクセスプロキシの有効化」をご参照ください。
-
プロキシエンドポイントを使用したインスタンスへのアクセス権限が付与されていること。詳細については、「プロキシエンドポイントを使用したデータベースインスタンスへのアクセス権限の申請」をご参照ください。
使用上の注意
セキュリティコラボレーションモードのインスタンスでは、セキュアアクセスプロキシを介した接続はセキュリティルールの対象となります。これらのルールは、クエリが返すことができる行数を制限し、設定可能な最大値は 100,000 です。
-
セキュリティルールをバイパスするには、データベースコンソールで提供されているエンドポイントを使用してデータベースに接続するか、DMS のテクニカルサポートに連絡してユースケースを評価してもらいます。
-
セキュリティコラボレーションモードではないインスタンスの場合、クエリごとに返される最大行数をカスタマイズすることはできません。デフォルトの制限は 3,000 行です。
制限事項
-
MySQL クライアントのアイドルタイムアウトは 900 秒を超えることはできません。
-
接続プールを使用する場合、キープアライブ間隔は 900 秒を超えることはできません。
接続プールを使用し、キープアライブ間隔を 750 秒に設定することを推奨します。
接続例
セキュアアクセスプロキシが有効になっているターゲットインスタンスには、MySQL CLI、 SQL クライアント、またはプログラムコードを使用して接続できます。
MySQL CLI の使用
次の形式を使用します:
mysql -h<host> -P<port> -u<user_name> -p<password> <database> -e '<sql_statements>'
パラメーター:
|
パラメーター |
説明 |
|
host |
ターゲットインスタンスのプロキシエンドポイントです。これは、「セキュアアクセスプロキシ」ページで、内部またはパブリックプロキシエンドポイントの MySQL プロトコルアドレスとして表示されています。 |
|
port |
ターゲットインスタンスのポート (例: 3306) です。このポートは、「セキュアアクセスプロキシ」ページに表示される MySQL プロトコルアドレスの一部です。 |
|
user_name |
ご自身の AccessKey ID です。 DMS は承認後にこの ID を割り当てます。「セキュアアクセスプロキシ」ページの許可されたユーザーリストで確認できます。 |
|
password |
ご自身の AccessKey Secret です。 DMS は承認後にこのシークレットを割り当てます。「セキュアアクセスプロキシ」ページの許可されたユーザーリストで確認できます。 |
|
database |
ターゲットインスタンス内のデータベースの名前です。 |
|
sql_statements |
実行する SQL コマンド (例: SHOW DATABASES) です。 |
例:
mysql -hdpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com -P3306 -uYOUR_ACCESS_KEY_ID -pYOUR_ACCESS_KEY_SECRET schema -e 'SHOW DATABASES'
プログラムコードの使用
Python の例では Python 2 を使用しています。
// dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com:3306 は、ターゲットインスタンスのプロキシエンドポイントとポートです。
// エンドポイントとポートは、「セキュアアクセスプロキシ」ページの MySQL プロトコルアドレスで確認できます。
// schema は、ターゲットインスタンス内のデータベースの名前です。
String url = "jdbc:mysql://dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com:3306/schema";
Properties properties = new Properties();
// AccessKey ID を使用します。「セキュアアクセスプロキシ」ページの許可されたユーザーリストで確認できます。
properties.setProperty("user", "YOUR_ACCESS_KEY_ID");
// AccessKey Secret を使用します。「セキュアアクセスプロキシ」ページの許可されたユーザーリストで確認できます。
properties.setProperty("password", "YOUR_ACCESS_KEY_SECRET");
try (Connection connection = DriverManager.getConnection(url, properties)) {
try (Statement statement = connection.createStatement()) {
// execute メソッドを使用して SQL ステートメントを実行します。この例では SHOW DATABASES を使用しています。他の SQL ステートメントに置き換えることができます。
statement.execute("SHOW DATABASES");
ResultSet resultSet = statement.getResultSet();
while (resultSet.next()) {
System.out.println(resultSet.getString(1));
}
}
} catch (Exception e) {
e.printStackTrace();
}import pymysql
try:
# host: ターゲットインスタンスのプロキシエンドポイント
# port: ターゲットインスタンスのポート
# user: AccessKey ID。「セキュアアクセスプロキシ」ページの許可されたユーザーリストで確認できます。
# password: AccessKey Secret。「セキュアアクセスプロキシ」ページの許可されたユーザーリストで確認できます。
# database: ターゲットインスタンス内のデータベースの名前
conn = pymysql.connect(host='dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com', port=3306, user='YOUR_ACCESS_KEY_ID', password="YOUR_ACCESS_KEY_SECRET",database ='schema')
cur = conn.cursor(pymysql.cursors.DictCursor)
# execute メソッドを使用して SQL ステートメントを実行します。この例では SHOW DATABASES を使用しています。他の SQL ステートメントに置き換えることができます。
cur.execute('SHOW DATABASES')
rs = cur.fetchall()
print rs
finally:
cur.close()
conn.close()var mysql = require('mysql');
var connection = mysql.createConnection({
// host: ターゲットインスタンスのプロキシエンドポイント
host : 'dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com',
// user: AccessKey ID。「セキュアアクセスプロキシ」ページの許可されたユーザーリストで確認できます。
user : 'YOUR_ACCESS_KEY_ID',
// password: AccessKey Secret。「セキュアアクセスプロキシ」ページの許可されたユーザーリストで確認できます。
password : 'YOUR_ACCESS_KEY_SECRET',
// port: ターゲットインスタンスのポート
port : '3306',
// database: ターゲットインスタンス内のデータベースの名前
database : 'schema'
});
connection.connect();
// execute メソッドを使用して SQL ステートメントを実行します。この例では SHOW DATABASES を使用しています。他の SQL ステートメントに置き換えることができます。
connection.query('SHOW DATABASES', function(err, result) {
console.log(result);
});
connection.end();SQL クライアントの使用
この例では Navicat を使用します。次のフィールドを設定してください:
-
Host : ターゲットインスタンスのプロキシエンドポイント
-
Port : ターゲットインスタンスのポート
-
User name : ご自身の AccessKey ID
-
Password : ご自身の AccessKey Secret