И вновь Direct SQL

Приемы и подходы, обмен опытом

Модераторы: Screw, larin

cruger
топ-софт
Сообщения: 566
Зарегистрирован: Пт, 21/09/2007 15:19
Имя Фамилия: Фёдор Терсин
Откуда: Галактика Софт
Контактная информация:

Re: И вновь Direct SQL

Сообщение cruger »

Подмена заранее описанной хранимки - это 100% легальная операция с точки зрения безопасности. Т.к. правами на такое действие распоряжается админ. И админ же управляет разрешением на запуск зарегистрированной хранимки.
Это никто отламывать не собирается. Незачем. Да и вряд ли это возможно.

Про create view повторюсь - спроса они не получили, поэтому остались в зачаточном состоянии с известными концептуальными и реализационными (вроде бы) проблемами. Затрудняюсь сказать, в какой степени они работоспособны в настоящее время. Желание починить есть. Ресурсов нет.
m0p3e
заказчик
Сообщения: 46
Зарегистрирован: Вт, 13/01/2009 10:52
Имя Фамилия: Сергей Головчак
Откуда: Гипротрубопровод

Re: И вновь Direct SQL

Сообщение m0p3e »

cruger писал(а):Подмена заранее описанной хранимки - это 100% легальная операция с точки зрения безопасности. Т.к. правами на такое действие распоряжается админ. И админ же управляет разрешением на запуск зарегистрированной хранимки.
Это никто отламывать не собирается. Незачем. Да и вряд ли это возможно.
Пришел к такому же выводи и поэтому без страха опубликовал. :)
cruger писал(а):Про create view повторюсь - спроса они не получили, поэтому остались в зачаточном состоянии с известными концептуальными и реализационными (вроде бы) проблемами. Затрудняюсь сказать, в какой степени они работоспособны в настоящее время. Желание починить есть. Ресурсов нет.
Спрос есть. Т.к. все этих плясок с бубном (перезаливкой данных во временную таблицу) можно легко избежать.

Еще неплохо было бы иметь возможность создавать хранимки без предварительной автоматической обработки.
Если скормить в asql код:

Код: Выделить всё

SQL PROCEDURE GATE(S : STRING);
BEGIN
 EXECUTE IMMEDIATE S;
END
то получаем прикольную неработающую хранимку:

Код: Выделить всё

PROCEDURE GAL."S$GATE" ( S IN VARCHAR2 ) AS 
BEGIN  
 S$EXECUTE;  S$IMMEDIATE;  S$S; 
END; 
а удобнее было бы:

Код: Выделить всё

SQL SETNOCONVERSION=ON; //Отключить режим конвертации
SQL PROCEDURE GATE(S : VARCHAR2);
BEGIN
 EXECUTE IMMEDIATE S;
END
cruger
топ-софт
Сообщения: 566
Зарегистрирован: Пт, 21/09/2007 15:19
Имя Фамилия: Фёдор Терсин
Откуда: Галактика Софт
Контактная информация:

Re: И вновь Direct SQL

Сообщение cruger »

под режимом конвертации подразумевается что? какое-либо перековыривание переданной строки запроса?
cruger
топ-софт
Сообщения: 566
Зарегистрирован: Пт, 21/09/2007 15:19
Имя Фамилия: Фёдор Терсин
Откуда: Галактика Софт
Контактная информация:

Re: И вновь Direct SQL

Сообщение cruger »

m0p3e писал(а):Пришел к такому же выводи и поэтому без страха опубликовал. :)
Вообще-то этот вариант афаик используется в производстве, рекомендуется в подобных случаях и упоминался на форуме.
m0p3e
заказчик
Сообщения: 46
Зарегистрирован: Вт, 13/01/2009 10:52
Имя Фамилия: Сергей Головчак
Откуда: Гипротрубопровод

Re: И вновь Direct SQL

Сообщение m0p3e »

cruger писал(а):под режимом конвертации подразумевается что? какое-либо перековыривание переданной строки запроса?
Да. Добавление F к именам полей. S$ по приведенному выше примеру.
Вообще-то этот вариант афаик используется в производстве, рекомендуется в подобных случаях и упоминался на форуме.
Данная хранимка позволяет выполнить любой запрос. Поэтому и было сомнение.
cruger
топ-софт
Сообщения: 566
Зарегистрирован: Пт, 21/09/2007 15:19
Имя Фамилия: Фёдор Терсин
Откуда: Галактика Софт
Контактная информация:

Re: И вновь Direct SQL

Сообщение cruger »

Мы раздумывали о native sql. Но опять же - всё упирается в безопасность. Админ никак не сможет проконтролировать, что делает прикладной код под конкретным пользователем.

Точка входа - храника. Админ волен на свой страх и риск дать на неё права. Так что никаких проблем.
Vik
партнер
Сообщения: 3
Зарегистрирован: Ср, 17/02/2010 15:16
Имя Фамилия: Баландин Виктор
Откуда: ЭП-Аудит
Контактная информация:

Re: И вновь Direct SQL

Сообщение Vik »

Добрый день. Натолкнулся на такую проблему: при вставке записей в БД через DSQL неверно определяется пользователь (вернее он вообще не определяется). Профайлер показал, что поиск пользователя производится примерно так:

Код: Выделить всё

select atl_nrec from X$USERS where XU$LOGINNAME='<имя пользователя>#1' AND XU$USEROFFICE = 1
Такого пользователя нет, в X$USERS логин хранится без постфикса #1. Как-то можно с этим бороться?
cruger
топ-софт
Сообщения: 566
Зарегистрирован: Пт, 21/09/2007 15:19
Имя Фамилия: Фёдор Терсин
Откуда: Галактика Софт
Контактная информация:

Re: И вновь Direct SQL

Сообщение cruger »

Бороться надо обратившись в техподдержку.
Они там посмотрят, проверят. Если в самом деле беда - зафиксируют, будем исправлять.
den
заказчик
Сообщения: 117
Зарегистрирован: Пт, 26/10/2007 14:16
Имя Фамилия: Денис Кучин
Откуда: Геомостпроект НПО

Re: И вновь Direct SQL

Сообщение den »

Уважаемые разработчики, хотел бы прояснить один момент.
При использовании вызова посредством дскл хранимых процедур :
sqlExecStmt(stmt,'Procedure1('+param1+','+param2....)

обратно с сервера бд возвращается набор данных в Атлантис , и , с помощью разных приемов (sqlfetch, sqlfetchinto и т.п.) данными пользуешься в vip-программе.
А как все это работает если Procedure1 - это объявленная SQL Function дскл - т.е. она возвращает какое то скалярное значение. (return as table, вроде как нельзя в дскл тип функции возвращаемый.). Дальше чтобы получить это одно единственное значение функции все равно пользоваться той же цепочкой работы ? Нельзя никак :

var i : integer
i := Procedure1(param1,param2...)

где Procedure1 это SQL Function Procedure1(param1,param2...) : integer;
cruger
топ-софт
Сообщения: 566
Зарегистрирован: Пт, 21/09/2007 15:19
Имя Фамилия: Фёдор Терсин
Откуда: Галактика Софт
Контактная информация:

Re: И вновь Direct SQL

Сообщение cruger »

sql select top 1 <func_call> from <any_table> into <vip_variable>;

параметры передавать через конструкцию :<expression>
в общем - rtfm

в перспективе, конечно, можно было бы убрать top 1 & from <any_table>...
den
заказчик
Сообщения: 117
Зарегистрирован: Пт, 26/10/2007 14:16
Имя Фамилия: Денис Кучин
Откуда: Геомостпроект НПО

Re: И вновь Direct SQL

Сообщение den »

Существует ли возможность в dsql использовать pick как буфер выбранных значений пользователем ? Сейчас если в запросе используешь pick то учитываются все значения пик по wlist-конкретному (всех пользователей). В доке не нашел этого момента,хотя имеет место быть вот это в примере встроенного прямого скуля:

SQL delete from pick;

Или может уже есть такая проблема в ПИР и планируется решиться ?
Аватара пользователя
larin
топ-софт
Сообщения: 228
Зарегистрирован: Пн, 10/09/2007 12:13
Имя Фамилия: Михаил Ларин
Откуда: ТопCофт
Контактная информация:

Re: И вновь Direct SQL

Сообщение larin »

den писал(а):Существует ли возможность в dsql использовать pick как буфер выбранных значений пользователем ? Сейчас если в запросе используешь pick то учитываются все значения пик по wlist-конкретному (всех пользователей). В доке не нашел этого момента,хотя имеет место быть вот это в примере встроенного прямого скуля:

SQL delete from pick;

Или может уже есть такая проблема в ПИР и планируется решиться ?
Есть такая. ПИР 102.102421 "При обращении к пользовательским таблицам через DSQL не накладывается фильтр по коду пользователя".
Решение заявлено в Атлантисе 5.4.38 ожидайте выхода.
Ответить