Вход/Регистрация
MySQL 5.0. Библиотека программиста
вернуться

Гольцман Виктор

Шрифт:

• привилегия SELECT для таблицы Products;

• привилегия SELECT для столбца description.

Для выполнения некоторых операций может потребоваться несколько типов привилегий. Например, команда

UPDATE SalesDept.Products SET price=\'548.00\' WHERE id=5;

доступна пользователю, если у него одновременно есть привилегия SELECT для таблицы Products (или для базы данных SalesDept, или глобальная) и привилегия UPDATE для столбца price (или для таблицы Products, или для базы данных SalesDept, или глобальная).

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

Предоставление привилегий

Для предоставления привилегий пользователям используется команда

GRANT <Тип привилегии>

[(<Список столбцов>)] ON <Область действия>

TO <Идентификатор пользователя>

[WITH GRANT OPTION];

В качестве области действия вы можете указать одно из следующих значений:

• *.* – привилегия будет действовать глобально;

• <Имя базы данных>.* – привилегия будет действовать для указанной базы данных;

• * – привилегия будет действовать для базы данных, которая в момент выполнения команды GRANT являлась текущей;

• <Имя базы данных>.<Имя таблицы> или <Имя таблицы> – привилегия будет действовать для указанной таблицы (если имя базы данных не указано, подразумевается текущая база данных). Если требуется создать привилегию не для всей таблицы, а только для отдельных столбцов, необходимо перечислить эти столбцы в скобках перед ключевым словом ON.

Рассмотрим несколько примеров.

• GRANT CREATE ON *.* TO \'anna\'@\'localhost\

Команда предоставляет пользователю anna\'@\'localhost привилегию на создание баз данных и таблиц в любой базе данных.

• GRANT DROP ON SalesDept.* TO \'anna\'@\'localhost\

Команда предоставляет пользователю anna\'@\'localhost привилегию на удаление таблиц в базе данных SalesDept (Отдел продаж), а также на удаление самой базы данных SalesDept.

• GRANT SELECT ON SalesDept.Products TO \'anna\'@\'localhost\ Команда предоставляет пользователю anna\'@\'localhost привилегию на получение данных из таблицы Products (Товары) базы данных SalesDept (Отдел продаж).

• GRANT UPDATE (price) ON SalesDept.Products TO \'anna\'@\'localhost\ Команда предоставляет пользователю anna\'@\'localhost привилегию на изменение данных в столбце price (цена) таблицы Products (Товары).

При назначении привилегий необходимо иметь в виду следующие особенности.

• Если учетная запись с указанным идентификатором не существует, команда GRANT может создать такую запись. Отключить автоматическое создание учетной записи позволяет ключевое слово NO_AUTO_CREATE_USER в значении переменной sql_mode (напомню, что настройку режима взаимодействия с сервером MySQL мы обсуждали в подразделе «Вставка отдельных строк» главы 2).

• Привилегию ALTER рекомендуется предоставлять с осторожностью: путем переименования таблиц и столбцов пользователь может изменить настройки системы привилегий.

• Если при создании привилегии вы указываете параметр WITH GRANT OPTION, то пользователь получает возможность «делиться» не только созданной привилегией, но и другими своими привилегиями в рамках данной области действия. Например, после выполнения команд

GRANT SELECT ON *.* TO \'marina\

GRANT INSERT ON SalesDept.* TO \'marina\' WITH GRANT OPTION;

GRANT DELETE ON SalesDept.Customers TO \'marina\

пользователь marina может предоставлять другим пользователям следующие привилегии:

– привилегии SELECT, INSERT и GRANT OPTION на уровне базы данных SalesDept (Отдел продаж). Хотя сам пользователь marina имеет глобальную привилегию SELECT, его возможности делегирования привилегий ограничены базой данных SalesDept;

– привилегию DELETE на уровне таблицы Customers (Клиенты) базы данных SalesDept, так как область действия этой привилегии входит в область действия привилегии GRANT OPTION.

• Если вы предоставляете привилегию GRANT OPTION нескольким пользователям, эти пользователи могут «обменяться» привилегиями, то есть объединить свои наборы привилегий.

• Привилегии, областью действия которых является таблица или столбец, вступают в силу немедленно – пользователь может сразу же начать выполнять SQL-команды, разрешенные ему новой привилегией. Привилегии, относящиеся к базе данных, начинают действовать после выполнения команды USE <имя базы данных>, то есть после выбора какой-либо базы данных в качестве текущей. Глобальные привилегии начинают применяться при следующем подключении пользователя к серверу MySQL.

Итак, вы познакомились с командой добавления привилегий. В следующем подразделе мы рассмотрим команду отмены привилегий.

Отмена привилегий

Чтобы удалить привилегию, ранее назначенную пользователю, используется команда

REVOKE <Тип привилегии>

[(<Список столбцов>)] ON <Область действия>

FROM <Идентификатор пользователя>;

Например,:

• REVOKE CREATE ON *.* FROM \'anna\'@\'localhost\

Команда отменяет глобальную привилегию пользователя \'anna\'@\'localhost\', разрешавшую создание баз данных и таблиц.

• REVOKE DROP ON SalesDept.* FROM \'anna\'@\'localhost\ Команда отменяет привилегию пользователя \'anna\'@\'localhost\' на удаление базы данных SalesDept (Отдел продаж) и таблиц в этой базе данных.

• REVOKE SELECT ON SalesDept.Products

FROM \'anna\'@\'localhost\

Команда отменяет привилегию пользователя \'anna\'@\'localhost\' на получение данных из таблицы Products (Товары) базы данных SalesDept.

• REVOKE UPDATE (price) ON SalesDept.Products

FROM \'anna\'@\'localhost\

Команда отменяет привилегию пользователя \'anna\'@\'localhost\' на изменение данных в столбце price (цена) таблицы Products (Товары).

Параметры команды REVOKE имеют тот же смысл, что и параметры команды GRANT. Аналогичны и правила вступления изменений в силу.

Отметим, что в MySQL при удалении баз данных, таблиц и столбцов связанные с ними привилегии не удаляются автоматически; для удаления таких привилегий требуется выполнить команду REVOKE.

Теперь вы знаете, как добавлять и удалять привилегии доступа. В следующем подразделе мы обсудим, как получить информацию о зарегистрированных привилегиях.

Просмотр привилегий

Сведения о привилегиях доступа содержатся в следующих таблицах системной базы данных mysql.

• Глобальные привилегии хранятся в таблице user (пользователь), которая уже знакома нам из предыдущего раздела. Каждому типу привилегии соответствует отдельный столбец, допускающий значения \'Y\' (операция разрешена) и \'N\' (операция не разрешена).

• Привилегии, областью действия которых является отдельная база данных, хранятся в таблице db (база данных). Первичный ключ в этой таблице образуют столбцы Host (хост), Db (база данных) и User (пользователь). Таким образом, каждая строка таблицы определяет привилегии одного пользователя по отношению к одной базе данных. Как и в таблице user, каждой привилегии соответствует отдельный столбец, возможными значениями которого являются \'Y\' и \'N\'.

...

Примечание

При проверке доступа пользователей к базе данных используется также таблица host. Однако команды GRANT и REVOKE не затрагивают эту таблицу, и обычно она остается пустой.

• Привилегии, относящиеся к отдельным таблицам, хранятся в таблице tables_ priv. Первичным ключом в этой таблице служат столбцы Host (Хост), Db (База данных), User (Пользователь) и Table_name (Имя таблицы). Таким образом, каждая строка таблицы tables_priv определяет привилегии доступа конкретного пользователя к конкретной таблице. Типы привилегий, которыми обладает пользователь, перечислены в столбце Table_priv (Привилегии доступа к таблице), имеющем тип данных SET. Кроме того, в таблице tables_priv имеется столбец Column_priv (Привилегии доступа к столбцу) с типом данных SET, значение которого указывает, что у пользователя имеются привилегии доступа к отдельным столбцам таблицы.

• Привилегии для отдельных столбцов хранятся в таблице columns_priv. Первичный ключ этой таблицы состоит из столбцов, идентифицирующих пользователя (Host и User), и столбцов, идентифицирующих столбец (Db, Table_name и Column_name). Типы привилегий, которыми обладает пользователь по отношению к столбцу, перечислены в столбце Column_priv (Привилегии доступа к столбцу) с типом данных SET.

Таблицы user, db, tables_priv и columns_priv вы можете использовать для получения информации о пользователях, обладающих привилегиями доступа к интересующему вас объекту базы данных. Если же требуется, наоборот, узнать, к каким объектам имеет доступ конкретный пользователь, выполните команду

SHOW GRANTS [FOR Идентификатор пользователя>];

Команда SHOW GRANTS выводит сведения о привилегиях пользователя в виде набора команд GRANT, с помощью которых можно сформировать текущий набор привилегий пользователя. Если идентификатор пользователя не задан, вы увидите свои привилегии.

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

Управление привилегиями в MySQL Administrator

В подразделе «Управление учетными записями в MySQL Administrator» вы узнали, каким образом в утилите MySQL Administrator представлена информация о зарегистрированных пользователях. По умолчанию для каждого пользователя отображается вкладка Schema Privileges (Привилегии доступа к базам данных), содержащая сведения о привилегиях, областью действия которых являются отдельные базы данных (рис. 5.4).

Рис. 5.4. Вкладка Schema Privileges

Чтобы увидеть остальные привилегии, выполните следующую настройку.

1. В главном окне MySQL Administrator откройте меню Tools (Сервис) и выберите пункт Options (Параметры).

2. В появившемся окне Options (Параметры) в левой области щелкните на пункте Administrator (Администратор).

3. В правой области в группе полей User Administration (Управление пользователями) установите флажок Show Global Privileges (Отображать глобальные привилегии) и флажок Show Schema Object Privileges (Отображать привилегии для объектов базы данных).

4. Нажмите кнопку Apply (Сохранить), а затем кнопку Close (Закрыть).

После этого в главном окне MySQL Administrator появятся вкладка Global Privileges (рис. 5.5) с информацией о глобальных привилегиях пользователя и вкладка Schema Object Privileges (рис. 5.6) с информацией о привилегиях доступа к отдельным таблицам и столбцам.

Рис. 5.5. Вкладка Global Privileges

  • Читать дальше
  • 1
  • ...
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: