Программирование >>  Программный интерфейс приложений 

1 ... 168 169 170 [ 171 ] 172 173 174 ... 264


Как минимизировать риск при работе с таблицами разрешений

в этом разделе приведены некоторые рекомендации, которые следует учитывать при присвоении привилегий, а также описываются проблемы, связанные с неправильным выбором администратора. Во-первых, необходимо весьма аккуратно присваивать глобальные привилегии суперпользователей. Другими словами, не следует активизировать привилегии в записях таблицы user. Используйте с этой целью другие таблицы, чтобы ограничить область применения привилегий отдельными базами данных, таблицами и столбцами. Привилегии таблицы user позволяют воздействовать на функционирование всего сервера и получать доступ ко всем таблицам любой базы данных

Не предоставляйте никаких привилегий для доступа к базе данных mysql. Ведь пользователь, обладающий привилегиями доступа к базе данных с таблицами разрещений, может легко изменить свои привилегии и получить таким образом доступ и к другим базам данных. Присвоение пользователю достаточных привилегий для изменения таблиц базы данных mysql дает такому пользователю и привилегию grant. Возможность непосредственного изменения таблицы практически равноценна возможности запуска оператора grant.

Привилегию file также рекомендуется присваивать с больщой осторожностью. Так, обладающий этой привилегией пользователь может запросто выполнить следующие операторы:

CREATE TABLE etc passwd {pwd entry TEXT);

LOAD DATA INFILE /etc/passwd INTO TABLE etc passWd;

SELECT * FROM etc passwd;

Выполнив эти операторы, пользователь получит содержимое файла паролей. Фактически, наличие привилегии file дает возможность пользователю раскрыть содержимое любого читаемого файла сервера, даже работая через сеть.

Кроме того, привилегия file может использоваться для повреждения баз данных в системах, работающих с недостаточными файловыми правами. Именно поэтому администратор должен сделать содержимое каталога данных читаемым только для сервера. Если файлы таблиц баз данных открыты для всеобщего обзора, прочитать их сможет не только пользователь учетной записи сервера, но и любой другой пользователь, обладающий привилегией file и подключающийся к серверу через сеть. Как это реализуется, показано на следующем примере.

Создайте таблицу со столбцом longblob. USE test

CREATE TABLE tmp (b LONGBLOB)



Используйте таблицу для записи содержимого файла всех нужных таблиц, а затем запишите это содержимое в файл своей базы данных.

LOAD DATA INFILE ./other db/x.frm INTO TABLE tmp

FIELDS ESCAPED BY LINES TEIINATED BY SELECT * FROM tmp INTO OUTFILE y.frm

FIELDS ESCAPED BY LINES TEIINATED BY DELETE FROM tmp

LOAD DATA INFILE ./other db/x.ISD INTO TABLE tmp

FIELDS ESCAPED BY LINES TEIINATED BY SELECT * FROM tmp INTO OUTFILE y.ISD

FIELDS ESCAPED BY LINES TEIINATED BY DELETE FROM tmp

LOAD DATA INFILE ./other db/x.ISM INTO TABLE tmp

FIELDS ESCAPED BY LINES TEIINATED BY SELECT * FROM tmp INTO OUTFILE y.ISM

FIELDS ESCAPED BY LINES TEIINATED BY

В результате создана новая таблица, содержащая информацию таблицы other db.x, к которой имеется полный доступ.

Чтобы избежать подобных атак, установите права доступа к содержимому каталога данных в соответствии с инструкциями, представленными в разделе Внутренняя безопасность: защита доступа к каталогу данных . Можно также при запуске сервера использовать опцию --skip-show-database. Это запретит пользователям запускать операторы show database и show tables ДЛЯ баз данных, К которым ИМ запрещен доступ, и не позволит пользователям случайно найти базу данных или таблицу, доступ к которым им не должен предоставляться.

Иногда и привилегия alter используется таким образом, о котором даже и не подозревают администраторы. Предположим, например, что администратор желает предоставить пользователю userl доступ к таблице tablel, но не к таблице table2. Обладающий привилегией alter пользователь может легко обойти это ограничение, переименовав с помощью оператора alter table таблицу table2 в tablel.

Проявляйте осторожность и с привилегией grant. Два пользователя, обладающие разными привилегиями, могут легко расширить круг возможностей друг друга.

Установка пользователей без помощи оператора grant

Администраторы MySQL, работающие с версиями до 3.22.И, не могут использовать операторы grant (или revoke) для создания пользователей и настройки привилегий доступа. Для достижения тех же целей они могут непосредственно изменять содержимое таблиц разрешений. Гораздо проще это сделать тем администраторам, которые знают, каким образом оператор grant изменяет таблицы разрешений. По сути, те же операции можно выполнять и самостоятельно, используя операторы insert.



(Другое дело, что оператор insert может быть достаточно неудобным и трудно используемым. Именно этим и объясняется зачастую упрощенное использование grant.)

В строке оператора grant определяется имя пользователя, имя компьютера и иногда пароль. В таблице user для пользователя создается запись и соответствующие значения записываются в столбцы User. Host и Password. Если администратор определяет какие-либо глобальные привилегии в операторе grant, они записываются в столбец привилегий записи. Однако следует помнить, что оператор grant щифрует записываемый пароль, а оператор insert - нет. Поэтому при настройке пользователей с помощью операторов insert необходимо применять функцию password ().

При определении привилегий уровня базы данных имя пользователя и компьютера заносятся соответственно в столбцы User и Host таблицы db. Имя таблицы, к которой предоставляются привилегии, записывается в столбец Db, а сами привилегии - в столбец привилегий.

Подобные операции выполняются и при определении полномочий уровня таблиц и столбцов. Для записи имени пользователя, компьютера, названия базы данных и, если необходимо, имени таблицы или столбца, заносятся соответствующие значения в поля таблиц tables priv и columns priv. Присваиваемые привилегии записываются в столбцы привилегий.

Все описанные выше операции можно выполнить и не прибегая к помощи оператора grant. Не забывайте также, что после непосредственного изменения таблиц разрешений необходимо указать серверу перезагрузить их. Иначе изменения окажутся незамеченными. Для повторной загрузки можно запустить команду mysqladmin flush-privileges или mysqladmin reload.

ПредставлоНный ниже оператор grant создает суперпользователя со всеми привилегиями, включая возможность наделения привилегиями других пользователей:

GRANT ALL ON *.* TO ethelglocalhost IDENTIFIED BY coffee WITH GRANT OPTION

Этот оператор создает запись для компьютера ethel@localhost в таблице user и активизирует для нее все привилегии. Те же привилегии можно присвоить и с помощью оператора insert:

INSERT INTO user VALUES( localhost , ethel ,PASSWORD( coffee ) , Y , Y , Y , Y , Y , Y , Y , Y , Y , Y , Y , Y , Y , Y )

И ЭТО ТОЛЬКО один оператор insert! Более того, в зависимости от используемой версии MySQL, он может еще и не работать. Если структура таблиц разрешений была случайно изменена, число столбцов привилегий может не равняться четырнадцати. Чтобы проверить количество столбцов в каждой таблице разрешений, воспользуйтесь оператором SHOW columns, а затем соответствующим образом измените операторы insert.



1 ... 168 169 170 [ 171 ] 172 173 174 ... 264

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.004
При копировании материалов приветствуются ссылки.
Яндекс.Метрика