Форумы   Авторам статей    

Меню пользователя



Вход и регистрация недоступны в архивном режиме.



Опрос Населения

Форма отключена в архивном режиме.


Ссылки


Система привилегий и безопасность в 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 будет подробно рассмотрена в следующих разделах.
Реклама




Статистика










Человек на сайте

0 Пользователей
9 Гостей


Copyright © 2007
Работает при помощи