Биллинговая система Nodeny

Главная категория => Nodeny 50 => Тема начата: dimia от 19 Апреля 2012, 10:44:09



Название: второй сателлит
Отправлено: dimia от 19 Апреля 2012, 10:44:09
версия 50.33, добавляю второй сателлит строго по документации. nocheck.pl отработал без ошибок. запускаю noserver, и вот, что в логе:
Код:
DBD::mysql::st execute failed: SELECT command denied to user 'bill_academ'@'172.17.0.20' for table 'x2012x4x19' at nosat.pm line 245.
19.04.2012 12:14:21 Error: SELECT SQL_BUFFER_RESULT uid,uip,now_on,in1,out1 FROM users_trf
да, на эту таблицу у него прав нет (в документации про это тоже ничего не сказано). но и дать права тоже не получается, поскольку названия таблиц динамические. grant для динамических (типа bill.x*) таблиц невозможен. что делать?
запрос из второй строки вручную выполняется без ошибок. в программировании на перле, простите, не силен. поэтому и прошу совета специалистов.



Название: Re: второй сателлит
Отправлено: 0xbad0c0d3 от 19 Апреля 2012, 10:53:58
Например:
Код:
GRANT SELECT,EXECUTE,UPDATE,INSERT,DELETE ON bill.* TO 'bill_academ'@'172.17.0.20'


Название: Re: второй сателлит
Отправлено: dimia от 19 Апреля 2012, 11:10:33
а секурити? сателлит будет находится в сторонней организации, и очень не хотелось бы давать местным админам возможность доступа ко всем пользователям. для этого сателлита создана отдельная вьюха и установлены ограничения:
Код:
CREATE ALGORITHM = UNDEFINED VIEW users_academ AS SELECT * FROM users WHERE grp IN (12);
GRANT INSERT ON `bill`.`dblogin` TO 'bill_academ'@'172.17.0.20';
GRANT INSERT ON `bill`.`sat_log` TO 'bill_academ'@'172.17.0.20';
GRANT SELECT ON `bill`.`dopdata` TO 'bill_academ'@'172.17.0.20';
GRANT SELECT ON `bill`.`dop_oldvalues` TO 'bill_academ'@'172.17.0.20';
GRANT SELECT ON `bill`.`conf_sat` TO 'bill_academ'@'172.17.0.20';
GRANT SELECT ON `bill`.`nets` TO 'bill_academ'@'172.17.0.20';
GRANT SELECT ON `bill`.`files` TO 'bill_academ'@'172.17.0.20';
GRANT SELECT ON `bill`.`users_trf` TO 'bill_academ'@'172.17.0.20';
GRANT SELECT ON `bill`.`plans2` TO 'bill_academ'@'172.17.0.20';
GRANT SELECT ON `bill`.`users_academ` TO 'bill_academ'@'172.17.0.20';


Название: Re: второй сателлит
Отправлено: dimia от 19 Апреля 2012, 11:25:12
Для других: в новых версиях noserver обращается к таблицам детализации трафика, поэтому ему нужно права на чтения этих таблиц, а по умолчанию для удаленных логинов они не выдаются, поэтому в mysql соответствующему логину дать права на  select всех таблиц

это было больше двух лет назад. как сейчас решается эта проблема с дырой в безопасности?


Название: Re: второй сателлит
Отправлено: 0xbad0c0d3 от 19 Апреля 2012, 12:30:57
Ипать.. А дыра где? ))) Ну сделайте такие запросы каждые сутки:
Код:
INSERT INTO mysql.tables_priv
SELECT 'host','db_name','user_name',table_name,'grantor',CURRENT_TIMESTAMP,'select,insert,update','' FROM information_schema.tables
WHERE table_schema='db_name' AND table_name LIKE 'x%'
ON DUPLICATE KEY UPDATE table_priv='select,insert,update',timestamp=CURRENT_TIMESTAMP;
FLUSH PRIVILEGES;
и будет доступ на все таблицы, что начинаются с 'x', можно пойти дальше и сделать REGEXP вместо LIKE


Название: Re: второй сателлит
Отправлено: dimia от 19 Апреля 2012, 13:38:31
дыра вот здесь:
"... поэтому в mysql соответствующему логину дать права на  select всех таблиц"

т.е. просто при наличии доступа (взлом или физический доступ) к удаленному сателлиту можно получить доступ ко всем таблицам в базе биллинга. может это и надуманная проблема, но уважаемый Efendy специально уделил этому внимание в документации.

з.ы. забить  ???


Название: Re: второй сателлит
Отправлено: 0xbad0c0d3 от 19 Апреля 2012, 14:18:18
Простите, а причем тут Efendy к документации MySQL?
В дукументации описан классический вариант, если у Вас другие потребности, то вы должны сами искать пути их решения. Я вам предложил свой вариант, прочитав документацию по MySQL пришел к выводу, что там нельзя давать привилегии по маске, но выход есть, хоть и слегка костыльный.

P.S. Возможно я не понимаю Вашего изложения проблемы. В общем-то Вам решать, подходит ли такой вариант или нет.

P.S.S.
Цитата: dimia
т.е. просто при наличии доступа (взлом или физический доступ) к удаленному сателлиту можно получить доступ ко всем таблицам в базе биллинга.
Тогда поставте сервер в сейф и выдерните из него сетевуху, а запросы делайте доверенным лицом, под конвоем через флешки. И то конвой можно подкупить. Безопасность - иллюзия!


Название: Re: второй сателлит
Отправлено: Efendy от 19 Апреля 2012, 15:48:27
Если бы мускул мог давать права по шаблону..., поэтому 0xbad0c0d3  прав. Лично пока мне в голову не приходит другая идея


Название: Re: второй сателлит
Отправлено: dimia от 19 Апреля 2012, 15:54:18
Простите, а причем тут Efendy к документации MySQL?
В дукументации описан классический вариант, если у Вас другие потребности, то вы должны сами искать пути их решения. Я вам предложил свой вариант, прочитав документацию по MySQL пришел к выводу, что там нельзя давать привилегии по маске, но выход есть, хоть и слегка костыльный.

P.S. Возможно я не понимаю Вашего изложения проблемы. В общем-то Вам решать, подходит ли такой вариант или нет.

P.S.S.
Цитата: dimia
т.е. просто при наличии доступа (взлом или физический доступ) к удаленному сателлиту можно получить доступ ко всем таблицам в базе биллинга.
Тогда поставте сервер в сейф и выдерните из него сетевуху, а запросы делайте доверенным лицом, под конвоем через флешки. И то конвой можно подкупить. Безопасность - иллюзия!

вероятно Вы не понимаете, а может и я был недостаточно точен. проблема остается открытой. Ваш рекомендация с сейфом - это детский сад. цитата из документации на биллинговую систему NoDeny:
Цитировать
В распределенной системе, состоящей из нескольких разбросанных серверов авторизации и управления, в каждой точке запускается своя копия скрипта(ов). Каждый сателлит соединяется с БД по уникальному логину со своими правами. Уникальность логина рекомендуется автором. Например, автор для своих серверов назначает логины для коннекта к БД в виде bill_название_сервера, например bill_stone либо bill_linkom_gate1 (логин для сервера gate1 сети linkom).

Создав в основной базе данных и базе авторизаций логин для нужного сервера, необходимо дать права на доступ только к необходимым таблицам, не больше, не меньше. Это требование очень важно т.к. базируется на давно известном факте, что любая система может быть взломана. Особенно это актуально в разбросанных по масштабной сети серверах, которыми управляют разные администраторы с разными способностями и лояльностью. Таким образом, потеря контроля над одним сервером не должна быть причиной утечки ВСЕЙ информации, в худшем случае только ее части, которую обслуживает данный сервер.

Последнее требование может быть выполнено только при условии ограниченного доступа логина к таблицам БД. У логина определенного сателлита должны быть следующие привилегии в БД bill:

INSERT в таблицу dblogin
INSERT в таблицу sat_log
SELECT таблицы conf_sat
SELECT таблицы dopdata
SELECT таблицы nets
SELECT таблицы files
SELECT таблицы plans2
SELECT таблицы users_trf
SELECT таблицы со списком абонентов


Название: Re: второй сателлит
Отправлено: dimia от 19 Апреля 2012, 16:00:45
Если бы мускул мог давать права по шаблону..., поэтому 0xbad0c0d3  прав. Лично пока мне в голову не приходит другая идея
ну если уж Автор так считает, то будем ставить костыли ... и на этом спасибо!    :)




Название: Re: второй сателлит
Отправлено: Andrey Zentavr от 19 Апреля 2012, 17:45:07
Как вариант можно было бы данные о трафике писать в другую базу данных и уже делать GRANT на бд.*


Название: Re: второй сателлит
Отправлено: dimia от 25 Апреля 2012, 15:33:15
Всем спасибо за ответы. А к разработчику просьба - исправить документацию биллинга по этой теме.