web-dev-qa-db-ja.com

iSQL / FreeTDSを通常のクライアントのように動作させる方法は?

サードパーティのSybaseデータベースがあり、ユーザーは iSQL を使用してLinuxボックスに接続してクエリを実行したいと考えています。 nixODBC および FreeTDS をインストールしました。ただし、サードパーティのデータベースであるため、GRANTを実行できません。 Linux上のiSQLでクエリが失敗する:

[42501][unixODBC][FreeTDS][SQL Server]ASA Error -121: Permission denied: you do not have permission to use the "CREATE PROCEDURE" statement

ISQLによって送信される実際のSQLはCREATE PROCEDURE <some temporary name> AS <the actual sql>のようです。 iSQLとFreeTDSのマンページを読みましたが、この動作を無効にする方法についてのヒントはありません。

これはPythonでは問題なく機能します。

>>> import Sybase
>>> db = Sybase.connect('Host:port', 'user', 'password', 'db')
>>> c = db.cursor()
>>> c.execute('select table_name from systable')
>>> len(c.fetchall())
570

したがって、Sybaseクライアントライブラリは正しくインストールされていると思います。代わりにこのソリューションをお勧めする前に、DBAとしてiSQLの修正について何かできますか?

4
Gaius

私はこれを以前に見たことがあります。 Sybase ASEドキュメント によると:

Adaptive Server Enterpriseは、一時的なストアドプロシージャを使用して動的SQLを実装します。一時ストアドプロシージャは、SQLステートメントが準備されると作成され、準備されたステートメントの割り当てが解除されると破棄されます... [a]この実装の結果、Adaptive Serverにアクセスして動的SQLを使用するアプリケーションは、AdaptiveServerの制限を受けます。ストアドプロシージャ。

ただし、これらをストアドプロシージャ/動的SQLとして扱うようにASEに要求しているのがunixODBCインターフェイスなのかisqlツールなのかはわかりません。

2
TML