И вновь Direct SQL

Программирование на Atlantis: приемы и подходы, обмен опытом

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

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

Re: И вновь Direct SQL

Сообщение cruger » Ср, 22/12/2010 20:54

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

Про create view повторюсь - спроса они не получили, поэтому остались в зачаточном состоянии с известными концептуальными и реализационными (вроде бы) проблемами. Затрудняюсь сказать, в какой степени они работоспособны в настоящее время. Желание починить есть. Ресурсов нет.

m0p3e
заказчик
Сообщения: 46
Зарегистрирован: Вт, 13/01/2009 10:52
Имя Фамилия: Сергей Головчак
Откуда: Гипротрубопровод

Re: И вновь Direct SQL

Сообщение m0p3e » Чт, 23/12/2010 10:03

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 » Чт, 23/12/2010 11:15

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

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

Re: И вновь Direct SQL

Сообщение cruger » Чт, 23/12/2010 11:35

m0p3e писал(а):Пришел к такому же выводи и поэтому без страха опубликовал. :)
Вообще-то этот вариант афаик используется в производстве, рекомендуется в подобных случаях и упоминался на форуме.

m0p3e
заказчик
Сообщения: 46
Зарегистрирован: Вт, 13/01/2009 10:52
Имя Фамилия: Сергей Головчак
Откуда: Гипротрубопровод

Re: И вновь Direct SQL

Сообщение m0p3e » Чт, 23/12/2010 12:49

cruger писал(а):под режимом конвертации подразумевается что? какое-либо перековыривание переданной строки запроса?

Да. Добавление F к именам полей. S$ по приведенному выше примеру.

Вообще-то этот вариант афаик используется в производстве, рекомендуется в подобных случаях и упоминался на форуме.

Данная хранимка позволяет выполнить любой запрос. Поэтому и было сомнение.

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

Re: И вновь Direct SQL

Сообщение cruger » Чт, 23/12/2010 14:05

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

Точка входа - храника. Админ волен на свой страх и риск дать на неё права. Так что никаких проблем.

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

Re: И вновь Direct SQL

Сообщение Vik » Пт, 25/03/2011 12:05

Добрый день. Натолкнулся на такую проблему: при вставке записей в БД через 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 » Пт, 25/03/2011 15:56

Бороться надо обратившись в техподдержку.
Они там посмотрят, проверят. Если в самом деле беда - зафиксируют, будем исправлять.

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

Re: И вновь Direct SQL

Сообщение den » Вт, 05/07/2011 11:02

Уважаемые разработчики, хотел бы прояснить один момент.
При использовании вызова посредством дскл хранимых процедур :
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 » Вт, 26/07/2011 21:09

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 » Вт, 13/09/2011 13:12

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

SQL delete from pick;

Или может уже есть такая проблема в ПИР и планируется решиться ?

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

Re: И вновь Direct SQL

Сообщение larin » Чт, 15/09/2011 10:54

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

SQL delete from pick;

Или может уже есть такая проблема в ПИР и планируется решиться ?


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


Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя