Come rendere ISQL / FreeTDS si comportano come un cliente normale?
Domanda
Ho un terzo database Sybase, che i miei utenti vorrebbero connettersi e query da una macchina Linux, utilizzando iSQL . Ho installato UnixODBC e FreeTDS . Come è base di dati di terze parti tuttavia, non sono in grado di eseguire eventuali finanziamenti. La query non riesce con iSQL su Linux:
[42501][unixODBC][FreeTDS][SQL Server]ASA Error -121: Permission denied: you do not have permission to use the "CREATE PROCEDURE" statement
Sembra che l'SQL effettivo che viene sempre inviato dal iSQL è CREATE PROCEDURE <some temporary name> AS <the actual sql>
. Ho letto le pagine di manuale e ISQL FreeTDS ma non v'è alcun accenno in là su come disattivare questo comportamento.
Questo funziona bene in 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
Quindi, credo di aver installato correttamente le librerie client Sybase. Prima vi consiglio questa soluzione, invece, posso come un DBA nulla fissaggio iSQL?
Soluzione
Ho visto questo prima. Secondo il Sybase ASE Documentazione :
Adaptive Server Enterprise implementa SQL dinamico utilizzando stored procedure temporanee. Una stored procedure temporanea viene creata quando un'istruzione SQL è preparato, e distrutto quando quella dichiarazione preparata viene deallocato ... [a] sa conseguenza di questa implementazione, un'applicazione accesso Adaptive Server e utilizzando Dynamic SQL è soggetto alle restrizioni di Adaptive Server stored procedure.
Tuttavia, non sono sicuro se è l'interfaccia unixODBC, o lo strumento isql, che chiede l'ASE per il trattamento di questi come stored procedure / SQL dinamico.