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

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


Следующий оператор GRANT также создает пользователя со статусом суперпользователей, однако только для одной привилегии:

GRANT RELOAD ON *.* ТО flush@localhost IDENTIFIED BY flushpass

Этот оператор уже рассматривался в главе И, Общее администрирование MySQL , когда речь щла о создании пользователя flush. Равноценный предьщущей строке оператор INSERT в этом примере не такой сложный, как в предыдущем. Ведь гораздо проще указать имена столбцов и определить значение только в одном столбце привилегий. Во всех других столбцах по умолчанию будет установлено значение n :

INSERT INTO user (Host,User,Password,Reload priv)

VALUES( localhost , flush ,PASSWORD( flushpass ) , Y )

Привилегии уровня базы данных присваиваются с помощью предложения ON db narae,а Не ON *.*:

GRANT ALL ON samp db.* TO boris(31ocalhost IDENTIFIED BY ruby

Эти привилегии не являются глобальными, поэтому их не следует записывать в таблицу user. Запись в этой таблице создать нужно (чтобы пользователь смог подключиться), однако для определения привилегий доступа к базе данных необходимо создать запись также и в таблице db:

INSERT INTO user (Host, User, Pas.sword)

VALUES( localhost , boris , PASSWORD( ruby )) INSERT INTO db VALUES( localhost , samp db , boris , у , Y , Y , Y , Y , Y , N , Y , Y , Y

Столбец co значением n соответствует привилегии GRANT. Для оператора GRANT уровня базы данных с окончанием WITH grant option в этом столбце можно установить значение у .

Настройка привилегий уровня таблицы и столбца осуществляется посредством выполнения оператора INSERT для таблиц tables priv и columnspriv. Безусловно, если версия MySQL не включает оператор GRANT, то она и не включает и эти таблицы, поскольку появились они одновременно. Если же администратор по определенным причинам желает манипулировать данными таблиц tables priv и colurans priv без помощи оператора GRANT, он должен проявлять осторожность, поскольку невозможно активизировать привилегии в отдельных столбцах. Необходимо установить в одном из столбцов tables priv. Table priv или columns priv.Coluim priv значение SET, состоящее из активизируемых привилегий. Например, чтобы предоставить пользователю привилегии SELECT И INSERT ДЛЯ таблицы, установите в столбце Table priv соответствующей записи таблицы tables priv значение Select, Insert .

Для изменения привилегий пользователей, уже имеющих учетную запись MySQL вместо INSERT, используется команда UPDATE. Ее можно применять как для добавления, так и для удаления привилегий. Для полного удаления пользователя и всех его привилегий, удалите с помощью команды DELETE его записи изо всех таблиц разрещений.



Если администратор желает избежать непосредственного изменени таблиц разрешений, можно воспользоваться сценариями mysqlaccess i mysqlsetpermissions, входящими В состав дистрибуции MySQL.

Головоломка с привилегиями (продолжение)

в разделе Ведение файлов журналов главы 11 была рассмотрена ситуация, когда присвоенные администратором привилегии не позволяли достигать желаемого уровня доступа. Если помните, проблема возникала с новой инсталляцией MySQL, администратор которой добавлял запись для пользователя, тем самым разрешая ему подключаться к серверу с нескольких компьютеров. Очевидный способ определить подобный доступ - воспользоваться спецификатором имени компьютера с символом Следовательно, администратор создает учетную запись пользователя с помощью следующего оператора:

GRANT ALL ON samp db.* TO frede%.snake.net IDENTIFIED BY cocoa

Если пользователь fred имеет ученую запись на компьютере с сервером, то он попытается подключиться с него и получит следующий ответ: % mysql -U fred -pcocoa samp db

ERROR 1045: Access denied for user: fred@localhost (Using password: YES)

Почему же так происходит? Чтобы понять это, необходимо разобраться, как сценарий mysql install db создает исходные таблицы разрешений и как сервер проверяет соответствие данных клиентских соединений и записей таблицы user. При инициализации баз данных в процессе работы mysql install db создает записи в таблице user со следующим значениями таблиц Host и User.

+---------------------+------+

1 Host ; user I

+---------------------+------+

1 localhost ] root ! pit-viper.snake.net J root J 1 localhost i 1

I pit-viper.snake.net

+---------------------+------+

Первые две записи позволяют пользователю root подключиться к локальному компьютеру, определив либо localhost, либо собственно имя компьютера. Вторые две записи разрешают анонимное соединение с локальным компьютером. При добавлении записи для пользователя fred таблица принимает следующий вид.

+---------------------+------+

1 Host \ User i

+---------------------+------+

) localhost ; root )

1 pit-viper.snake.net J root , 1 localhost j I

J pit-viper.snake.net } 1

1 %.snake.net ) fred +---------------------+------+



в процессе запуска сервера он считывает эти записи и сортирует их (сначала по имени компьютера, а затем по пользователям). В результате более определенные значения оказываются первыми, а менее определенные - последними.

+---------------------+------+

1 Host I User I

+---------------------+------+

1 localhost ] root ]

[ localhost I I

] pit-viper.snake.net root 1 pit-viper.snake.net \ \

I %.snake.net fred j +---------------------+------+

Две записи для компьютера localhost располагаются рядом. Запись для пользователя root размещается первой, поскольку она является более полной. Аналогичным образом и в таком же порядке размещаются и записи компьютера pit-viper . snake . net. Все эти записи имеют в столбце Host буквенные значения безо всяких специальных символов, поэтому и располагаются перед записью для пользователя fred, включающей один специальный символ. Соответственно, записи анонимных пользователей имеют приоритет перед записью пользователя fred.

Когда пользователь fred предпринимает попытку подключиться к серверу с локального компьютера, его данным соответствует запись с пустым именем пользователя, которая в порядке сортировки располагается перед записью с %.snake.net. Поскольку анонимные пользователи не применяют пароли, то и эта запись включает пустое значение пароля. Поскольку fred вводит пароль при подключении, возникает несоответствие, и соединение не устанавливается. Важно всегда помнить, что хотя определять с помощью специальных символов имена компьютеров весьма удобно, с подключением с локального компьютера всегда будут возникать проблемы, если в таблице user будут размещаться записи для анонимных пользователей.

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

mysql> DELETE FROM user WHERE User = ;

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

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



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

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