<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.0.3" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>SEO, Раскрутка, продвижение сайта в поисковых системах</title>
	<link>http://rozkrutka.org.ua</link>
	<description>Продвижение сайта SEO  методы поисковой оптимизации сайта</description>
	<pubDate>Sun, 25 Jan 2009 15:43:03 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.3</generator>
	<language>en</language>
			<item>
		<title>Получение дополнительной информации о базах данных</title>
		<link>http://rozkrutka.org.ua/72</link>
		<comments>http://rozkrutka.org.ua/72#comments</comments>
		<pubDate>Sun, 25 Jan 2009 15:43:03 +0000</pubDate>
		<dc:creator>business-net</dc:creator>
		
	<category>Общее о веб-сайтах</category>
		<guid isPermaLink="false">http://rozkrutka.org.ua/72</guid>
		<description><![CDATA[


 До сих пор мы использовали операторы SHOW и DESCRIBE для получения списков таблиц в базе данных и столбцов в этих таблицах. В последующих разделах мы кратко рассмотрим другие способы применения этих операторов, а также оператора EXPLAIN для получения дополнительной информации о способе выполнения SELECT.
Получение информации с помощью оператора SHOW
Ранее мы использовали следующую конструкцию: show [...]]]></description>
			<content:encoded><![CDATA[<table cellpadding=0 cellspacing=0><tr><td><script type="text/javascript"><!--
google_ad_client = "pub-9704550249047583";
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as";
google_ad_type = "text";
//2007-09-12: web
google_ad_channel = "2547596397";
google_color_border = "FFFFFF";
google_color_bg = "FFFFFF";
google_color_link = "0066CC";
google_color_text = "000000";
google_color_url = "CC0000";
google_ui_features = "rc:6";
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></td></tr></table> <p>До сих пор мы использовали операторы SHOW и DESCRIBE для получения списков таблиц в базе данных и столбцов в этих таблицах. В последующих разделах мы кратко рассмотрим другие способы применения этих операторов, а также оператора EXPLAIN для получения дополнительной информации о способе выполнения SELECT.<br />
Получение информации с помощью оператора SHOW<br />
Ранее мы использовали следующую конструкцию: show tables; для получения списка таблиц базы данных.<br />
OPTIMIZE TABLE имя_таблицы; или команды, которая должна вводиться в командной строке:<br />
myisamchk -г имя_таблицы<br />
Можно также с помощью утилиты myisamchk отсортировать индекс таблицы и данные в соответствии с этим индексом:<br />
myisamchk &#8211;sort-index &#8211;sort-records=l путь_к_каталогу_данных_Му50Ы*I&#8217;* .MYI І<br />
Использование индексов<br />
<a id="more-72"></a>Когда это требуется, для ускорения выполнения запросов следует пользоваться индексами. Индексы должны быть максимально простыми. Не создавайте индексы, которые не будут задействованы в запросах. Для проверки того, какие индексы используются в запросе, служит оператор EXPLAIN, как описано в предыдущих разделах.<br />
Использование значений, заданных по умолчанию<br />
Всегда, когда это возможно, для столбцов необходимо использовать значения, заданные по умолчанию, и вставлять данные только в том случае, если они отличаются от этих значений. В результате уменьшается время, необходимое для выполнения оператора INSERT.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://rozkrutka.org.ua/72/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Проблемы, связанные с Web</title>
		<link>http://rozkrutka.org.ua/71</link>
		<comments>http://rozkrutka.org.ua/71#comments</comments>
		<pubDate>Sun, 25 Jan 2009 15:42:19 +0000</pubDate>
		<dc:creator>business-net</dc:creator>
		
	<category>Общее о веб-сайтах</category>
		<guid isPermaLink="false">http://rozkrutka.org.ua/71</guid>
		<description><![CDATA[


 Подключение базы данных MySQL к Web порождает нескольку специфических проблем безопасности.
Неплохо начать с создания пользователя специально для подключения к Web. При этом ему можно выдать минимально необходимые полномочия и не предоставлять такие полномочия как, например, DROP, ALTER или CREATE. Этому пользователю можно было бы выдать полномочия SELECT только для таблиц catalog и полномочия INSERT [...]]]></description>
			<content:encoded><![CDATA[<p>Подключение базы данных MySQL к Web порождает нескольку специфических проблем безопасности.<br />
Неплохо начать с создания пользователя специально для подключения к Web. При этом ему можно выдать минимально необходимые полномочия и не предоставлять такие полномочия как, например, DROP, ALTER или CREATE. Этому пользователю можно было бы выдать полномочия SELECT только для таблиц catalog и полномочия INSERT — только для таблиц order. Приведенный пример — еще одна иллюстрация применения принципа минимальных полномочий.<br />
Предостережение<br />
В предыдущей главе было описано использование PHP-функций addslashes () и stripslashes () для удаления из строки сомнительных символов. Перед отправкой любых данных в MySQL важно не забывать о необходимости реализации как этих действий, так и общей &#8220;чистки&#8221; данных. Следует не забывать об использовании функции doubleval () для проверки того, что числовые данные таковыми являются в действительности. Пропуск этой проверки — часто встречающаяся ошибка; люди помнят о <a id="more-71"></a>необходимости вызова функции addslashes (), но не проверяют числовые данные.<br />
Проверять все данные, поступающие от пользователя, необходимо всегда. Даже если HTML-форма состоит только из полей выбора и переключателей, кто-либо может изменить URL-адрес, чтобы попытаться взломать сценарий. Целесообразно также проверять размер поступающих данных.<br />
Если пользователи вводят пароли или конфиденциальные данные, которые должны храниться в базе данных, помните, что если только не использовать протокол безопасных сокетов (Secure Sockets Layer — SSL), эти данные будут передаваться из браузера серверу в виде обычного текста. Использование SSL более подробно рассматривается в последующих главах.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://rozkrutka.org.ua/71/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Полномочия пользователя</title>
		<link>http://rozkrutka.org.ua/70</link>
		<comments>http://rozkrutka.org.ua/70#comments</comments>
		<pubDate>Sun, 25 Jan 2009 15:41:37 +0000</pubDate>
		<dc:creator>business-net</dc:creator>
		
	<category>Общее о веб-сайтах</category>
		<guid isPermaLink="false">http://rozkrutka.org.ua/70</guid>
		<description><![CDATA[Знание — сила. Поэтому необходимо хорошо понимать особенности работы системы полномочий MySQL и последствия выдачи конкретных полномочий. Ни одному пользователю не следует предоставлять больше полномочий, чем ему требуется. Эти полномочия необходимо проверять, просматривая таблицы полномочий.
В частности, не выдавайте полномочия PROCESS, FILE, SHUTDOWN и RELOAD ни одному пользователю кроме администратора, если только это не абсолютно необходимо. [...]]]></description>
			<content:encoded><![CDATA[<p>Знание — сила. Поэтому необходимо хорошо понимать особенности работы системы полномочий MySQL и последствия выдачи конкретных полномочий. Ни одному пользователю не следует предоставлять больше полномочий, чем ему требуется. Эти полномочия необходимо проверять, просматривая таблицы полномочий.<br />
В частности, не выдавайте полномочия PROCESS, FILE, SHUTDOWN и RELOAD ни одному пользователю кроме администратора, если только это не абсолютно необходимо. Полномочия PROCESS могут быть использованы для слежения за тем, что делают и вводят другие пользователи, в том числе за вводом паролей. Полномочия FILE позволяют считывать и записывать файлы <a id="more-70"></a>операционной системы (в числе которых, например, файл /etc/password в системе Unix).<br />
Полномочия GRANT также должны предоставляться с осторожностью, поскольку они разрешают пользователям делиться своими полномочиями с другими.<br />
При определении пользователей предоставляйте им доступ только из тех хостов, с которых они будут подключаться к базе данных. Если у вас есть пользователь jane@localhost — это прекрасно, но просто jane — достаточно распространенное имя, и пользователь с таким именем может входить в систему откуда угодно — при этом проверить аутентичность jane не представляется возможным. По аналогичным причинам следует избегать применения групповых символов в именах хостов.<br />
Безопасность можно еще больше увеличить, если указывать в таблице host IP-адреса, а не имена доменов. Это позволяет избежать проблем, связанных с ошибками ввода или атаками на сервер DNS. Данный подход можно реализовать, запустив демон MySQL с параметром - -skip-name-resolve, который означает, что все значения столбца хоста должны быть либо IP-адресами, либо именем локального узла.<br />
Следует также запретить пользователям, которые не являются администраторами, доступ к программе mysqladmin на Web-сервере. Поскольку эта программа запускается из командной строки, наличие доступа к ней по существу означает наличие полномочий доступа к операционной системе.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://rozkrutka.org.ua/70/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Пароли</title>
		<link>http://rozkrutka.org.ua/69</link>
		<comments>http://rozkrutka.org.ua/69#comments</comments>
		<pubDate>Sun, 25 Jan 2009 15:41:08 +0000</pubDate>
		<dc:creator>business-net</dc:creator>
		
	<category>Общее о веб-сайтах</category>
		<guid isPermaLink="false">http://rozkrutka.org.ua/69</guid>
		<description><![CDATA[Убедитесь, что все пользователи (особенно root!) имеют пароли, и что эти пароли правильно выбраны и регулярно обновляются, подобно паролям операционной системы. При этом важно помнить, что использование паролей, которые представляют собой или содержат слова из какого-либо словаря — идея весьма неудачная. Лучше всего применять комбинации букв и цифр.
Если планируете хранить пароли в файлах сценариев, убедитесь, [...]]]></description>
			<content:encoded><![CDATA[<p>Убедитесь, что все пользователи (особенно root!) имеют пароли, и что эти пароли правильно выбраны и регулярно обновляются, подобно паролям операционной системы. При этом важно помнить, что использование паролей, которые представляют собой или содержат слова из какого-либо словаря — идея весьма неудачная. Лучше всего применять комбинации букв и цифр.<br />
Если планируете хранить пароли в файлах сценариев, убедитесь, что каждый из таких сценариев доступен только тому пользователю, чей пароль хранится в данном файле.<br />
PHP-сценариям, служащим для подключения к базе данных, требуется доступ к і паролю конкретного пользователя. Это можно сделать достаточно безопасно, помещая имя учетной записи и пароль пользователя в <a id="more-69"></a>файл, названный, например, dbconnect.php, который затем можно включить в программу при необходимости. Этот сценарий можно надежно хранить вне дерева Web-документов, предоставляя Я доступ к нему только соответствующему пользователю.<br />
Помните, что при помещении этих сведений в файл с расширением . inc или каким-либо другим расширением в дереве Web-документов, следует тщательно проверить, что Web-сервер будет интерпретировать их как PHP-сценарии, не разрешая | просмотр этих сведений в Web-браузере.<br />
Пароли не следует хранить в виде обычного текста в базе данных. Пароли MySQL не хранятся в таком виде, но в Web-приложениях часто требуется хранить также имена учетных записей и пароли членов Web-сайта. Шифрование паролей (однонаправленное) можно выполнить с помощью MySQL-функции SHA1 (). Помните, что в случае вставки пароля, представленного в этом формате, с помощью оператора SELECT (например, для регистрации пользователя), эту же функцию придется вызывать еще раз для проверки пароля, введенного пользователем.<br />
Такой подход будет применяться при реализации проектов в части V книги.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://rozkrutka.org.ua/69/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Обеспечение безопасности базы данных MySQL</title>
		<link>http://rozkrutka.org.ua/68</link>
		<comments>http://rozkrutka.org.ua/68#comments</comments>
		<pubDate>Sun, 25 Jan 2009 15:40:40 +0000</pubDate>
		<dc:creator>business-net</dc:creator>
		
	<category>Общее о веб-сайтах</category>
		<guid isPermaLink="false">http://rozkrutka.org.ua/68</guid>
		<description><![CDATA[Безопасность очень важна, особенно при подключении базы данных MySQL к Web-сайту. В следующих разделах описаны меры предосторожности, которые нужно предпринимать для защиты базы данных.
MySQL с точки зрения операционной системы
При использовании Unix-подобной операционной системы запуск сервера MySQL (mysqld) в качестве привилегированного процесса — не самая лучшая идея. В этом случае пользователь MySQL получает полный набор полномочий [...]]]></description>
			<content:encoded><![CDATA[<p>Безопасность очень важна, особенно при подключении базы данных MySQL к Web-сайту. В следующих разделах описаны меры предосторожности, которые нужно предпринимать для защиты базы данных.<br />
MySQL с точки зрения операционной системы<br />
При использовании Unix-подобной операционной системы запуск сервера MySQL (mysqld) в качестве привилегированного процесса — не самая лучшая идея. В этом случае пользователь MySQL получает полный набор полномочий для выполнения чтения и записи файлов в любом каталоге операционной системы. Это исключительно важный момент, который легко упустить из виду, чем и воспользовались для знаменитого взлома Web-сайта Apache. (К счастью, они оказались &#8220;белыми и пушистыми&#8221;, и их единственной целью было укрепление системы безопасности.)<br />
<a id="more-68"></a>Имеет смысл настроить пользователя MySQL специально для запуска mysqld. Кроме того, доступ к каталогам (в которых хранятся физические данные) можно разрешить только пользователю MySQL. Во многих установках сервер настраивают так, чтобы он запускался с идентификатором пользователя mysql, входящего в состав группы mysql.<br />
В идеале следует также помещать сервер MySQL позади брандмауэра. Тем самым можно предотвратить подключение с компьютеров, не обладающих соответствующими полномочиями. Следует также проверить, возможно ли внешнее подключение к серверу через порт 3306. Через этот порт сервер MySQL действует по умолчанию, и он должен быть закрыт брандмауэром.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://rozkrutka.org.ua/68/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Обновление полномочий: когда изменения вступают в силу?</title>
		<link>http://rozkrutka.org.ua/67</link>
		<comments>http://rozkrutka.org.ua/67#comments</comments>
		<pubDate>Sun, 25 Jan 2009 15:39:50 +0000</pubDate>
		<dc:creator>business-net</dc:creator>
		
	<category>Общее о веб-сайтах</category>
		<guid isPermaLink="false">http://rozkrutka.org.ua/67</guid>
		<description><![CDATA[Сервер MySQL автоматически считывает таблицы предоставления полномочий во время своего запуска и при выполнении операторов GRANT и REVOKE. Однако, зная, где и как хранятся эти полномочия, их можно изменять вручную. При обновлении полномочий вручную сервер MySQL не заметит их изменения.
Об изменениях серверу потребуется сообщить, и это можно выполнить тремя способами. Можно ввести команду
flush privileges;
в командной [...]]]></description>
			<content:encoded><![CDATA[<p>Сервер MySQL автоматически считывает таблицы предоставления полномочий во время своего запуска и при выполнении операторов GRANT и REVOKE. Однако, зная, где и как хранятся эти полномочия, их можно изменять вручную. При обновлении полномочий вручную сервер MySQL не заметит их изменения.<br />
Об изменениях серверу потребуется сообщить, и это можно выполнить тремя способами. Можно ввести команду<br />
flush privileges;<br />
в командной строке MySQL (чтобы эту команду можно было использовать, необходимо войти в систему в качестве администратора). Этот способ обновления полномочий используется наиболее часто.<br />
Можно также выполнить любую из команд<br />
<a id="more-67"></a>mysqladmin flush-privileges или mysqladmin reload<br />
непосредственно в операционной системе.<br />
После выполнения этих действий полномочия глобального уровня будут проверены при следующем подключении пользователя к серверу, полномочия уровня базы данных будут проверены при следующем выполнении оператора use, а полномочия уровней таблицы и столбца — при следующем запросе со стороны пользователя.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://rozkrutka.org.ua/67/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Управление доступом: использование таблиц полномочий в среде MySQL</title>
		<link>http://rozkrutka.org.ua/66</link>
		<comments>http://rozkrutka.org.ua/66#comments</comments>
		<pubDate>Sun, 25 Jan 2009 15:39:19 +0000</pubDate>
		<dc:creator>business-net</dc:creator>
		
	<category>Общее о веб-сайтах</category>
		<guid isPermaLink="false">http://rozkrutka.org.ua/66</guid>
		<description><![CDATA[Используя таблицы полномочий, MySQL определяет действия, которые разрешено выполнять пользователю, в ходе двухэтапного процесса:
1. Проверка права на подключение. На этом этапе на основе информации, полученной из таблицы user, MySQL проверяет, имеет ли пользователь право на подключение. Эта аутентификация выполняется на основе имени пользователя, имени хоста и пароля. Если поле имени пользователя пустое, оно соответствует всем [...]]]></description>
			<content:encoded><![CDATA[<p>Используя таблицы полномочий, MySQL определяет действия, которые разрешено выполнять пользователю, в ходе двухэтапного процесса:<br />
1. Проверка права на подключение. На этом этапе на основе информации, полученной из таблицы user, MySQL проверяет, имеет ли пользователь право на подключение. Эта аутентификация выполняется на основе имени пользователя, имени хоста и пароля. Если поле имени пользователя пустое, оно соответствует всем пользователям. Имена хостов можно указывать с использованием группового символа (%). Этот символ может использоваться в качестве полного значения поля (то есть символ % соответствует всем хостам) или в качестве части имени хоста (например, %. tangledweb.com.au соответствует всем хостам, имена которых заканчиваются строкой .tangledweb.com.au). Если поле пароля пустое, пароль для подключения не <a id="more-66"></a>требуется. Однако система будет защищена в большей степени, если избегать применения пустых полей для имен пользователей, групповых символов в именах хостов и пользователей без паролей. Если поле имени хоста пустое, для поиска соответствующих записей user и host MySQL обращается к таблице host.<br />
2. Проверка права на выполнение запросов. После того как соединение с сервером установлено, при каждом вводе запроса MySQL проверяет наличие соответствующего уровня полномочий для выполнения этого запроса. Система начинает проверку с глобальных полномочий (в таблице user) и, если этих полномочий недостаточно, проверяет таблицы db и host. Если и этих полномочий недостаточно, MySQL проверит таблицу tables_priv и, наконец, если и этого окажется мало — таблицу columns_priv.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://rozkrutka.org.ua/66/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Таблицы tables_priv и columns_priv</title>
		<link>http://rozkrutka.org.ua/65</link>
		<comments>http://rozkrutka.org.ua/65#comments</comments>
		<pubDate>Sun, 25 Jan 2009 15:38:43 +0000</pubDate>
		<dc:creator>business-net</dc:creator>
		
	<category>Общее о веб-сайтах</category>
		<guid isPermaLink="false">http://rozkrutka.org.ua/65</guid>
		<description><![CDATA[Таблицы tables_priv и columns_priv используются для хранения полномочий уровней, соответственно, таблицы и столбца. Они работают подобно таблице db за исключением того, что предоставляют информацию о полномочиях по отношению к таблицам внутри конкретной базы данных и по отношению к столбцам внутри конкретной таблицы.
Структура этих таблиц несколько отличается от структуры таблиц user, db и host. Схемы таблиц [...]]]></description>
			<content:encoded><![CDATA[<p>Таблицы tables_priv и columns_priv используются для хранения полномочий уровней, соответственно, таблицы и столбца. Они работают подобно таблице db за исключением того, что предоставляют информацию о полномочиях по отношению к таблицам внутри конкретной базы данных и по отношению к столбцам внутри конкретной таблицы.<br />
Структура этих таблиц несколько отличается от структуры таблиц user, db и host. Схемы таблиц tables_priv и columns_priv показаны в табл. 12.4 и табл. 12.5.<br />
Столбец Grantor таблицы tables_priv хранит имя <a id="more-65"></a>пользователя, который предоставил полномочия данному пользователю. В столбце Times tamp обеих этих таблиц содержится значение даты и времени выдачи полномочий.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://rozkrutka.org.ua/65/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Таблицы db и host</title>
		<link>http://rozkrutka.org.ua/64</link>
		<comments>http://rozkrutka.org.ua/64#comments</comments>
		<pubDate>Sun, 25 Jan 2009 15:38:13 +0000</pubDate>
		<dc:creator>business-net</dc:creator>
		
	<category>Общее о веб-сайтах</category>
		<guid isPermaLink="false">http://rozkrutka.org.ua/64</guid>
		<description><![CDATA[Информация о большинстве полномочий рядовых пользователей хранится в таблицах db и host.
Таблица db определяет, к каким базам данных могут получать доступ те или иные пользователи из тех или иных хостов. Перечисленные в этой таблице полномочия применимы к любой базе данных, указанной в конкретной строке.
Таблица host дополняет таблицы user и db. Если пользователь может подключаться к [...]]]></description>
			<content:encoded><![CDATA[<p>Информация о большинстве полномочий рядовых пользователей хранится в таблицах db и host.<br />
Таблица db определяет, к каким базам данных могут получать доступ те или иные пользователи из тех или иных хостов. Перечисленные в этой таблице полномочия применимы к любой базе данных, указанной в конкретной строке.<br />
Таблица host дополняет таблицы user и db. Если пользователь может подключаться к базе данных нескольких хостов, для этого пользователя в таблице user <a id="more-64"></a>или db какой-либо хост не указывается. Вместо этого пользователь будет иметь набор записей в таблице host, каждая из которых будет определять полномочия для каждой комбинации пользователь-хост.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://rozkrutka.org.ua/64/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Дополнительные сведения по администрированию MySQL</title>
		<link>http://rozkrutka.org.ua/63</link>
		<comments>http://rozkrutka.org.ua/63#comments</comments>
		<pubDate>Sun, 25 Jan 2009 15:37:33 +0000</pubDate>
		<dc:creator>business-net</dc:creator>
		
	<category>Общее о веб-сайтах</category>
		<guid isPermaLink="false">http://rozkrutka.org.ua/63</guid>
		<description><![CDATA[Подробное ознакомление с системой полномочий
В главе 9 был описан процесс определения пользователей и предоставления им полномочий. Для предоставления полномочий служит команда GRANT. Если вы собираетесь выполнять действия по администрированию базы данных MySQL, полезно знать, что именно выполняет эта команда и как из нее извлечь максимальную пользу.
Выполнение оператора GRANT оказывает влияние на таблицы в специальной базе [...]]]></description>
			<content:encoded><![CDATA[<p>Подробное ознакомление с системой полномочий<br />
В главе 9 был описан процесс определения пользователей и предоставления им полномочий. Для предоставления полномочий служит команда GRANT. Если вы собираетесь выполнять действия по администрированию базы данных MySQL, полезно знать, что именно выполняет эта команда и как из нее извлечь максимальную пользу.<br />
Выполнение оператора GRANT оказывает влияние на таблицы в специальной базе данных с именем mysql. Информация о полномочиях хранится в пяти таблицах этой базы данных. Учитывая этот факт, при выдаче полномочий для работы с базами данных следует с осторожностью предоставлять доступ к базе данных mysql.<br />
По ходу дела заметим, что команда GRANT стала доступна, <a id="more-63"></a>начиная с версии MySQL 3.22.11.<br />
Просмотреть содержимое базы данных mysql можно, входя в систему в качестве ! администратора и набрав следующую команду:<br />
После этого таблицы в этой базе данных можно просматривать как обычно, с помощью команды: &#8216;<br />
show tables;<br />
Результат выполнения команды будет выглядеть подобно показанному ниже:<br />
Каждая из таблиц этой базы данных содержит системную информацию. Пять из них — user, host, db, tables_priv и columns_priv — хранят информацию о полномочиях. Иногда их называют таблицами полномочий. Эти таблицы различаются своими специфическими функциями, но все они служат одной общей цели определения того, какие действия разрешено выполнять пользователям, а какие запрещено. Каждая из них содержит два типа полей: поля области действия, определяющие пользователя, хост и часть базы данных, к которым применимы данные полномочия, и поля полномочий, которые определяют действия, разрешенные данному пользователю в данной области действия.<br />
Таблицы user и host служат для определения того, может ли пользователь вообще подключаться к серверу MySQL, а также того, обладает ли он полномочиями администратора. Таблицы db и host определяют базы данных, к которым пользователь может получать доступ. Таблица tables_priv определяет доступные для пользователя таблицы внутри базы данных, а таблица columns_priv — доступные столбцы внутри таблиц.<br />
Таблица user<br />
Таблица user содержит сведения о глобальных полномочиях пользователей. Она определяет, может ли пользователь вообще подключаться к серверу the MySQL, и то, предоставлены ли ему какие-либо полномочия глобального уровня — то есть полномочия, применимые к каждой базе данных в системе.<br />
Структуру этой таблицы можно просмотреть с помощью оператора describe user;. Схема таблицы user представлена в табл. 12.1.<br />
Каждая строка в этой таблице соответствует набору полномочий, предоставленных пользователю User, входящему в систему с хоста Host с паролем Password. В данной таблице эти поля представляют собой поля области действия, поскольку они описывают область действия других полей, называющихся полями полномочий.<br />
Полномочия, перечисленные в этой таблице (и последующих), соответствуют полномочиям, выдаваемым с помощью команды GRANT, которая описана в главе 9. Например, Select_priv соответствует полномочиям на выполнение команды SELECT.<br />
Если пользователь располагает конкретными полномочиями, значение в соответствующем столбце будет равно Y. И наоборот, если данные полномочия не предоставлены, значение будет равно N.<br />
Все полномочия, перечисленные в таблице user — глобальные, то есть они применяются ко всем базам данных в системе (включая базу данных mysql). Следовательно, для администраторов некоторые значения будут установлены равными Y, но для большинства пользователей все значения должны быть равными N. Обычные пользователи должны располагать правами доступа к соответствующим базам данных, а не] ко всем таблицам.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://rozkrutka.org.ua/63/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Создание базы данных</title>
		<link>http://rozkrutka.org.ua/62</link>
		<comments>http://rozkrutka.org.ua/62#comments</comments>
		<pubDate>Sun, 25 Jan 2009 15:36:56 +0000</pubDate>
		<dc:creator>business-net</dc:creator>
		
	<category>Общее о веб-сайтах</category>
		<guid isPermaLink="false">http://rozkrutka.org.ua/62</guid>
		<description><![CDATA[Для целей этого приложения мы должны хранить следующую информацию:
■ lists (списки) — списки рассылки, доступные для подписки.
■ subscribers (подписчики) — пользователи системы и их предпочтения.
■ sub_lists (списки, на которые совершена подписка) — информация о списках, на которые подписались пользователи (отношение типа &#8220;многие ко многим&#8221;).
■ mail (сообщения электронной почты) — информация об отправленных сообщениях электронной почты.
■ [...]]]></description>
			<content:encoded><![CDATA[<p>Для целей этого приложения мы должны хранить следующую информацию:<br />
■ lists (списки) — списки рассылки, доступные для подписки.<br />
■ subscribers (подписчики) — пользователи системы и их предпочтения.<br />
■ sub_lists (списки, на которые совершена подписка) — информация о списках, на которые подписались пользователи (отношение типа &#8220;многие ко многим&#8221;).<br />
■ mail (сообщения электронной почты) — информация об отправленных сообщениях электронной почты.<br />
■ images (изображения) — поскольку необходимо располагать возможностью отправки сообщений электронной почты, состоящих из нескольких файлов (то есть текста, HTML-кода и набора изображений), требуется также отслеживать, какие изображения отправляются с каждым почтовым сообщением.<br />
SQL-код, с помощью которого создается эта база данных, <a id="more-62"></a>показан в листинге 30.1.<br />
Затем с помощью метода isError () мы проверяем наличие ошибки при установке соединения, и, если ошибка произошла, выводим сообщение об ошибке и осуществляем выход:<br />
if (DB::isError($db)) {<br />
echo $db->getMessage(); exit ;<br />
}<br />
Далее, при условии, что все было выполнено правильно, мы настраиваем запрос и выполняем его:<br />
$result = $db->query($query);<br />
Мы можем проверить количество возвращенных строк: $num_results = $result->numRows();<br />
Извлечение каждой строки выполняется следующим образом: $row = $result->fetchRow(DB_FETCHMODE_ASSOC);<br />
Обобщенный метод fetchRow() позволяет осуществлять выбор строки во множестве различных форматов — параметр DB_FETCHMODE_ASSOC показывает, что строк) желательно вернуть в виде ассоциативного массива.<br />
После вывода возвращенных строк сценарий завершается закрытием соединения с базой данных:<br />
$db->disconnect();<br />
Как видите, этот обобщенный пример во многом похож на первый сценарий.<br />
Преимущество использования DB состоит в том, что нужно запомнить только один набор функций работы с базой данных, и, если придется изменить программное обеспечение базы данных, код потребует лишь минимальных изменений.<br />
Поскольку эта книга посвящена MySQL, для увеличения скорости работы и гибкости мы будем пользоваться встроенными библиотеками MySQL. Тем не менее, в реальных проектах может потребоваться использовать пакет DB, поскольку в ряде случаев подобный уровень абстракции оказывается буквально незаменимым.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://rozkrutka.org.ua/62/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Отправка сообщений электронной почты с вложениями</title>
		<link>http://rozkrutka.org.ua/61</link>
		<comments>http://rozkrutka.org.ua/61#comments</comments>
		<pubDate>Sun, 25 Jan 2009 15:36:14 +0000</pubDate>
		<dc:creator>business-net</dc:creator>
		
	<category>Общее о веб-сайтах</category>
		<guid isPermaLink="false">http://rozkrutka.org.ua/61</guid>
		<description><![CDATA[В этом проекте мы хотели бы, чтобы в соответствии с предпочтениями пользователей бюллетени можно было отправлять им в форме простого текста или в виде &#8220;украшенной&#8221; HTML-версии.
Для отправки HTML-файла с внедренными в него изображениями потребуется определиться со способом отправки вложений. Простая PHP-функция mail() не обеспечивает удобной поддержки отправки вложений. Поэтому вместо нее мы будем использовать замечательный [...]]]></description>
			<content:encoded><![CDATA[<p>В этом проекте мы хотели бы, чтобы в соответствии с предпочтениями пользователей бюллетени можно было отправлять им в форме простого текста или в виде &#8220;украшенной&#8221; HTML-версии.<br />
Для отправки HTML-файла с внедренными в него изображениями потребуется определиться со способом отправки вложений. Простая PHP-функция mail() не обеспечивает удобной поддержки отправки вложений. Поэтому вместо нее мы будем использовать замечательный пакет Mail_Mime из библиотеки PEAR, который был разработан Ричардом Хейесом (Richard Heyes). Это пакет умеет обрабатывать HTML-наложения, поэтому он будет использоваться для вложения любых изображений, содержащихся в HTML-файле.<br />
Инструкции по установке пакета Mail_Mime можно найти в приложении А, в части, посвященной инсталляции библиотеки PEAR.<br />
Обзор решения<br />
<a id="more-61"></a>При написании кода этого проекта мы снова воспользуемся подходом, управляемым событиями, как это уже имело место<br />
Как и ранее, мы начинаем разработку с представления набора диаграмм, изображающих последовательности действий, которые пользователь может выполнять в системе. В данном случае мы имеем три диаграммы, представляющие три различных набора взаимодействий пользователя с системой. Пользователь имеет право выполнять различные действия, когда он не зарегистрирован в системе, когда он зарегистрирован в качестве рядового пользователя и когда он зарегистрирован в качестве администратора. Возможные действия показаны на рисунках 30.1, 30.2 и 30.3, соответственно.<br />
На рис. 30.1 изображены действия, которые может предпринять незарегистрированный пользователь. Легко заметить, что он может зарегистрироваться (если уже имеет учетную запись), создать учетную запись (если он ее еще не имеет) или просмотреть списки рассылки, доступные для подписки (это является частью маркетинговой тактики).<br />
Действия, которые пользователь может предпринять после регистрации, показаны на рис. 30.2. Пользователь может изменять параметры настройки своей учетной записи (адрес электронной почты и предпочтения), изменять свой пароль и изменять набор списков рассылки, на которые он подписался ранее.<br />
Действия, доступные для зарегистрированного в системе администратора, можно видеть на рис. 30.3. Как следует из этого рисунка, администратору доступно большинство действий, разрешенных для рядового пользователя, а также набор дополнительных возможностей. Администратор может создавать новые списки рассылки, создавать новые сообщения для списков рассылки путем загрузки файлов и просматривать сообщения перед их отправкой.<br />
Поскольку приложение использует подход, управляемый событиями, основная часть приложения содержится в единственном файле index.php, который содержит вызовы множества библиотечных функций. Краткое описание файлов этого приложения Реализацию проекта мы начнем с создания базы данных, в которой будем хранить информацию о подписчиках и списках рассылки.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://rozkrutka.org.ua/61/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Загрузка файлов</title>
		<link>http://rozkrutka.org.ua/60</link>
		<comments>http://rozkrutka.org.ua/60#comments</comments>
		<pubDate>Sun, 25 Jan 2009 15:35:20 +0000</pubDate>
		<dc:creator>business-net</dc:creator>
		
	<category>Общее о веб-сайтах</category>
		<guid isPermaLink="false">http://rozkrutka.org.ua/60</guid>
		<description><![CDATA[Как уже упоминалось ранее, нам необходим интерфейс, который позволил бы администратору отправлять информационные бюллетени. Тем не менее, мы еще ничего не сказали о том, как администраторы будут создавать эти самые бюллетени. Можно было бы предусмотреть форму, в которой администраторы смогли бы вводить или вставлять содержимое бюллетеня. Однако, памятуя о принципах дружественного пользовательского интерфейса, администраторам будет [...]]]></description>
			<content:encoded><![CDATA[<p>Как уже упоминалось ранее, нам необходим интерфейс, который позволил бы администратору отправлять информационные бюллетени. Тем не менее, мы еще ничего не сказали о том, как администраторы будут создавать эти самые бюллетени. Можно было бы предусмотреть форму, в которой администраторы смогли бы вводить или вставлять содержимое бюллетеня. Однако, памятуя о принципах дружественного пользовательского интерфейса, администраторам будет гораздо удобнее, если они смогут создавать бюллетени в предпочитаемом ими редакторе, а затем загружать результирующие файлы на Web-сервер. Помимо прочего, это должно упростить администраторам процедуру добавления изображений в информационный бюллетень представленный в HTML-формате.<br />
Для решения очерченной задачи можно воспользоваться возможностью загрузки файлов, которая была описана в<br />
Нам придется создать несколько более сложную форму, нежели те, которые при менялись в предыдущих проектах. Напомним, что мы решили предоставить администраторам <a id="more-60"></a>возможность загружать как текстовую, так и HTML-версию бюллетеня, а также любые изображения, встроенные в HTML-код.<br />
После того как информационный бюллетень успешно загружен, администратор должен иметь интерфейс, который бы позволил ему просмотреть бюллетень перед его отправкой. В результате администратор сможет убедиться в корректности загрузки всех файлов.<br />
Следует отметить, что все эти файлы будут также сохраняться и в каталоге архива, что даст возможность просматривать их в будущем. Доступ по записи в такой каталог должен быть открыт для пользователя, под именем которого выполняется Web-сервер. Сценарий загрузки будет предпринимать попытку сохранить бюллетень в каталог архива . / archive/, поэтому обязательно убедитесь в том, что упомянутый каталог создан, а полномочия на доступ к нему установлены корректно.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://rozkrutka.org.ua/60/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Компоненты решения</title>
		<link>http://rozkrutka.org.ua/59</link>
		<comments>http://rozkrutka.org.ua/59#comments</comments>
		<pubDate>Sun, 25 Jan 2009 15:34:48 +0000</pubDate>
		<dc:creator>business-net</dc:creator>
		
	<category>Общее о веб-сайтах</category>
		<guid isPermaLink="false">http://rozkrutka.org.ua/59</guid>
		<description><![CDATA[Для удовлетворения предъявляемых к приложению требований потребуется множество компонентов. К основным из них относятся: определение базы данных списков, подписчиков и заархивированных информационных бюллетеней; загрузка информационных бюллетеней, которые были созданы в автономном режиме; отправка сообщений электронной почты с вложениями.
Создание базы данных списков и подписчиков
Для каждого пользователя системы в этом проекте мы планируем отслеживать его имя и [...]]]></description>
			<content:encoded><![CDATA[<p>Для удовлетворения предъявляемых к приложению требований потребуется множество компонентов. К основным из них относятся: определение базы данных списков, подписчиков и заархивированных информационных бюллетеней; загрузка информационных бюллетеней, которые были созданы в автономном режиме; отправка сообщений электронной почты с вложениями.<br />
Создание базы данных списков и подписчиков<br />
Для каждого пользователя системы в этом проекте мы планируем отслеживать его имя и пароль, а также перечень списков рассылки, на которые тот или иной пользователь подписался. Кроме того, мы будем хранить предпочтения каждого пользователя относительно получения сообщений в виде простого текста или же в HTML- формате, дабы ему можно было отправлять соответствующую версию информационного бюллетеня.<br />
В качестве администратора будет выступать пользователь, <a id="more-59"></a>наделенный особыми правами по созданию новых списков рассылки и отправке в них информационных бюллетеней.<br />
Для системы такого рода весьма желательно поддерживать архив ранее отправленных информационных бюллетеней. Подписчики могут не хранить предшествующие сообщения, тем не менее, вполне возможно, что со временем они захотят просмотреть некоторые из них. Архив может также служить в качестве маркетингового инструмента, поскольку потенциальные подписчики будут иметь возможность по смотреть, как в общем случае выглядят информационные бюллетени.<br />
Создание этой базы данных в среде MySQL и разработка PHP-интерфейса к ней не должно представлять собой ничего особо нового или сложного.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://rozkrutka.org.ua/59/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Задача</title>
		<link>http://rozkrutka.org.ua/58</link>
		<comments>http://rozkrutka.org.ua/58#comments</comments>
		<pubDate>Sun, 25 Jan 2009 15:34:00 +0000</pubDate>
		<dc:creator>business-net</dc:creator>
		
	<category>Общее о веб-сайтах</category>
		<guid isPermaLink="false">http://rozkrutka.org.ua/58</guid>
		<description><![CDATA[Мы планируем создать интерактивную систему компоновки и отправки информационных бюллетеней. Эта система должна позволять создание и рассылку пользователям различных информационных бюллетеней, а также предоставлять пользователям возможность подписываться на один или несколько информационных бюллетеней.
Если конкретно, система должна удовлетворять следующим требованиям:
■ Администраторы должны иметь возможность настраивать и изменять списки рассылки.
■ Администраторы должны иметь возможность рассылать информационные бюллетени [...]]]></description>
			<content:encoded><![CDATA[<p>Мы планируем создать интерактивную систему компоновки и отправки информационных бюллетеней. Эта система должна позволять создание и рассылку пользователям различных информационных бюллетеней, а также предоставлять пользователям возможность подписываться на один или несколько информационных бюллетеней.<br />
Если конкретно, система должна удовлетворять следующим требованиям:<br />
■ Администраторы должны иметь возможность настраивать и изменять списки рассылки.<br />
■ Администраторы должны иметь возможность рассылать информационные бюллетени в текстовом и HTML-формате всем подписчикам в рамках одного списка рассылки.<br />
<a id="more-58"></a>■ Пользователи должны иметь возможность регистрироваться на сайте, а также вводить и изменять сведения о себе.<br />
■ Пользователи должны иметь возможность подписываться на любые списки, доступные на сайте.<br />
■ Пользователи должны иметь возможность отменять подписку на ранее подписанные списки рассылки.<br />
■ Пользователи должны иметь возможность сохранять свои предпочтения относительно получения информационных бюллетеней в формате HTML или в виде простого текста.<br />
■ В целях поддержания безопасности пользователи не должны иметь возможность отправлять сообщения электронной почты в списки рассылки и видеть адреса электронной почты других подписчиков.<br />
■ Пользователи и администраторы должны иметь возможность просматривать информацию о списках рассылки.<br />
■ Пользователи и администраторы должны иметь возможность просматривать прошлые информационные бюллетени, отправленные в список рассылки (то есть архив).
</p>
]]></content:encoded>
			<wfw:commentRSS>http://rozkrutka.org.ua/58/feed/</wfw:commentRSS>
		</item>
	</channel>
</rss>
