odbc_pconnect работает, но PDO выдает ошибку

Я установил соединение с БД Sybase через unixODBC и FreeTDS на сервере CentOS. (У меня нет сервера Sybase, и у меня просто есть учетная запись с разрешениями только на чтение)

TL; DR: Я могу соединиться как с odbc_pconnect и PDO, но когда я выполняю тот же запрос odbc_pconnect работает пока PDO возвращает ошибку

Полная история: я создал простой тест, используя odbc_pconnect

$query = "select COUNT(*) from table_name";

$conn = odbc_pconnect("myDSN", 'myusername', 'mypassword');

if(!$conn)
die("Connection failed");
if($result = odbc_exec($conn, $query))
{
odbc_result_all($result);
}

Приведенный выше код работает, и я получаю количество, которое я хочу.

Затем я попытался с помощью PDO

$connectionstring = "odbc:myDSN;";
try {
$db = new \PDO(
$connectionstring , 'myusername', 'mypassword');
} catch (PDOException $e)
{
echo 'Connection failed: ' . $e->getMessage();
}
$rs = $db->query($query);
debug($db->errorInfo());

Соединение установлено (без ошибки «ошибка подключения»), но затем сервер возвращает ошибку:

[FreeTDS] [SQL Server] Ошибка ASA -121: в доступе отказано:
у вас нет разрешения на использование инструкции «CREATE PROCEDURE»
(SQLExecute [262] в /builddir/build/BUILD/php-5.4.16/ext/pdo_odbc/odbc_stmt.c:254)

ну, как вы можете видеть, мой запрос не пытается создать какую-либо процедуру

Я пробовал разные строки подключения, но результат не меняется

Я думаю, проблема в моей конфигурации odbc и freeTDS, а не в PHP. Но все же остается вопрос: почему разное поведение?

редактировать Я обнаружил ту же проблему, пытаясь получить доступ к источнику данных из консоли: если я попытаюсь с tsql

tsql -S myDSN -U myusername -P mypassword

Я могу выполнить запрос. Но когда я получаю доступ с помощью isql:

isql -v myDSN myusername mypassword

Я получаю ту же ошибку, что и aobove:

[42501] [FreeTDS] [SQL Server] Ошибка ASA -121: разрешение отклонено: у вас нет разрешения на использование инструкции «CREATE PROCEDURE»
[ISQL] ОШИБКА: не удалось выполнить SQLExecute

Я думаю, это связано с этот

PS
Я использую CakePHP 3.1.11

3

Решение

Вы не можете создавать процедуры, но CakePHP может сделать это в фоновом режиме для вас. Если у вас есть только права на чтение, вы не можете создавать процедуры, источник:

Далее описываются проверки разрешений для процедуры создания (также при создании расширенной процедуры), которые различаются в зависимости от ваших детальных настроек разрешений.

Разрешены гранулярные разрешения — у вас должна быть привилегия создания процедуры. У вас должна быть привилегия создания любой процедуры для запуска процедуры создания для других пользователей.

Детальные разрешения отключены — вы должны быть владельцем базы данных или иметь привилегию процедуры создания.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]