質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Windows Server

Windows Serverとは、Microsoft社のサーバ用オペレーティングシステムの総称です。 企業内ネットワークなどで利用されるサーバ機へ導入することを想定して開発されているため高い安定性があり、 管理機能を提供するソフトウェアが多く含まれています。

Q&A

解決済

1回答

273閲覧

Python 社外からオンプレミスDBへの接続

nonsan

総合スコア3

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

ネットワーク

ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Windows Server

Windows Serverとは、Microsoft社のサーバ用オペレーティングシステムの総称です。 企業内ネットワークなどで利用されるサーバ機へ導入することを想定して開発されているため高い安定性があり、 管理機能を提供するソフトウェアが多く含まれています。

0グッド

0クリップ

投稿2024/03/13 03:13

編集2024/03/13 06:25

実現したいこと

Pythonで作成したデスクトップアプリケーションを社外(社外ネットワーク)から使用し、オンプレミスデータベース(MicrosoftSQLServer)へ接続したい。
一番出来たら良いなと思うことは「Microsoft On-premises data Gateway」を利用して接続出来ること。

発生している問題・分からないこと

「Microsoft On-premises data Gateway」はPythonで利用出来るのかがまず分かっていません。
社外から接続する場合はどの様な手順を踏むのが一般的でしょうか。

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

PowerBIやPowerAppsで「Microsoft On-premises data Gateway」を利用して社外から接続することは実現出来ています。
Pythonアプリから社内ネットワークへの接続も実現出来ています。接続はpyodbcを使用し、ドライバーは「ODBC Driver 18 for SQL Server」を利用しています。

とりあえずChatGPTに言われるがまま「connection_string = f'DRIVER={driver_info};SERVER={server};GATEWAY={gateway_host};DATABASE={database};UID={user};PWD={password};ENCRYPT={encrypt};'」という形でGateWayの名前をセットして社内から接続は出来ていますが、肝心の社外ネットワークからの接続が出来ません。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ikedas

2024/03/13 03:27

質問内容を見る限り、この場で回答をもらえたとしてもそれをもとに実際に問題を解決するまでのハードルが高すぎると思います。社内の人員でも外部の業者にお金を払うのでもいいですが、他の方に依頼して実現してもらうほうがよいと思います。
nonsan

2024/03/13 03:57

おっしゃることは良く分かるのですが、そんな事を言っていたら前に進めないので分からないなりの方向性が知りたいのです。
logres_Fan

2024/03/13 04:13

会社の許可はあるの?
nonsan

2024/03/13 04:49

勿論あります。 今は手段の把握・選定の段階です。他の方のコメントにあったとおり、私がそれを理解して実現するのに途方もない時間が掛かるという話であれば外部の業者を利用する選択もあるでしょう(恐らくその場合は有償の社外ソフト利用になるでしょうが)。それを含め、自身で判断するためにせめて大まかな流れだけでも教えていただけたら幸いです。 後は、個人的にHTML、PHP、JAVAScriptを使ったWEBアプリケーション運用をしており、その延長でPythonアプリ作成に興味を持っています。後学の為に色々知りたいです。
dodox86

2024/03/13 05:58 編集

Pythonだけの問題ではない様ですね。インフラよりでは。 こちらを見ると、 https://learn.microsoft.com/ja-jp/data-integration/gateway/service-gateway-onprem 少なくとも「オンプレミス データ ゲートウェイ」とは > クラウド内に存在しないオンプレミス データといくつかの Microsoft クラウド サービスとの間で迅速かつ安全なデータ転送を行います。 そのようなサービスとしては、Power BI、Power Apps、Power Automate、Azure Analysis Services、Azure Logic Apps があります。 のようにマイクロソフト社の特定のサービスと連携する為のもののようです。社外(リモート)から社内のサーバー、質問者さんが求めるものはSQL Serverの様ですが、Pythonの問題というよりはPythonで使えるODBCドライバーとSQL Server、社内、社外のネットワークや認証に関わる環境に依存することのように思います。社外から社内のSQLサーバーに直接接続することの是非はteratailに限らず色々なところで語られています。質問に関しては、タグを"Python"だけにせず、"Windows Server"や"SQL Server", "ネットワーク"などを追加するともっと皆さんの目に留まると思います。
nonsan

2024/03/13 06:24 編集

私こういった回答を求めておりました。本当に感謝いたします。 まず、想定していたとおり、決められたサービスの範囲でしか使用出来ないものと言うことが分かりました。ありがとうございます。 >社内、社外のネットワークや認証に関わる環境に依存する 懸念していた通りでした。私この辺りのインフラ構築に弱いのでこの機会に学習したいと思います。 最近、証明機関構築や暗号化接続は調べて一応形には出来たので(素人に毛が生えた程度でしょうが…) セキュリティ問題含め調査します。この関係でまた投稿するかもしれませんが、目に止まった際は助言いただけると幸いです。 >タグを"Python"だけにせず、"Windows Server"や"SQL Server", "ネットワーク"などを追加するともっと皆さんの目に留まると思います。 teratail自体も最近使い始めたので、このような助言も非常にありがたいです。タグ追加いたしました。
guest

回答1

0

ベストアンサー

直接的に解決する回答ではないのですが、他の方の回答が付かないようでしたので、不十分ながらも回答を試みてみます:

コメントにも一部書きましたが、リモートからインターネットを介して社内のMicrosoft SQL Serverに接続する方法については、様々なところで取り上げられています。teratail内でもPythonとは違えど同じような要望の質問で取り上げられたことがあったと思います。具体例はちょっと見付けられませんでしたが。

本質的には「Pythonで云々...」と言うよりはインターネット越しの社内のSQL Serverへの接続の問題に集約されるはずですが、
「インターネット経由で SQL Server に接続するには?」や、「How to connect SQL Server via internet ?」などと検索すると、要約された方法が検索結果として取得できるはずです。つたなくても英語の方が豊富な情報を得られることも多いです。ChatGPTやMicrosoft EdgeのCopilotなど、AIに訊ねても良いでしょう。

ただ、それらは「社外からインターネット越しに接続する為」の単なる技術的な情報です。一時的なデモや技術的調査が目的ならまだしも、通常の運用として扱うと生半可な対応と運用体制では大きなセキュリティホールになり得ます。通常はSQL Serverなどへの接続口を直接インターネットに露出することはしません。WEBサーバーのバックに配置して間接的にデータをやり取りするのが一般的です。できる限り透過的にSQL Serverとアクセスしたいのであれば、例えばVPNの導入等が必要になると思います。社内のネットワーク・インフラ運用部門との連携が必要になるはずで、その辺りは区別して考えましょう。

尚、Microsoftの「オンプレミス データ ゲートウェイ(on-premises data gateway)」を使った方法について、ちょっと興味を覚えて探ってみました。

「個人用モード (personal mode)」でインストールすればPower BI下でPythonスクリプトを使い、データソースとしてSQL Serverに接続し、Pythonスクリプトである程度のことはできそうに思えます

個人モード(personal mode)ではあくまでインストールした個人でしか使えず、作ったアプリを不特定多数で使うことはできない制限はあります。常駐もせず、データに対して参照(SELECT)はできるが更新(INSERTやUPDATE)はできない、等の制限もあるかもしれませんが、用途によってはこれで要求を満たせる可能性もあります。

※私の方ではこれらを実際に試せる環境になく、あくまで記事を読んだ感触に留まります。誤りがある可能性がありますので、ご注意ください。

投稿2024/03/18 07:27

dodox86

総合スコア9183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nonsan

2024/03/19 00:37

>通常はSQL Serverなどへの接続口を直接インターネットに露出することはしません。WEBサーバーのバックに配置して間接的にデータをやり取りするのが一般的です。 ⇒現在、ローカル環境に置いたテキストファイルに接続情報を記載し、pythonで読み取って接続するという方法を試していました。社内で使用するPGであればこれでも良いのかもですが、社外接続となると更に考慮が必要なようですね。 >できる限り透過的にSQL Serverとアクセスしたいのであれば、例えばVPNの導入等が必要になると思います。社内のネットワーク・インフラ運用部門との連携が必要になるはずで、その辺りは区別して考えましょう。 ⇒インフラ担当に確認したところ、社内拠点間は社外システムを利用したVPN接続を行っていました。今のところ社外からとなると、そのシステムに対象者を登録し「毎回担当者がVPN接続をしてから社内環境操作」といった方法しか無いようでした。皆さんの回答を見る限り他にもやり方はありそうですが… PowerBI(on-premises data gateway)については導入中となっており、セキュリティを含め、社外からの接続は問題無いと思われます。現状、社内からの社内データを変更したい場合はVPN接続をしてから社内にあるデスクトップアプリケーションを操作してもらうか、PowerAppsを導入するといった選択をした方が安全と考えました。 外部からの接続についてはご教授いただいた調査方法で引き続き学習したいと思います。 「このレベルでは出来ない」と否定されて終わることが多い中、親切な回答が本当に有難かったです。 機会があればまたよろしくお願いします。
dodox86

2024/03/19 03:09

多少なりとも回答がお役に立てたようでよかったです。 > 社外からとなると、そのシステムに対象者を登録し「毎回担当者がVPN接続をしてから社内環境操作」といった方法しか無いようでした。皆さんの回答を見る限り他にもやり方はありそうですが… ご質問の投稿当初はまだ情報が出そろってなかったので仕方なかったですが、拠点間でVPNをはれるインフラ体制が整っているのであれば、外部へ委託せずとも社内の部門と連携して解決することはできるのかもしれません。しかしながらVPNで運用しているということはインターネットに開放するポートを最低限にしてセキュリティリスクを減らす目的があるのでしょうから、VPNを離れて独自サービスの為のポートを開くのは、運用面でやはり難しいかもしれませんね。 WEBサーバーを運用されているのであれば、SQL Serverとのインターフェース用のREST APIを新規で開発して用意し、最低限の機能を提供するなども考えられます。外部から使うアプリは、そのREST APIを使用して間接的にSQL Serverとデータをやり取りする、と言う目論見です。単なる一例です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問