|
Программирование >> Программный интерфейс приложений
Следующий оператор 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 которых являются более определенными, чем введенные администратором. Именно в этом зачастую и кроется причина проблемы. Это свидетельствует также и о том, что администраторам необходимо более точно определять записи пользователей (добавляя новые записи для каждого конкретного уровня доступа).
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |