サードパーティの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の修正について何かできますか?
私はこれを以前に見たことがあります。 Sybase ASEドキュメント によると:
Adaptive Server Enterpriseは、一時的なストアドプロシージャを使用して動的SQLを実装します。一時ストアドプロシージャは、SQLステートメントが準備されると作成され、準備されたステートメントの割り当てが解除されると破棄されます... [a]この実装の結果、Adaptive Serverにアクセスして動的SQLを使用するアプリケーションは、AdaptiveServerの制限を受けます。ストアドプロシージャ。
ただし、これらをストアドプロシージャ/動的SQLとして扱うようにASEに要求しているのがunixODBCインターフェイスなのかisqlツールなのかはわかりません。