• 締切済み

SQLサーバをTCP/IPレベルで操作したい

MySQLを使ってデータベースの勉強をしています。 SQLサーバへのアクセス手段を提供するAPIは言語ごとに沢山公開されていますが、ちょっと必要に駆られまして、TCP/IPのレベルでMySQLのサーバと通信する必要が出てきてしまいました。 そこで、文献で通信プロトコルを調べようとしたのですが、見事に挫折。Port3306に届くパケットをダンプして眺めてみたのですが、複雑すぎてこれも挫折。 量が多くて英文のオンラインマニュアルから探すのもできない状態なのですが、書籍などで解説しているものはありませんでしょうか。

みんなの回答

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.4

>MS-SQLではなくてMySQLなのですが・・・。 確かに質問文に書いてありましたね。失礼しました。 そうしたら、タイトルに"SQLサーバ"って書かないでくださいね・・・。

pythian
質問者

お礼

し、失礼いたしました<(_ _)>

全文を見る
すると、全ての回答が全文表示されます。
  • cse_ri2
  • ベストアンサー率25% (830/3287)
回答No.3

パケット通信を利用した、クライアント・サーバアプリケーション を自分で開発するとうことになるかと思います。 まぁTCP/IPプロトコルを使えばなんでもいいのであれば、 XMLなども視野に入るかと。 ようはクライアントから発行した支持をサーバのアプリケーション に投げ、APIを活用したMySQLへのアクセスはサーバアプリ で行うようにするということです。

pythian
質問者

お礼

ありがとうございます。そうですね。実際の入出力を行うプログラムを書いておいて、それに対して操作を行うようにしたいと思います。

全文を見る
すると、全ての回答が全文表示されます。
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

>ユーザIDと実行時ごとに暗号化されたパスワードが流れていました。ホストとコネクションを張っているようなのですが、API経由で出来るなら、直に叩いてもできないのでしょうか・・・。 ですから・・・ パケットをモニタリングしただけで解読できる暗号だったら意味がないじゃないですか。 他にも、データ自体だって効率的に転送を行うために圧縮がされているかもしれませんし。 大体、Microsoftがそんなもん公開しているとも思えませんし、バージョンが変わるごとに仕様が変わってるかも知れませんし。 telnetやhttp等のテキストベースのプロトコルと一緒にしない方がいいですよ。

pythian
質問者

お礼

MS-SQLではなくてMySQLなのですが・・・。パスワードは、サーバからsaltが送られてきてそれを使って暗号化して送っているようなので、解読しなくてもエンコードの方法だけわかれば問題ないのではないかと考えました。 (その他の通信文は平文のテキストでした) フリーで各言語用の自作APIが公開されているなら、通信に関する仕様が公開されているはずだと考えたのです。ご意見ありがとうございます。もう少し考えてみます。

全文を見る
すると、全ての回答が全文表示されます。
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

無謀です。 ユーザIDやパスワードは? そんなのができたらセキュリティも何もなくなります。

pythian
質問者

補足

無論、認証もTCP/IPレベルで行おうとしています。実はパケットを覗いてみたところ、ユーザIDと実行時ごとに暗号化されたパスワードが流れていました。ホストとコネクションを張っているようなのですが、API経由で出来るなら、直に叩いてもできないのでしょうか・・・。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 80番ポート(TCP,UDP)の意味

    パケットフィルタリングの設定のために、許可するプロトコル/ポートを調査しています。 Wikipedia「TCPやUDPにおけるポート番号の一覧」によると、「80/TCP,UDP」のようにTCPとUDP両方記載されているものがあります。 私は80番ポート(HTTP)はTCPのみ使用していると思っていましたが、この表記によるとUDPも使用していると解釈できます。 80番ポートに限らず、22(SSH)、25(SMTP)なども同じ表記となっていますが、これはどういう意味なのでしょうか? 個人的には以下の3パターンのいずれかに分類されるのではと考えています。 ■80(HTTP)を例にとったパターン 1.HTTP通信はTCP、UDPどちらのプロトコルでも使用可能 (ソフトウェアはどちらのプロトコルが来ても対応できる) 2.HTTP通信はTCP、UDPの両方を使用している (ソフトウェアが必要に応じてプロトコルを使い分けている) 3.HTTP通信をTCP、UDPのどちらで実装するかはソフトウェアによって異なる ポートによって上記パターンのいずれになるかは異なりと考えられますので、TCPとUDP両方記載されているものは、両方セットでフィルタに設定しようと考えていますが、その判断について基準などがあればご教示をお願いいたします。

  • TCP/IPでのエラーシーケンス

    TCP/IPで1台のサーバSから複数のコンピュータA,B,C...に データを送信している途中で、 Cがハングパップした時のエラーシーケンスを知りたいのですが。 例えば、 サーバSからA,B,Cに1つのデータを複数のパケットに分けて送信するときに、 送信途中でCがハングアップ(通信不能)した場合に、 サーバSがCにパケットを送信しなくなるのは、どのタイミングなのでしょうか? 例えば、5つ目のパケットで通信不能になった時は Cへのそれ以降のパケットを送信しないのでしょうか? 初歩できなことですが、お願いいたします。 ここら辺のことで、参考になる文献がある場合にも教えて頂きたく思います。

  • SQL Serverへの接続

    下記の環境で開発をすることになりました。 開発言語:Borland C++Builder Professional Ver 5.0 データベース:Microsoft SQL Server2005 SQL Serverの文献を購入したところ、SQL Server2005へ通信するアプリケーションの作成には「.NET Framework Data Provider for SQL Server (SqlClient)」が推奨と書いてあり、「System.Data.SqlClient名前空間を参照することにより一連のクラスを利用できます。」とあります。 そこで、色々調べたのですが、どうしても Borland C++ で System.Data.SqlClient名前空間を参照する方法がわかりません。 参考ソース、参考サイト、参考文献なんでもいいのでご存知の方がいましたら教えて下さい。 (VB.Net、C# などは色々なサイトがあったのですが・・・)

  • SQLサーバー接続について

    DB初心者です。 ODBCからSQLサーバーへのアクセスを設定したく、奮闘しておりますが うまくいかず困っております。 先方から支給されたのは、 DB名、ID、パスワード、ホスト名、ポート番号、MySQLのバージョン5.0.90で、 その通り設定したつもりが、以下のようなエラーが出てソース作成できません。 --- 接続できませんでした。: SQLState: '01000' SQL Server エラー: 11001 [Microsoft][ODBC SQL Server Driver][TCP/IP Sockets]ConnectionOpen(Connect()). 接続できませんでした。: SQLState: '08001' SQL Server エラー: 6 [Microsoft][ODBC SQL Server Driver][TCP/IPSockets]指定された SQL Server が見つかりません。 --- エラー番号で検索してみても原因がわからず・・・ 詳しい方いらっしゃいましたらお願いいたしますm(__)m

  • TCPコネクションについて

    はじめまして 宜しくお願いいたします。 以下ご質問させてください。 TCPコネクションについて クライアント⇔サーバ間通信において、 ポート21からポート80(HTTP)に対してTCPコネクションをオープン することはできるのでしょうか? (クライアントポート21からサーバポート80に対してアクセスする ことってできるのでしょうか?) 自分の認識では・・・ TCPクライアントはダイナミック(OSが割り当てたランダムなポート。しばしば1024から4000の間)にポートを選択すると認識しているので が。 最初にFTP通信をおこなっており、その継続セッションでHTTP通信をおこなうといった場合にそういった使い方をするのでしょうか? 以上 宜しくおねがいいたします。

  • TCP/IP通信3ハンドシェイクについて

    TCP/IPのTCP通信の3ハンドシェイク通信に関して質問なのですが、インターネットを使ったある端末でセンターのサーバーと6秒に1度程度3ハンドシェイク通信を行ってインターネット回線が正常かどうかを判定する機能を持っているそうなのですが、その時に1回の通信でどの程度のパケットをやり取りしているのかということを質問してみたら、約1.2kbyte程度のパケットをやり取りしていると業者の方が言っていました。 ちょっと興味があってWireSharkでこの端末とサーバ間のパケット通信をのぞいてみたところ、端末が1.2kbyte送信していたのですが、サーバからのACKと思われるパケットが1.2kbyteのパケットを返してきていて、再度端末が60バイト程度のパケットをサーバのIPアドレスに送信していました。 私はてっきり、端末とサーバー間のこの3ウェイハンドシェイクのパケットの総量が1.2kbyteだと思っていたのですが、これだと1.2k + 1.2k + 60 = 2.46kbyteとなると思うのですが、パケットのやり取りとしては正しいのでしょうか? サーバー側が受信したら同じ容量の1.2kbyteのデータをACKとして返してきているように思うのですが、Wiresharkで見ても全く同じデータでは無いようでした。サーバはデータを受け取ったら、ちゃんと受信したという1 or 0のデータみたいなものを返せばよいだけだと思うのですが、理由はあるのでしょうか?

  • TCP/IP ACKについて

    初めて質問させて頂きます。 現在WinpCapを使ってTCPの通信プログラムを作成しています。 単純にパケットの受信や送信は出来たので、ローカルサーバーに接続出来るか試しているのですが、通信が確立しません。 状況としては、こちらからSYN = 1でサーバーに信号を送ると、サーバーから返事が来ます。 サーバーの返事を待ってACK = 1でサーバーに返事をするのですが、そのときの状態をWiresharkで確認すると、ACKの番号が2067011292等と表示されて通信が確立しません。 ACKの値が異常なのは判りますが、この数値はどこから来るのか、又対処方法などが有りましたら教えてください。 環境はVC2003、WInXP/Win7です。

  • SQL Server 2000のデータベースサーバーインストール方法を教えてください

    Windows2003 Server評価版 SQL Server 評価版 を使用して、SQLServer2000をインストールしています。 WEBよりダウンロードしたファイルを使用しています。 インストールマニュアルを見ていると、 1.SQL ServerのCDをセットする 2.SQL Server 2000コンポ―ネントをクリックする 3.データベースサーバーのインストールをクリックする  と書いてあるのですが、WEBよりダウンロードしましたのでCDがありません。 どのようにデータベースサーバーをインストールすればよいのでしょうか? 初歩的な質問ですみません。 どうぞよろしくお願いいたします。

  • SQL Server 2008 Express

    Windows Server 2003 に SQL Server 2005 Express で使っている環境の バックアップ目的で サーバ機とWindows Server 2008 R2 Standard (64ビット版)を 購入し、SQL Server 2008 Express をインストールしました。 OSとSQL Server 2008 Expressのインストールはここ数日何度もトライしましたが、 解決に至りません。 Windows Server 2003 に SQL Server 2005 Express上のデータベースに 対して、クライアントは、Windows XP + Office Pro 2003でAccess より リンクテーブル→ODBCデータベース→SQL Server で進めていって テーブルが出てきますが、新しく構築したサーバ機でテストすると。 作成したデータベースが表示されません。 全く表示されないのではなく、デフォルトで入っている、master等は表示されます。 2005から2008へデータベースファイルを持ってきたことが原因と思い、 2008側で作りましたが、やはり、それも表示されません。 OSとの相性が問題かと思い、別のWindows 7 へ入れてみましたが、同じ現象です。 SQL Server 2008 Express 接続でネットで検索をかけると、全く繋がらないと いった質問だけで、ポートを空けるとか言った回等で解決に至ったか分からない まま、締め切られています。 自分の場合は、全く症状が違っていて、繋がるのですが、作成したのが見れないんです。 このような症状あると思うんですが、質問自体見つかりません。 Microsoft に問合せしましたが、所詮無償のものですので、テクネットやこちらを 紹介され、そちらで解決して下さいとのことで困っています。

  • VB + SQL + TCP について

    VisualBasicの質問です。 データベースを使用してソフトを開発しております。 ソフトとは管理ソフトで外部からの顧客情報などを管理しようと思っております。外部からの顧客情報なのでネットワークをしようします。 データベースにはSQL Serverを使用しております。 内部的なアクセスで、サーバ名を入れる又はIPアドレスで指定して接続することができたのですが、外部からのアクセスでIPアドレスを指定しても接続することができません。下記はローカル内での接続に使用したコネクションです。 cn.ConnectionString = "Provider=SQLOLEDB;Network address=192.168.0.2;" & "initial catalog=○○;User ID= sa;Password=''" '192.168.0.2はサーバのIPアドレス '○○はデータベース名 'saはID 'passはないものとしております。 理由として考えられるTCPのポートを空けるのかと思うのですがどなたかご存知の方ご教授お願いします。