6

StackExchange の最初の投稿 - 簡単に行ってください :)

Asterisk インストールから ms-sql クエリを実行するために、Centos 6 で ODBC をセットアップしました。

私の構成ファイルは次のとおりです。

/etc/odbc.ini

[asterisk-connector]
Description     = MS SQL connection to 'asterisk' database
Driver          = /usr/lib64/libtdsodbc.so
Setup           = /usr/lib64/libtdsS.so
Servername      = SQL2
Port            = 1433
Username        = MyUsername
Password        = MyPassword
TDS_Version     = 7.0

/etc/odbcinst.ini

[odbc-test]
Description = TDS connection
Driver = /usr/lib64/libtdsodbc.so
Setup = /usr/lib64/libtdsS.so
UsageCount = 1
FileUsage = 1

/etc/アスタリスク/res_odbc.conf

[asterisk-connector]
enabled => yes
dsn => asterisk-connector
username => MyUsername
password => MyPassword
pooling => no
limit =>
pre-connect => yes

パスワードとユーザー名を渡すと、ISQL 経由で接続できます。

[root@TestVM etc]# isql -v asterisk-connector MyUsername MyPassword
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL>

..しかし、ユーザー名/パスワードなしで接続できるはずです。返されるのは次のとおりです。

[root@TestVM etc]# isql -v asterisk-connector
[S1000][unixODBC][FreeTDS][SQL Server]Unable to connect to data source
[01000][unixODBC][FreeTDS][SQL Server]Adaptive Server connection failed
[ISQL]ERROR: Could not SQLConnect

これは、ISQL が構成ファイルからユーザー名とパスワードを読み取ることができないかのようです。

Asterisk ダイヤルプラン内から MS-SQL ルックアップを実行できるようにする必要がありますが、そのためには、データ ソース名だけで ISQL を呼び出せる必要があり、認証パラメーターを渡すことはできません。

私がオンラインで読んだすべてのガイドには、

isql -v asterisk-connector

コマンドですが、それは私には起こっていません。

私はこれについて数日間髪を伸ばしてきたので、正しい方向への助けや指針をいただければ幸いです.

前もって感謝します。

編集:

ロギングをオンにしましたが、手がかりがあるかもしれません。ユーザー名とパスワードは確実に渡されていません。

[ODBC][27557][1455205133.129690][SQLConnect.c][3614]
                Entry:
                        Connection = 0xac3080
                        Server Name = [asterisk-connector][length = 18 (SQL_NTS)]
                        User Name = [NULL]
                        Authentication = [NULL]
                UNICODE Using encoding ASCII 'ISO8859-1' and UNICODE 'UCS-2LE'

                DIAG [01000] [FreeTDS][SQL Server]Adaptive Server connection failed

                DIAG [S1000] [FreeTDS][SQL Server]Unable to connect to data source

したがって、ここのユーザー名と認証は [NULL] です。明らかに odbc.ini または res_odbc.conf でユーザー名/パスワードを取得していませんが、問題はその理由です。私は調査を続けます:)

編集2:

OSQL ユーティリティは次を返します。

[root@TestVM etc]# osql -S SQL2 -U MyUsername -P MyPassword
checking shared odbc libraries linked to isql for default directories...
strings: '': No such file
        trying /tmp/sqlH ... no
        trying /tmp/sqlL ... no
        trying /etc ... OK
checking odbc.ini files
        reading /root/.odbc.ini
[SQL2] not found in /root/.odbc.ini
        reading /etc/odbc.ini
[SQL2] found in /etc/odbc.ini
found this section:
looking for driver for DSN [SQL2] in /etc/odbc.ini
  no driver mentioned for [SQL2] in odbc.ini
looking for driver for DSN [default] in /etc/odbc.ini
osql: error: no driver found for [SQL2] in odbc.ini
4

4 に答える 4

0

この正確な問題について unixODBC の開発者である Nick Gorham に連絡したところ、isql が構成ファイルからユーザー名/パスワードを読み取っていないことが確認されました。

こんにちはニック、

unixODBC は素晴らしいプロジェクトだと思いますが、安全ではないことに驚きました (または、少なくとも適切な使用方法がわかりません)。

isql を使用してデータベースに接続するときに、パスワードを入力する必要があります。共有サーバーでは、これは安全ではありません。

$ ps –aux

コマンドはパスワードを平文で表示します。

それに対する修正はありますか?自分のユーザーだけが読めるファイルにパスワードを入れることはできますか?

ご協力ありがとうございました。

答え:

やあ、

ドライバー次第です。odbc.ini または ~/.odbc.ini ファイルからユーザーとパスワードを読み取ることができるため、そこにパスワードを保存できます。

isql は単純なテスト アプリケーションとしてのみ設計されています。ilsq を変更して、選択したファイルからユーザーとパスワードを取得し、必要に応じて復号化することを妨げるものは何もありません。

于 2016-09-23T15:07:50.913 に答える
0

odbc.ini で、 「ユーザー名」を「UID」に、「パスワード」を「PWD」に置き換えます。FreeTDS マニュアル - 第 4 章 - ODBC の準備から:

この難問に対する最初の ODBC ソリューションは、odbc.ini ファイルを採用していました。odbc.ini には、一般的にデータ ソース名 (DSN) として知られる、サーバーに関する情報が格納されています。関数 SQLConnect(DSN, UID, PWD) を呼び出すことによってサーバーに接続された ODBC アプリケーション。DSN は odbc.ini のデータ ソース名エントリ、UID はユーザー名、PWD はパスワードです。DSN に関するすべての情報は、odbc.ini に保持されていました。そして、すべてが世界で正しかった。

ODBC 3.0 仕様では、新しい関数 SQLDriverConnect が導入されました。接続属性は、連結された名前と値のペアの文字列である単一の引数として提供されます。SQLDriverConnect は、名前と値のペアの文字列により、呼び出し元が、元の DSN、UID、および PWD に加えて、ドライバーが受け入れることができるその他のパラメーターを渡すことができるという点で、SQLConnect の機能を包含していました。さらに、アプリケーションは使用するドライバーを指定できます。実際には、DSN プロパティのセット全体をパラメータとして SQLDriverConnect に指定できるようになり、odbc.ini が不要になりました。これにより、いわゆる DSN レス構成 (odbc.ini を使用しないセットアップ) が使用されるようになりました。

于 2016-02-12T07:49:26.917 に答える