|
Система привилегий и безопасность в MySQL
Не указан
MysqlСр 14 февраля 2007 217 0
База данных mysql и таблицы привилегий.
Итак, вы успешно вошли в базу данных mysql, которая используется для администрирования сервера. Что же здесь находится? А находятся здесь 5 таблиц, которые ничем не отличаются от других таблий баз данных, за исключением того, что эти таблицы используются для предоставления доступа к базам данных и таблицам в них пользователям. Рассмотрим каждую из них.
Введите следующую команду,которая покажет таблицы в базе данных mysql:
mysql>show tables;
Tables_in_mysql
columns_priv
db
host
tables_priv
user
Кратко рассмотрим функции каждой из таблиц:
User
Определяет, разрешено ли пользователю, пытающемуся подключиться к серверу делать это. Содержит имя пользователя, пароль а также привилегии. Если ввести команду show columns from user;, то получим следующее:
Field Type Null Key Default Extra
Host char(60) PRI
User char(16) PRI
Password char(8)
Select_priv char(1) N
Insert_priv char(1) N
Update_priv char(1) N
Delete_priv char(1) N
Create_priv char(1) N
Drop_priv char(1) N
Reload_priv char(1) N
Shutdown_priv char(1) N
Process_priv char(1) N
File_priv char(1) N
Изначально эта таблица содержит пользователя root с паролем, который вы установили и именем хоста '%'. По умолчанию root может входить с любого хоста, имеет все привилегии и доступ ко всем базам данных. Также в таблице содержится запись для пользователя '%', которую нужно сразу же удалить, так как она предоставляет доступ любому пользователю.
delete from user where user='%';
Для добавления нового пользователя выполните следующие действия:
insert into user (host,user,password) values ('%.domain.com','john',password('df456');
insert into user (host,user,password) values ('localhost,'mary',password('kitchen');
select host,user,password from user;
Host User Password
% root 456g879k34df9
%.domain.com john 657t234d980hg6
localhost mary 234d76gh88rt9
Пояснения:
1. Команда insert вставляет данные в таблицу, не забывайте завершать команды ';'.
2. При вводе пароля используйте функцию password(), иначе пароль работать не будет!
3. Все пароли шифруются mysql, поэтому в поле Password вы видите абракадаьры. Это делается в целях безопасности.
4. Не есть хорошей практикой назначать привилегии пользователям в таблице user, так как в этом случае они являются глобальными и распространяются на все базы данных. Предоставляйте привилегии каждому пользователю к конкретной базе данных в таблице db, которая будет рассмотрена далее.
5. При задании имени хоста для входа через сеть рекомендуется явно указывать полное имя хоста, а не '%'. В приведенном выше примере юзеру john разрешается вход на сервер со всех машин домена domain.com. Можно также указывать IP-адреса машин и маски подсетей для большей безопасности.
Db
Определяет к каким базам данных каким пользователям и с каких хостов разрешен доступ. В этой таблице можно предоставлять каждому пользователю доступ к базам данных и назначать привилегии. Eсли выполнить команду show columns from db; получим следующее:
Field Type Null Default Extra
Host char(60) PRI
Db char(32) PRI
User char(16) PRI
Select_priv char(1) N
Insert_priv char(1) N
Update_priv char(1) N
Delete_priv char(1) N
Create_priv char(1) N
Drop_priv char(1) N
По умолчанию, все привилегии установлены в 'N'. Например, предоставим юзеру john доступ к базе данных library и дадим ему привилегии select,insert и update(описание основных команд mysql будет дано в отдельном разделе, сейчас моя цель-показать, как работают таблицы привилегий).
insert into db (host,user,db,select_priv,insert_priv,update_priv)
values ('%.domain.com','john','library','Y','Y','Y');
Привилегии, устанавливаемые в таблице db, распространяются только на базу данных library. Если же установить эти привилегии в таблице user, то они будут распространяться и на другие базы данных, даже если доступ к ним и не установлен явно.
Host
Таблица host используется для расширения диапазона доступа в таблице db. К примеру, если доступ к какой-либо базе данных должен быть предоставлен более чем одному хосту, тогда следует оставить пустой колонку host в таблице db, и внести в таблицу host необходимые имена хостов. Выполним команду show columns from host;
Field Type Null Default Extra
Host char(60) PRI
Db char(32) PRI
Select_priv char(1) N
Insert_priv char(1) N
Update_priv char(1) N
Delete_priv char(1) N
Create_priv char(1) N
Drop_priv char(1) N
Как видно из таблицы, здесь также можно задавать привилегии для доступа к базе данных. Они обычно редко используются без необходимости.Все привилегии доступа нужно задавать в таблице db для каждого пользователя,а в таблице host только перечислить имена хостов. Сервер читает все таблицы,проверяет имя пользователя,пароль, имя хоста, имя базы данных,привилегии. Если в таблице db привилегии select, insert установлены в 'Y', а в таблице host в 'N', то в итоге юзер все равно получит 'Y'. Чтобы не вносить путаницы, лучше назначать привилегии в таблице db.
Эти 3 таблицы являются основными. В новых версиях MySQL, начиная с 3.22 добавлены еще 2 таблицы - tables_priv и columns_priv, которые позволяют задать права доступа к определенной таблице в базе данных и даже к определенной колонке. Они работают подобно таблице db, только ссылаются на таблицы и колонки. Также, начиная с версии 3.22 можно использовать команду GRANT для предоставления доступа к базам данных, таблицам и колонкам таблиц,что избавляет от необходимости вручную модифицировать таблицы db,tables_priv и columns_priv. Команда GRANT будет подробно рассмотрена в следующих разделах.
|