1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/blackeybaord-kingshard

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
sql_blacklist_introduce.md 5.7 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 29.11.2024 18:42 b4fbb46

Введение в функцию чёрного списка SQL в Kingshard

1. Сценарии применения

После того как Kingshard стал открытым исходным кодом, пользователи неоднократно поднимали вопрос о возможности добавления в Kingshard функции чёрного списка SQL. Есть несколько типичных сценариев использования:

  1. Администратор базы данных (DBA) может определить некоторые потенциально опасные SQL-запросы и поместить их в файл чёрного списка SQL. Это позволяет предотвратить нанесение вреда базе данных запросами, поступающими от клиентских приложений. Такие запросы могут быть результатом небрежного кодирования со стороны разработчиков или следствием атак с использованием SQL-инъекций. Например, запрос delete from mytable без условия where приведёт к удалению всей таблицы.

  2. После запуска проекта на основе Kingshard можно обнаружить большое количество запросов, создающих значительную нагрузку на базу данных. В этом случае можно динамически добавить эти запросы в чёрный список, чтобы предотвратить их выполнение и снизить нагрузку на базу данных. Например, если запрос select count(*) from mytable where xxxx не оптимизирован должным образом, он может привести к чрезмерному использованию ресурсов системы.

2. Описание функции

Чтобы использовать функцию чёрного списка SQL в Kingshard, необходимо добавить следующую конфигурацию:

blacklist_sql_file: /Users/flike/blacklist

Затем мы определяем чёрный список SQL, и Kingshard будет блокировать передачу SQL-запросов из чёрного списка.

Чёрный список SQL определяется в виде регулярных выражений. Значения в SQL заменяются символами ? или ?+. Чтобы обеспечить эффективность чёрного списка, рекомендуется вручную проверить, правильно ли Kingshard блокирует запросы из чёрного списка. Примеры правил (первая строка — исходный SQL, вторая строка — форма чёрного списка):

SELECT c FROM t WHERE id=1
select c from t where id=?

SELECT * FROM prices.rt_5min where id=1
select * from prices.rt_5min where id=?

select null, 5.001, 5001. from foo
select ?, ?, ? from foo

select 'hello', '\nhello\n', \"hello\", '\\'' from foo
select ?, ?, ?, ? from foo

select 'hello'\n
select ?

select * from t where (base.nid IN  ('1412', '1410', '1411'))
select * from t where (base.nid in(?+))

select * from foo where a in (5) and b in (5, 8,9 ,9 , 10)
select * from foo where a in(?+) and b in(?+)

select * from foo limit 5
select * from foo limit ?

select * from foo limit 5, 10
select * from foo limit ?, ?

select * from foo limit 5 offset 10
select * from foo limit ? offset ?

INSERT INTO t (ts) VALUES (NOW())
insert into t (ts) values(?+)

insert into foo(a, b, c) values(2, 4, 5)
insert into foo(a, b, c) values(?+)

CALL foo(1, 2, 3)
call foo

LOAD DATA INFILE '/tmp/foo.txt' INTO db.tbl
load data infile ? into db.tbl

administrator command: Init DB
administrator command: Init DB

use `foo`
use ?

3. Демонстрация функции

Добавим следующие запросы в чёрный список:

select count(*) from test_shard_hash where id > ?
select count(*) from test_shard_range
SELECT * FROM WORLD
DELETE FROM WORLD

Подключившись к Kingshard и выполнив SQL-запрос, получим следующее:

mysql> select * from world;
ERROR 1105 (HY000): sql in blacklist.
mysql> select * from world where a > 0;
+------+------+
| a    | b    |
+------+------+
|   10 |   23 |
|   45 |  565 |
+------+------+
2 rows in set (0.00 sec)

mysql> delete from world;
ERROR 1105 (HY000): sql in blacklist.
mysql> delete from world where a =10;
Query OK, 1 row affected (0.00 sec)
# Обратите внимание, что в чёрном списке SQL после «id >» есть пробел, который должен точно совпадать, иначе Kingshard не распознает его как запрос из чёрного списка
mysql> select count(*) from test_shard_hash where id >1;
+----------+
| count(*) |
+----------+
|       24 |
+----------+
1 row in set (0.02 sec)

mysql> select count(*) from test_shard_hash where id > 1;
ERROR 1105 (HY000): sql in blacklist.

Мы также протестировали производительность Kingshard с включённым чёрным списком SQL с помощью sysbench и обнаружили, что производительность не снизилась значительно, поэтому можно безопасно использовать эту функцию.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/blackeybaord-kingshard.git
git@api.gitlife.ru:oschina-mirror/blackeybaord-kingshard.git
oschina-mirror
blackeybaord-kingshard
blackeybaord-kingshard
master