dimia
NoDeny
Пользователь
Карма: 1
Offline
Сообщений: 45
|
|
« : 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*) таблиц невозможен. что делать? запрос из второй строки вручную выполняется без ошибок. в программировании на перле, простите, не силен. поэтому и прошу совета специалистов.
|
|
« Последнее редактирование: 19 Апреля 2012, 10:46:04 от dimia »
|
Записан
|
|
|
|
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
Карма: 116
Offline
Сообщений: 1059
|
|
« Ответ #1 : 19 Апреля 2012, 10:53:58 » |
|
Например: GRANT SELECT,EXECUTE,UPDATE,INSERT,DELETE ON bill.* TO 'bill_academ'@'172.17.0.20'
|
|
|
Записан
|
|
|
|
dimia
NoDeny
Пользователь
Карма: 1
Offline
Сообщений: 45
|
|
« Ответ #2 : 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';
|
|
|
Записан
|
|
|
|
dimia
NoDeny
Пользователь
Карма: 1
Offline
Сообщений: 45
|
|
« Ответ #3 : 19 Апреля 2012, 11:25:12 » |
|
Для других: в новых версиях noserver обращается к таблицам детализации трафика, поэтому ему нужно права на чтения этих таблиц, а по умолчанию для удаленных логинов они не выдаются, поэтому в mysql соответствующему логину дать права на select всех таблиц
это было больше двух лет назад. как сейчас решается эта проблема с дырой в безопасности?
|
|
|
Записан
|
|
|
|
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
Карма: 116
Offline
Сообщений: 1059
|
|
« Ответ #4 : 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
|
|
|
Записан
|
|
|
|
dimia
NoDeny
Пользователь
Карма: 1
Offline
Сообщений: 45
|
|
« Ответ #5 : 19 Апреля 2012, 13:38:31 » |
|
дыра вот здесь: "... поэтому в mysql соответствующему логину дать права на select всех таблиц" т.е. просто при наличии доступа (взлом или физический доступ) к удаленному сателлиту можно получить доступ ко всем таблицам в базе биллинга. может это и надуманная проблема, но уважаемый Efendy специально уделил этому внимание в документации. з.ы. забить
|
|
|
Записан
|
|
|
|
0xbad0c0d3
гуру nodeny )
NoDeny
Спец
Карма: 116
Offline
Сообщений: 1059
|
|
« Ответ #6 : 19 Апреля 2012, 14:18:18 » |
|
Простите, а причем тут Efendy к документации MySQL? В дукументации описан классический вариант, если у Вас другие потребности, то вы должны сами искать пути их решения. Я вам предложил свой вариант, прочитав документацию по MySQL пришел к выводу, что там нельзя давать привилегии по маске, но выход есть, хоть и слегка костыльный. P.S. Возможно я не понимаю Вашего изложения проблемы. В общем-то Вам решать, подходит ли такой вариант или нет. P.S.S. т.е. просто при наличии доступа (взлом или физический доступ) к удаленному сателлиту можно получить доступ ко всем таблицам в базе биллинга. Тогда поставте сервер в сейф и выдерните из него сетевуху, а запросы делайте доверенным лицом, под конвоем через флешки. И то конвой можно подкупить. Безопасность - иллюзия!
|
|
« Последнее редактирование: 19 Апреля 2012, 14:22:48 от 0xbad0c0d3 »
|
Записан
|
|
|
|
Efendy
|
|
« Ответ #7 : 19 Апреля 2012, 15:48:27 » |
|
Если бы мускул мог давать права по шаблону..., поэтому 0xbad0c0d3 прав. Лично пока мне в голову не приходит другая идея
|
|
|
Записан
|
|
|
|
dimia
NoDeny
Пользователь
Карма: 1
Offline
Сообщений: 45
|
|
« Ответ #8 : 19 Апреля 2012, 15:54:18 » |
|
Простите, а причем тут Efendy к документации MySQL? В дукументации описан классический вариант, если у Вас другие потребности, то вы должны сами искать пути их решения. Я вам предложил свой вариант, прочитав документацию по MySQL пришел к выводу, что там нельзя давать привилегии по маске, но выход есть, хоть и слегка костыльный. P.S. Возможно я не понимаю Вашего изложения проблемы. В общем-то Вам решать, подходит ли такой вариант или нет. P.S.S. т.е. просто при наличии доступа (взлом или физический доступ) к удаленному сателлиту можно получить доступ ко всем таблицам в базе биллинга. Тогда поставте сервер в сейф и выдерните из него сетевуху, а запросы делайте доверенным лицом, под конвоем через флешки. И то конвой можно подкупить. Безопасность - иллюзия! вероятно Вы не понимаете, а может и я был недостаточно точен. проблема остается открытой. Ваш рекомендация с сейфом - это детский сад. цитата из документации на биллинговую систему 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 таблицы со списком абонентов
|
|
|
Записан
|
|
|
|
dimia
NoDeny
Пользователь
Карма: 1
Offline
Сообщений: 45
|
|
« Ответ #9 : 19 Апреля 2012, 16:00:45 » |
|
Если бы мускул мог давать права по шаблону..., поэтому 0xbad0c0d3 прав. Лично пока мне в голову не приходит другая идея
ну если уж Автор так считает, то будем ставить костыли ... и на этом спасибо!
|
|
|
Записан
|
|
|
|
Andrey Zentavr
NoDeny
Старожил
Карма: 29
Offline
Сообщений: 301
|
|
« Ответ #10 : 19 Апреля 2012, 17:45:07 » |
|
Как вариант можно было бы данные о трафике писать в другую базу данных и уже делать GRANT на бд.*
|
|
|
Записан
|
|
|
|
dimia
NoDeny
Пользователь
Карма: 1
Offline
Сообщений: 45
|
|
« Ответ #11 : 25 Апреля 2012, 15:33:15 » |
|
Всем спасибо за ответы. А к разработчику просьба - исправить документацию биллинга по этой теме.
|
|
|
Записан
|
|
|
|
|