Freetds

如何使 iSQL/FreeTDS 表現得像普通客戶端?

  • August 23, 2011

我有一個第三方 Sybase 數據庫,我的使用者想使用iSQL連接到 Linux 機器並從它查詢。我已經安裝了UnixODBCFreeTDS。但是,由於它是第三方數據庫,因此我無法執行任何 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 的應用程序受到 Adaptive Server 儲存過程的限制。

但是,我不確定是 unixODBC 介面還是 isql 工具要求 ASE 將這些視為儲存過程/動態 sql。

引用自:https://dba.stackexchange.com/questions/544