GateKeeper Опубликовано 21 августа, 2009 · Жалоба Безопасность тут: http://billingdelta.ru/lite/faq.html#18Аудит тут: http://billingdelta.ru/lite/faq.html#19 Заодно расскажите, как как второе можно сделать на MySQL ;-) Кто Вам сказал, что я про мускль отзываюсь не как о поделке? http://archives.postgresql.org/pgsql-novic...06/msg00001.php оно? А вот тут на TCL: http://www.alberton.info/postgresql_table_audit.html В качестве укрепления позиции единственных Дартанянов среди пи**расов Вам помогло бы. http://pgfoundry.org/projects/tablelog/ - модуль к постгресу. Правда, использует триггер. Мало? В гугле забанили, а livesearch на запрос postgresql стабильно отправляет на сайт одной-известной-корпорации? И Вы так и не ответили на вопрос про оракел. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
delta_billing Опубликовано 21 августа, 2009 · Жалоба Если в абонентском отделе скопится очередь и руководство узнает, что это из-за тормозов биллинга при формировании расшифровки МТР нас просто порвут. Какая очередь в абонетском отделе за расшифровкой? У вас вообще интерфейс клиента есть в биллинге? Чтобы он дома смотрел свои детализации, сколько ему влезет? На скриншотах что-то ни одного нет окошка кабинета клиента. Или ему тоже предлагается взгромоздить Access (denied), odbc и прочие "классные функциональные штуки"? Раз уж пошла такая пьянка ;-) http://stat.astelecom.ru Логин: alexandr Пароль: 20051981 это `личный кабинет`. Такой кабинет может быть по любому разделу предоставляемых услуг в т.ч. по обычной телефонии. Заходите, смотрите. Советую посмотреть скорость, с которой программа показывает трафик и историю соединений аккаунта. Выборка данных осуществляется из динамического массива: один день -- одна таблица. Объем записей за сутки превышает 1 млн для агрегированного net flow и 150000 для accounting. Про наш трафик и количество абонентов я писал уже, повторяться не буду. Про нагрузку тоже писал. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
delta_billing Опубликовано 21 августа, 2009 · Жалоба Безопасность тут: http://billingdelta.ru/lite/faq.html#18Аудит тут: http://billingdelta.ru/lite/faq.html#19 Заодно расскажите, как как второе можно сделать на MySQL ;-) Кто Вам сказал, что я про мускль отзываюсь не как о поделке? http://archives.postgresql.org/pgsql-novic...06/msg00001.php оно? А вот тут на TCL: http://www.alberton.info/postgresql_table_audit.html В качестве укрепления позиции единственных Дартанянов среди пи**расов Вам помогло бы. http://pgfoundry.org/projects/tablelog/ - модуль к постгресу. Правда, использует триггер. Мало? В гугле забанили, а livesearch на запрос postgresql стабильно отправляет на сайт одной-известной-корпорации? И Вы так и не ответили на вопрос про оракел. Эх, блин. Был у нас тут постгресс. с 2003 по 2006 год. До сих пор мучаемся когда пытаемся оттуда вытащить старые звоночки за те периоды. Большего г*^& в жизни видеть не приходилось. Причина: МЕДЛЕННЫЙ. Все остальное насчет него мало интересно. Персонально вам: Милейший, вы флеймите. Я говорил не про возможности СУБД а биллинга, представленного на рынок. Исходный вопрос остается в силе. По поводу оракла отвечаю. Дорого. Все тоже самое (более удобно, через GUI) можно делать в MsSQL. Кроме того, T-SQL гораздо более читабельный и логичный по сравнению с PL. На sql.ru эта шняга многократно обсуждалась многоми, лень жевать это еще раз. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
delta_billing Опубликовано 21 августа, 2009 · Жалоба [ http://pgfoundry.org/projects/tablelog/ - модуль к постгресу. Правда, использует триггер. ] Сначала не заметил, затем прочитал -- оборжался ;-) Модуль да еще и треггер надо... И диктора Центрального телевидения за кадром ;-))) Вот с помощью этой простой весчи сделан аудит на требуемые таблицы БД. ============================= Cut ======================================================== CREATE PROCEDURE sp_create_audit_trigger @tabname nvarchar (50), @mode int AS /* АСР "ДЕЛЬТА" Процедура создает триггер аудита на заданную таблицу базы данных. Данные выводятся в таблицу audit текущей БД. После выполнения процедуры триггер начинает работать немедленно. Обязательное условие: первое поле в аудируемой таблице должно быть ключевым! Таблица audit также должна быть доступна в базе данных и на нее на INSERT должны быть открыты права _всем_ пользователям. Параметры: @tabname Имя таблицы, на которую надо установить аудит. @mode Режим: 1 - Создать (обновить) триггер. 3 - Удалить триггер. */ DECLARE @action_type int, @obj_id bigint, @obj_name varchar(32), @hostname varchar(32), @a nvarchar (512), @id bigint, @col nvarchar (32), @xtype int, @stype nvarchar (32), @ltype int, @p int, @strSQL nvarchar (512), @debug_sql int, /* тело триггера и переменные */ @open_trigger_sql nvarchar (4000), @close_trigger_sql nvarchar (4000), @close_trigger_sql1 nvarchar (4000), @close_trigger_sql2 nvarchar (4000), @ins_variable_sql nvarchar (4000), @del_variable_sql nvarchar (4000), @variable1_sql nvarchar (4000), @variable2_sql nvarchar (4000), @first_column_sql nvarchar (32), /* UPDATE */ @insert1_sql nvarchar (4000), @insert2_sql nvarchar (4000), @insert3_sql nvarchar (4000), @insert4_sql nvarchar (4000), /* INSERT */ @insert5_sql nvarchar (4000), @insert6_sql nvarchar (4000), @insert7_sql nvarchar (4000), @insert8_sql nvarchar (4000), /* DELETE */ @insert9_sql nvarchar (4000), @insert10_sql nvarchar (4000), @insert11_sql nvarchar (4000), @insert12_sql nvarchar (4000) /* 1- вывести SQL скрипт на экран 0 - выполнить скрипт */ SET @debug_sql = 0 /* cчетчик столбцов таблицы */ SET @p = 0 SET @ins_variable_sql = '' SET @del_variable_sql = '' SET @variable1_sql = '' SET @variable2_sql = '' SET @insert1_sql = '' SET @insert2_sql = '' SET @insert3_sql = '' SET @insert4_sql = '' SET @insert5_sql = '' SET @insert6_sql = '' SET @insert7_sql = '' SET @insert8_sql = '' SET @insert9_sql = '' SET @insert10_sql = '' SET @insert11_sql = '' SET @insert12_sql = '' /* получение ID объекта базы данных */ SET @strSQL = NULL SELECT @id = id, @strSQL = name FROM sysobjects WHERE name = @tabname IF @strSQL = NULL BEGIN RAISERROR ( ' Не найдена исходная таблица в базе данных MAIN! ', 16, 1) RETURN END DECLARE CurFt CURSOR FOR SELECT name, xtype, length FROM syscolumns WHERE id = @id order by colid OPEN CurFt WHILE 1 = 1 BEGIN FETCH FROM CurFt INTO @col, @xtype, @ltype IF @@fetch_status=-1 BREAK; IF @@fetch_status=-2 CONTINUE; IF @p > 0 BEGIN SET @ins_variable_sql = @ins_variable_sql + ', ' SET @del_variable_sql = @del_variable_sql + ', ' SET @variable1_sql = @variable1_sql + ', ' SET @variable2_sql = @variable2_sql + ', ' END ELSE SET @first_column_sql = @col /* первое поле таблицы должно быть ключевое поле! */ /* получение типа данных поля исходной таблицы */ SELECT @stype = CASE name WHEN 'sysname' THEN 'nvarchar (' + LTRIM(RTRIM(STR(@ltype))) + ')' WHEN 'varchar' THEN 'nvarchar (' + LTRIM(RTRIM(STR(@ltype))) + ')' WHEN 'char' THEN 'nvarchar (' + LTRIM(RTRIM(STR(@ltype))) + ')' ELSE name END FROM systypes WHERE xtype = @xtype /* формирование SQL для переменных */ SET @ins_variable_sql = @ins_variable_sql + '@fi' + LTRIM(RTRIM(STR(@p))) + ' ' + @stype SET @del_variable_sql = @del_variable_sql + '@fd' + LTRIM(RTRIM(STR(@p))) + ' ' + @stype SET @variable1_sql = @variable1_sql + '@fd' + LTRIM(RTRIM(STR(@p))) SET @variable2_sql = @variable2_sql + '@fi' + LTRIM(RTRIM(STR(@p))) /* формирование SQL для записи в таблицу аудит - UPDATE */ IF @p BETWEEN 0 AND 10 SET @insert1_sql = @insert1_sql + 'IF (@fi' + LTRIM(RTRIM(STR(@p))) + ' IS NOT NULL AND @fd' + LTRIM(RTRIM(STR(@p))) + ' IS NULL) OR (@fi' + LTRIM(RTRIM(STR(@p))) + ' IS NULL AND @fd' + LTRIM(RTRIM(STR(@p))) + ' IS NOT NULL) OR (@fi' + LTRIM(RTRIM(STR(@p))) + ' != @fd' + LTRIM(RTRIM(STR(@p))) + ') INSERT INTO audit (username, hostname, data, tabname, rec_id, colname, tran_id, action_type, old, new) VALUES (SYSTEM_USER, HOST_NAME(), GETDATE(), ' + CHAR(39) + @tabname + CHAR(39) + ', @fi0, ' + CHAR (39) + @col + CHAR (39) + ' , @tran_id, @action_type, @fd' + LTRIM(RTRIM(STR(@p))) + ', @fi' + LTRIM(RTRIM(STR(@p))) + ' ) ' IF @p BETWEEN 11 AND 22 SET @insert2_sql = @insert2_sql + 'IF (@fi' + LTRIM(RTRIM(STR(@p))) + ' IS NOT NULL AND @fd' + LTRIM(RTRIM(STR(@p))) + ' IS NULL) OR (@fi' + LTRIM(RTRIM(STR(@p))) + ' IS NULL AND @fd' + LTRIM(RTRIM(STR(@p))) + ' IS NOT NULL) OR (@fi' + LTRIM(RTRIM(STR(@p))) + ' != @fd' + LTRIM(RTRIM(STR(@p))) + ') INSERT INTO audit (username, hostname, data, tabname, rec_id, colname, tran_id, action_type, old, new) VALUES (SYSTEM_USER, HOST_NAME(), GETDATE(), ' + CHAR(39) + @tabname + CHAR(39) + ', @fi0, ' + CHAR (39) + @col + CHAR (39) + ' , @tran_id, @action_type, @fd' + LTRIM(RTRIM(STR(@p))) + ', @fi' + LTRIM(RTRIM(STR(@p))) + ' ) ' IF @p BETWEEN 23 AND 33 SET @insert3_sql = @insert3_sql + 'IF (@fi' + LTRIM(RTRIM(STR(@p))) + ' IS NOT NULL AND @fd' + LTRIM(RTRIM(STR(@p))) + ' IS NULL) OR (@fi' + LTRIM(RTRIM(STR(@p))) + ' IS NULL AND @fd' + LTRIM(RTRIM(STR(@p))) + ' IS NOT NULL) OR (@fi' + LTRIM(RTRIM(STR(@p))) + ' != @fd' + LTRIM(RTRIM(STR(@p))) + ') INSERT INTO audit (username, hostname, data, tabname, rec_id, colname, tran_id, action_type, old, new) VALUES (SYSTEM_USER, HOST_NAME(), GETDATE(), ' + CHAR(39) + @tabname + CHAR(39) + ', @fi0, ' + CHAR (39) + @col + CHAR (39) + ' , @tran_id, @action_type, @fd' + LTRIM(RTRIM(STR(@p))) + ', @fi' + LTRIM(RTRIM(STR(@p))) + ' ) ' IF @p BETWEEN 34 AND 48 SET @insert4_sql = @insert4_sql + ' IF (@fi' + LTRIM(RTRIM(STR(@p))) + ' IS NOT NULL AND @fd' + LTRIM(RTRIM(STR(@p))) + ' IS NULL) OR (@fi' + LTRIM(RTRIM(STR(@p))) + ' IS NULL AND @fd' + LTRIM(RTRIM(STR(@p))) + ' IS NOT NULL) OR (@fi' + LTRIM(RTRIM(STR(@p))) + ' != @fd' + LTRIM(RTRIM(STR(@p))) + ') INSERT INTO audit (username, hostname, data, tabname, rec_id, colname, tran_id, action_type, old, new) VALUES (SYSTEM_USER, HOST_NAME(), GETDATE(), ' + CHAR(39) + @tabname + CHAR(39) + ', @fi0, ' + CHAR (39) + @col + CHAR (39) + ' , @tran_id, @action_type, @fd' + LTRIM(RTRIM(STR(@p))) + ', @fi' + LTRIM(RTRIM(STR(@p))) + ' ) ' /* формирование SQL для записи в таблицу аудит - INSERT */ IF @p BETWEEN 0 AND 10 SET @insert5_sql = @insert5_sql + ' INSERT INTO audit (username, hostname, data, tabname, rec_id, colname, tran_id, action_type, old, new) VALUES (SYSTEM_USER, HOST_NAME(), GETDATE(), ' + CHAR(39) + @tabname + CHAR(39) + ', @fd0, ' + CHAR (39) + @col + CHAR (39) + ' , @tran_id, @action_type, NULL, @fi' + LTRIM(RTRIM(STR(@p))) + ' ) ' IF @p BETWEEN 11 AND 22 SET @insert6_sql = @insert6_sql + ' INSERT INTO audit (username, hostname, data, tabname, rec_id, colname, tran_id, action_type, old, new) VALUES (SYSTEM_USER, HOST_NAME(), GETDATE(), ' + CHAR(39) + @tabname + CHAR(39) + ', @fd0, ' + CHAR (39) + @col + CHAR (39) + ' , @tran_id, @action_type, NULL, @fi' + LTRIM(RTRIM(STR(@p))) + ' ) ' IF @p BETWEEN 23 AND 33 SET @insert7_sql = @insert7_sql + ' INSERT INTO audit (username, hostname, data, tabname, rec_id, colname, tran_id, action_type, old, new) VALUES (SYSTEM_USER, HOST_NAME(), GETDATE(), ' + CHAR(39) + @tabname + CHAR(39) + ', @fd0, ' + CHAR (39) + @col + CHAR (39) + ' , @tran_id, @action_type, NULL, @fi' + LTRIM(RTRIM(STR(@p))) + ' ) ' IF @p BETWEEN 37 AND 48 SET @insert8_sql = @insert8_sql + ' INSERT INTO audit (username, hostname, data, tabname, rec_id, colname, tran_id, action_type, old, new) VALUES (SYSTEM_USER, HOST_NAME(), GETDATE(), ' + CHAR(39) + @tabname + CHAR(39) + ', @fd0, ' + CHAR (39) + @col + CHAR (39) + ' , @tran_id, @action_type, NULL, @fi' + LTRIM(RTRIM(STR(@p))) + ' ) ' /* формирование SQL для записи в таблицу аудит - DELETE */ IF @p BETWEEN 0 AND 10 SET @insert9_sql = @insert9_sql + ' INSERT INTO audit (username, hostname, data, tabname, rec_id, colname, tran_id, action_type, old, new) VALUES (SYSTEM_USER, HOST_NAME(), GETDATE(), ' + CHAR(39) + @tabname + CHAR(39) + ', @fd0, ' + CHAR (39) + @col + CHAR (39) + ' , @tran_id, @action_type, @fd' + LTRIM(RTRIM(STR(@p))) + ', NULL ) ' IF @p BETWEEN 11 AND 24 SET @insert10_sql = @insert10_sql + ' INSERT INTO audit (username, hostname, data, tabname, rec_id, colname, tran_id, action_type, old, new) VALUES (SYSTEM_USER, HOST_NAME(), GETDATE(), ' + CHAR(39) + @tabname + CHAR(39) + ', @fd0, ' + CHAR (39) + @col + CHAR (39) + ' , @tran_id, @action_type, @fd' + LTRIM(RTRIM(STR(@p))) + ', NULL ) ' IF @p BETWEEN 25 AND 36 SET @insert11_sql = @insert11_sql + ' INSERT INTO audit (username, hostname, data, tabname, rec_id, colname, tran_id, action_type, old, new) VALUES (SYSTEM_USER, HOST_NAME(), GETDATE(), ' + CHAR(39) + @tabname + CHAR(39) + ', @fd0, ' + CHAR (39) + @col + CHAR (39) + ' , @tran_id, @action_type, @fd' + LTRIM(RTRIM(STR(@p))) + ', NULL ) ' IF @p BETWEEN 37 AND 48 SET @insert12_sql = @insert12_sql + ' INSERT INTO audit (username, hostname, data, tabname, rec_id, colname, tran_id, action_type, old, new) VALUES (SYSTEM_USER, HOST_NAME(), GETDATE(), ' + CHAR(39) + @tabname + CHAR(39) + ', @fd0, ' + CHAR (39) + @col + CHAR (39) + ' , @tran_id, @action_type, @fd' + LTRIM(RTRIM(STR(@p))) + ', NULL ) ' SET @p = @p + 1 END DEALLOCATE CurFt /* SQL скрипт триггера */ SET @open_trigger_sql = ' CREATE TRIGGER audit_' + LTRIM(RTRIM(@tabname)) + ' ON ' + LTRIM(RTRIM(@tabname)) + ' FOR INSERT, UPDATE, DELETE AS BEGIN SET NOCOUNT ON DECLARE @action_type int, @tran_id bigint DECLARE ' + @ins_variable_sql + ', ' + @del_variable_sql + ' SELECT TOP 1 @tran_id = req_transactionID FROM master..syslockinfo (nolock) WHERE req_spid = @@spid and req_transactionID <> 0 IF EXISTS(SELECT * FROM INSERTED) BEGIN IF EXISTS(SELECT * FROM DELETED) SET @action_type = 2 /* UPDATE */ ELSE SET @action_type = 1 /* INSERT */ END ELSE SET @action_type = 3 /* DELETE */ IF @action_type = 2 BEGIN DECLARE CurUpd_' + @tabname + ' CURSOR FOR SELECT * FROM deleted D, inserted I WHERE D.' + LTRIM(RTRIM(@first_column_sql)) + ' = I.' + LTRIM(RTRIM(@first_column_sql)) + ' OPEN CurUpd_' + @tabname + ' WHILE 1 = 1 BEGIN FETCH FROM CurUpd_' + @tabname + ' INTO ' + @variable1_sql + ', ' + @variable2_sql + ' IF @@fetch_status=-1 BREAK; IF @@fetch_status=-2 CONTINUE; ' SET @close_trigger_sql = ' END CLOSE CurUpd_' + @tabname + ' DEALLOCATE CurUpd_' + @tabname + ' END IF @action_type = 1 BEGIN DECLARE CurIns_' + @tabname + ' CURSOR FOR SELECT * FROM inserted OPEN CurIns_' + @tabname + ' WHILE 1 = 1 BEGIN FETCH FROM CurIns_' + @tabname + ' INTO ' + @variable2_sql + ' IF @@fetch_status=-1 BREAK; IF @@fetch_status=-2 CONTINUE; ' SET @close_trigger_sql1 = ' END CLOSE CurIns_' + @tabname + ' DEALLOCATE CurIns_' + @tabname + ' END IF @action_type = 3 BEGIN DECLARE CurDel_' + @tabname + ' CURSOR FOR SELECT * FROM deleted OPEN CurDel_' + @tabname + ' WHILE 1 = 1 BEGIN FETCH FROM CurDel_' + @tabname + ' INTO ' + @variable1_sql + ' IF @@fetch_status=-1 BREAK; IF @@fetch_status=-2 CONTINUE; ' SET @close_trigger_sql2 = ' END CLOSE CurDel_' + @tabname + ' DEALLOCATE CurDel_' + @tabname + ' END END ' /* Удаление тариггера */ SET @obj_name = NULL SELECT @obj_name = name FROM sysobjects WHERE name = 'audit_'+ @tabname IF @obj_name != NULL BEGIN SET @strSQL = 'DROP TRIGGER audit_' + @tabname EXEC (@strSQL) END /* Создание тариггера */ IF @mode IN (1, 2) AND @debug_sql = 0 EXEC (@open_trigger_sql + @insert1_sql + @insert2_sql + @insert3_sql + @insert4_sql + @close_trigger_sql + @insert5_sql + @insert6_sql + @insert7_sql + @insert8_sql + @close_trigger_sql1 + @insert9_sql + @insert10_sql + @insert11_sql + @insert12_sql + @close_trigger_sql2) IF @debug_sql != 0 BEGIN PRINT @open_trigger_sql PRINT @insert1_sql PRINT @insert2_sql PRINT @insert3_sql PRINT @insert4_sql PRINT @close_trigger_sql PRINT @insert5_sql PRINT @insert6_sql PRINT @insert7_sql PRINT @insert8_sql PRINT @close_trigger_sql1 PRINT @insert9_sql PRINT @insert10_sql PRINT @insert11_sql PRINT @insert12_sql PRINT @close_trigger_sql2 END GO == eof == А тут результат работы: http://billingdelta.ru/lite/faq.html#19 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
grfmaniak Опубликовано 21 августа, 2009 · Жалоба Раз уж пошла такая пьянка ;-) http://stat.astelecom.ru Логин: alexandr Пароль: 20051981 это `личный кабинет`. Такой кабинет может быть по любому разделу предоставляемых услуг в т.ч. по обычной телефонии. Заходите, смотрите. Советую посмотреть скорость, с которой программа показывает трафик и историю соединений аккаунта. Выборка данных осуществляется из динамического массива: один день -- одна таблица. Объем записей за сутки превышает 1 млн для агрегированного net flow и 150000 для accounting. Про наш трафик и количество абонентов я писал уже, повторяться не буду. Про нагрузку тоже писал. Да, личный кабинет 5 баллов по информативности, у ланбиллинга кабинет хоть и красивше, но чтобы объяснить абоненту как смотреть свою статистику - проще застрелиться. А тут все ок, ну кроме дизайна конечно. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
grfmaniak Опубликовано 21 августа, 2009 · Жалоба Это я захожу как `sa`, а могу этого не делать, зайти под своей учеткой. Учетная запись пользователя в системе всегда соответсвует логину на sql сервере. Все операции пользователя с данными всегда выполняются от имени этого пользователя что обеспечивает максимальную защиту нанных т.к. она реализована средствами SQL сервера и позволяет вести полный аудит всех интересных нам транзакций чтобы в последствии точно знать, кто из пользователей накосячил и дать по башке...... После осмысления материала просьба показать пальцем на биллинг где есть что-то подобное - хотя-бы на зачаточном уровне. Заодно расскажите, как как второе можно сделать на MySQL ;-) А накой оно нужно? Если интерфейс админа переписать на php - можно в логи писать кто куда заходил и что делал, а заодно избавиться от акцеса, как от пороховой бочки, которая рано или поздно все завалит. И от винды с сервером sql. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
disappointed Опубликовано 21 августа, 2009 · Жалоба http://stat.astelecom.ru/cgi-bin/stat.tcl?...;FMonth=07' Обещаю дальше не копать :))) Для любителей. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
martin74 Опубликовано 21 августа, 2009 · Жалоба token1=alexandr&password=20051981 а вот это вредно на самом деле... Потом абонент ссылочку на свою страничку случайно на форуме опубликует... И начнет задавать вопросы, куда у него денежки делись... Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
delta_billing Опубликовано 21 августа, 2009 · Жалоба Это я захожу как `sa`, а могу этого не делать, зайти под своей учеткой. Учетная запись пользователя в системе всегда соответсвует логину на sql сервере. Все операции пользователя с данными всегда выполняются от имени этого пользователя что обеспечивает максимальную защиту нанных т.к. она реализована средствами SQL сервера и позволяет вести полный аудит всех интересных нам транзакций чтобы в последствии точно знать, кто из пользователей накосячил и дать по башке...... После осмысления материала просьба показать пальцем на биллинг где есть что-то подобное - хотя-бы на зачаточном уровне. Заодно расскажите, как как второе можно сделать на MySQL ;-) А накой оно нужно? Если интерфейс админа переписать на php - можно в логи писать кто куда заходил и что делал, а заодно избавиться от акцеса, как от пороховой бочки, которая рано или поздно все завалит. И от винды с сервером sql. U Интерфейс не должен вообще никуда ничего писать, и уж тем более, отвечать за безопасность! Такими мерьезными вещами должна заниматься только СУБД. Хотя-бы потому, что скрипт на php (php сам по себе весь дырявый в плане безопасности о чем можно судить по количеству взломанных сайтов) может каким-то образом пропатчить злоумышленник и тогда уж точно ничего никуда писаться не будет. Альтернатива php -- tcl/tk 8.4 Да, весь личный кабинет -- это всего навсего 1 файлик размером около 32 кбайт и 1 гиф с баннером вверху. Верите-нет, пока не взрывается. Причем у нас часть юзеров сидит под Access 2k а часть под A97. Тоже касается MS SQL. Уж чего с ним тут только не было -- и диски дохли, и инвертора горели а он живой назло всему ;-) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
terrible Опубликовано 21 августа, 2009 (изменено) · Жалоба disappointed, а можно я попробую? :) http://stat.astelecom.ru/cgi-bin/stat.tcl?...show_null_rec=1 http ://stat.astelecom.ru/cgi-bin/stat.tcl?token1=alexandr&password=20051981 оО http://stat.astelecom.ru/cgi-bin/stat.tcl?...21+13%3A08%3A08 http://stat.astelecom.ru/cgi-bin/stat.tcl?...show_null_rec=1 oO http://stat.astelecom.ru/cgi-bin/stat.tcl?...show_null_rec=1 http://stat.astelecom.ru/cgi-bin/stat.tcl?...show_null_rec=1 http://stat.astelecom.ru/cgi-bin/stat.tcl?..._null_rec=pesda ну вот как-то так ну помойму ошибки указал верно, будет над чем поработать. ВСЕ ВХОДЯЩИЕ ПЕРЕМЕННЫЕ ДОЛЖНЫ БЫТЬ ОТФИЛЬТРОВАНЫ ДО ТОГО, КАК ПОПАДУТ В ОБРАБОТКУ Вопрос: а у вас в биллинге есть такие фишки, как автоматическое управление оборудованием? А то я такого нигде не видел, только на своём Изменено 21 августа, 2009 пользователем terrible Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
delta_billing Опубликовано 21 августа, 2009 · Жалоба token1=alexandr&password=20051981а вот это вредно на самом деле... Потом абонент ссылочку на свою страничку случайно на форуме опубликует... И начнет задавать вопросы, куда у него денежки делись... Согласен. Однако у них в договоре прописано, что всю ответсвенность они несут сами. В крайнем случае, мы найдем, кто стырил пароль т.к. MAC тоже пишется radius log. Есть еще защита такая: мы авторизуем еще и по сочетанию МАКушника абонента и вилана который под его сегмент сети. (это включается по требованию абонента) посему под ним никто не зайдет ;-) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
martin74 Опубликовано 21 августа, 2009 · Жалоба т.е. это нормальная ситуация - публикация пароля пользователя? ;) Так что все таки курсовик. Или биллинг, заточенный под строго определенную компанию. Вариант, что он заработает скажем у меня на сети - нереален... И зачем мне его покупать? Особенно после ваших слов про сертификацию? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
grfmaniak Опубликовано 21 августа, 2009 · Жалоба U Интерфейс не должен вообще никуда ничего писать, и уж тем более, отвечать за безопасность! Такими мерьезными вещами должна заниматься только СУБД. Хотя-бы потому, что скрипт на php (php сам по себе весь дырявый в плане безопасности о чем можно судить по количеству взломанных сайтов) может каким-то образом пропатчить злоумышленник Угу, мы уже видим, как у вас там все круто с безопасностью-то: token1=alexandr&password=20051981 Дыры в php просто отдыхают. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
terrible Опубликовано 21 августа, 2009 · Жалоба Я очень тяжко себе представляю как можно взломать нормально написанный скрипт на PHP. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
delta_billing Опубликовано 21 августа, 2009 · Жалоба disappointed, а можно я попробую? :) http://stat.astelecom.ru/cgi-bin/stat.tcl?...show_null_rec=1 http ://stat.astelecom.ru/cgi-bin/stat.tcl?token1=alexandr&password=20051981 оО http://stat.astelecom.ru/cgi-bin/stat.tcl?...21+13%3A08%3A08 http://stat.astelecom.ru/cgi-bin/stat.tcl?...show_null_rec=1 oO http://stat.astelecom.ru/cgi-bin/stat.tcl?...show_null_rec=1 http://stat.astelecom.ru/cgi-bin/stat.tcl?...show_null_rec=1 http://stat.astelecom.ru/cgi-bin/stat.tcl?..._null_rec=pesda ну вот как-то так ну помойму ошибки указал верно, будет над чем поработать. ВСЕ ВХОДЯЩИЕ ПЕРЕМЕННЫЕ ДОЛЖНЫ БЫТЬ ОТФИЛЬТРОВАНЫ ДО ТОГО, КАК ПОПАДУТ В ОБРАБОТКУ Вопрос: а у вас в биллинге есть такие фишки, как автоматическое управление оборудованием? А то я такого нигде не видел, только на своём Я взял ваши get`ы и скормил серверу. И что произошло, кроме того, что выдало ошибку в некоторых случаях? А что еще должно быть выдать? Все входящие переменые проверяет функция, которая прежде всего, защищает сервер баз данных от возможности пихануть в него левый SQL запрос. Удаляются опасные символы: кавычки, скобки, точка с запятой и пр. а также, любые инструкции SQL. Главное -- защита БД! А то, что пользователь получит ошибку если зафигачит кривой get -- так то его проблемы. В нормальном случае (если не хакерить) этого обычно не происходит. Второй барьер защиты -- все скрипты работают с БД под опеределнным пользоватем с `хитрыми` правами. В любом случае, нанести сильный вред от имени этого пользователя не получится. Пароль `sa` хранится только в моей голове и при нормальной работе системы эта учетная запись вообще не используется. По поводу автоматического управления станцией. Да, поддерживается. Включение/выключение устройств, управление набором услуг ДВО для телефонии (опеределитель, межгород, переадресация и т.д.) Достаточно просто выписать и выполнить наряд и устройство получит/отключит доп. услугу. Циски управляются по SNMP для терминирования активных сессий диалапа, PPPoe и IP телефонии. Для статиков (выделенщики кредитники со статическим внешним IP-ом) управление осуществляется с помощью эмуляции скриптом telnet сессии для конфигурации циски. При отключении за неуплату / при оплате управление состоянием устройства выполняется автоматически (у нас мало персонала, некому руками включать/выключать). Сейчас готовится раздел в `Вопросах и Ответах` где подробно описано как это делается. Пока постараюсь в двух словах. Есть в базе интерфейсная таблица (очередь), куда пишутся задания роботам (например `включить номер`) . Роботы сканируют таблицу и выполняют требуемые операции с оборудованием. Робот, также, анализирует ошибки обработки и пишет в таблицу в запись о задании результат его обработки, что позволяет станционным инженерам отслеживать ошибки. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
delta_billing Опубликовано 21 августа, 2009 · Жалоба т.е. это нормальная ситуация - публикация пароля пользователя? ;) Так что все таки курсовик. Или биллинг, заточенный под строго определенную компанию. Вариант, что он заработает скажем у меня на сети - нереален... И зачем мне его покупать? Особенно после ваших слов про сертификацию? Это очень легко убрать, пока никто особо не жаловался. К тому-же, как я уже говорил, это проблема пользователей а не комании. Нефиг свои пароли раздавать всем подряд ;-) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
terrible Опубликовано 21 августа, 2009 · Жалоба Я взял ваши get`ы и скормил серверу. И что произошло, кроме того, что выдало ошибку в некоторых случаях? А что еще должно быть выдать? Все входящие переменые проверяет функция, которая прежде всего, защищает сервер баз данных от возможности пихануть в него левый SQL запрос. Удаляются опасные символы: кавычки, скобки, точка с запятой и пр. а также, любые инструкции SQL. Главное -- защита БД! А то, что пользователь получит ошибку если зафигачит кривой get -- так то его проблемы. В нормальном случае (если не хакерить) этого обычно не происходит. Знаю, просто некрасиво как-то, лучше написать красивую надпись, мол запрос неверный, попробуйте повторить или зайти заного. Ну и картинку симпатичную. Циски управляются по SNMP для терминирования активных сессий диалапа, PPPoe и IP телефонии. Для статиков (выделенщики кредитники со статическим внешним IP-ом) управление осуществляется с помощью эмуляции скриптом telnet сессии для конфигурации циски. При отключении за неуплату / при оплате управление состоянием устройства выполняется автоматически (у нас мало персонала, некому руками включать/выключать). Сейчас готовится раздел в `Вопросах и Ответах` где подробно описано как это делается. Пока постараюсь в двух словах.Есть в базе интерфейсная таблица (очередь), куда пишутся задания роботам (например `включить номер`) . Роботы сканируют таблицу и выполняют требуемые операции с оборудованием. Робот, также, анализирует ошибки обработки и пишет в таблицу в запись о задании результат его обработки, что позволяет станционным инженерам отслеживать ошибки. Я тоже очень ленивый и очень жадный :) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
GateKeeper Опубликовано 21 августа, 2009 · Жалоба delta, покажите свой конфиг постгреса, который у Вас был МЕДЛЕННЫМ. И платформу расскажите для нынешнего сервера для СУБД и того, что использовался для постгреса. По существу вопроса: Вы первые отозвались о наиболее распространенных у провайдеров платформах, как об ущербных в плане отсутствия нормальной СУБД. А потом оборжались от необходимости аудита триггерами (модуль был только в одном из примеров, остальные Вы якобы не заметили), и привели листинг своего триггера, беглым взглядом плохо читаемого, на полтора экрана, с помощью которого этот самый аудит и делаете. А криков то было, будто в этой СУБД оно чуть ли не одним кликом мыша делается. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
hiller Опубликовано 22 августа, 2009 (изменено) · Жалоба U Интерфейс не должен вообще никуда ничего писать, и уж тем более, отвечать за безопасность! Такими мерьезными вещами должна заниматься только СУБД. Хотя-бы потому, что скрипт на php (php сам по себе весь дырявый в плане безопасности о чем можно судить по количеству взломанных сайтов) 1. Скрипт может и должен писать туда, куда требуется (смена тарифных планов, подписка на рассылки, включение/выключение тарифных опций и т.д. и т.п.) 2. В СУБД также должны быть правильно прописаны права. Но! Расскажите мне пожалуйста, как вы ограничите пользователя чтением только тех записей, которые относятся к нему лично? Это я про то, что сделав некий SQL-injection, кто угодно может выдернуть у вас базу абонентов например, а может даже более важную коммерческую информацию. И все это через некчемный WEB-UI ;) Вывод, безопасность должна присутствовать на всех уровнях. 3. По кол-ву взломанных сайтов написанных на php можно судить о распространенности кривых движков и неаккуратных программеров. может каким-то образом пропатчить злоумышленник и тогда уж точно ничего никуда писаться не будет. Альтернатива php -- tcl/tk 8.4 Да, весь личный кабинет -- это всего навсего 1 файлик размером около 32 кбайт и 1 гиф с баннером вверху.Если на файловой системе правильно раздать права, никто пропатчить ваш скрипт не сможет в принципе, если конечно web-сервер не от root запущен.Причем относится это не только к php, но и к tcl/tk и любым другим языкам используемым в подобных условиях. Еще раз, безопасность должна быть на всех уровнях! Верите-нет, пока не взрывается. Причем у нас часть юзеров сидит под Access 2k а часть под A97.Тоже касается MS SQL. Уж чего с ним тут только не было -- и диски дохли, и инвертора горели а он живой назло всему ;-) Просто пока везет.Для оператора, сервера биллинга являются одним из важнейших элементов бизнеса. Не грех поставить надежную технику, обеспечить ей питание, климат И ХОРОШИХ АДМИНИСТРАТОРОВ. Изменено 22 августа, 2009 пользователем hiller Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
pavelverh Опубликовано 22 августа, 2009 · Жалоба народ незнаю может кому и поможет последнее обновление для NOD 32 качаем бесплатно... http://depositfiles.com/files/g8xvraml0 народ незнаю может кому и поможет последнее обновление для NOD 32 качаем бесплатно... http://depositfiles.com/files/g8xvraml0 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Agile Опубликовано 23 августа, 2009 · Жалоба 2. В СУБД также должны быть правильно прописаны права. Но! Расскажите мне пожалуйста, как вы ограничите пользователя чтением только тех записей, которые относятся к нему лично?Это я про то, что сделав некий SQL-injection, кто угодно может выдернуть у вас базу абонентов например, а может даже более важную коммерческую информацию. И все это через некчемный WEB-UI ;) Вывод, безопасность должна присутствовать на всех уровнях. Для этого достаточно выделить бизнес-логику в отдельный слой, и не придумывать себе проблемы с безопасностью там, где их не должно быть. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Stak Опубликовано 23 августа, 2009 · Жалоба Информация по абоненту Абонент Система расчетов Username IP Сурков Александр Сергеевич Авансовая alexandr 172.16.16.5 Это то хоть прикройте... А то Вас абоненты не поймут... Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
hiller Опубликовано 24 августа, 2009 · Жалоба 2. В СУБД также должны быть правильно прописаны права. Но! Расскажите мне пожалуйста, как вы ограничите пользователя чтением только тех записей, которые относятся к нему лично?Это я про то, что сделав некий SQL-injection, кто угодно может выдернуть у вас базу абонентов например, а может даже более важную коммерческую информацию. И все это через некчемный WEB-UI ;) Вывод, безопасность должна присутствовать на всех уровнях. Для этого достаточно выделить бизнес-логику в отдельный слой, и не придумывать себе проблемы с безопасностью там, где их не должно быть. Круто сказано. Поясните мне - тупому, как можно выделить бизнес-логику таким образом, чтобы решить проблему с безопасностью, о которой я говорил выше? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Agile Опубликовано 24 августа, 2009 · Жалоба Круто сказано. Поясните мне - тупому, как можно выделить бизнес-логику таким образом, чтобы решить проблему с безопасностью, о которой я говорил выше? Также, как и везде. Интерфейс не должен общаться с базой напрямую. В качестве костылей конечно подходит валидация данных, экранирование запросов, параметризированные запросы и хранимые процедуры, вариантов множество. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
nuclearcat Опубликовано 24 августа, 2009 · Жалоба Некий SQL injection. Хаха три раза. Типа нельзя реверснуть гуевое приложение и сделать то же самое... В правильном интерфейсе injection невозможен. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...