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

  • Форум по MySQL

  • Статьи по MySQL

  • Вопросы по MySQL

  • MySQL.com


  • Базы данных

  • MySQL

  • PostgreSQL


  • PHP конференция 2005
    Подробности!

    4.3.5. Добавление новых пользователей в MySQL

    Пользователей можно добавлять двумя различными способами - при помощи команды GRANT или напрямую в таблицы назначения привилегий MySQL. Предпочтительнее использовать команду GRANT - этот способ проще и дает меньше ошибок. See Раздел 4.3.1, «Синтаксис команд GRANT и REVOKE».

    Существует также большое количество программ (таких как phpmyadmin), которые служат для создания и администрирования пользователей.

    В приведенных ниже примерах демонстрируется, как использовать клиент mysql для задания новых пользователей. В примерах предполагается, что привилегии установлены в соответствии с принятыми по умолчанию значениями, описанными в предыдущем разделе. Это означает, что для внесения изменений на том же компьютере, где запущен mysqld, необходимо подсоединиться к серверу как пользователь MySQL root, и у пользователя root должна быть привилегия INSERT для базы данных mysql, а также административная привилегия RELOAD. Кроме того, если был изменен пароль пользователя root, его необходимо указать здесь для команды mysql.

    Новых пользователей можно добавлять, используя команду GRANT:

    shell> mysql --user=root mysql
    mysql> GRANT ALL PRIVILEGES ON *.* TO monty@localhost
        ->     IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
    mysql> GRANT ALL PRIVILEGES ON *.* TO monty"%"
            -> IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
    mysql> GRANT RELOAD,PROCESS ON *.* TO admin@localhost;
    mysql> GRANT USAGE ON *.* TO dummy@localhost;
    

    Эти команды GRANT создают трех новых пользователей:

    • monty

      Полноценный суперпользователь - он может подсоединяться к серверу откуда угодно, но должен использовать для этого пароль some_pass. Обратите внимание на то, что мы должны применить операторы GRANT как для monty@localhost, так и для monty@"%". Если не добавить запись с localhost, запись анонимного пользователя для localhost, которая создается при помощи mysql_install_db, будет иметь преимущество при подсоединении с локального компьютера, так как в ней указано более определенное значение для поля Host, и она расположена раньше в таблице user.

    • admin

      Пользователь, который может подсоединяться с localhost без пароля; ему назначены административные привилегии RELOAD и PROCESS. Эти привилегии позволяют пользователю запускать команды mysqladmin reload, mysqladmin refresh и mysqladmin flush-*, а также mysqladmin processlist. Ему не назначено никаких привилегий, относящихся к базам данных (их можно назначить позже, дополнительно применив оператор GRANT).

    • dummy

      Пользователь, который может подсоединяться к серверу без пароля, но только с локального компьютера. Все глобальные привилегии установлены в значение 'N'-тип привилегии USAGE, который позволяет создавать пользователей без привилегий. Предполагается, что относящиеся к базам данных привилегии будут назначены позже.

    Можно напрямую добавить точно такую же информацию о пользователе при помощи оператора INSERT, а затем дать серверу команду перезагрузить таблицы назначения привилегий:

    shell> mysql --user=root mysql
    mysql> INSERT INTO user VALUES('localhost','monty',PASSWORD('some_pass'),
        ->		'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
    mysql> INSERT INTO user VALUES('%','monty',PASSWORD('some_pass'),
        ->		'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
    mysql> INSERT INTO user SET Host='localhost',User='admin',
        ->		 Reload_priv='Y', Process_priv='Y';
    mysql> INSERT INTO user (Host,User,Password)
        ->		 VALUES('localhost','dummy','');
    mysql> FLUSH PRIVILEGES;
    

    В зависимости от версии MySQL в примере, приведенном выше, может указываться различное количество значений 'Y' (в версиях до Version 3.22.11 было меньше столбцов привилегий). Для пользователя admin используется более удобочитаемый расширенный синтаксис команды INSERT, который доступен начиная с версии 3.22.11.

    Обратите внимание: чтобы создать суперпользователя, необходимо создать запись таблицы user с полями привилегий, установленными в значение 'Y'. Нет необходимости задавать значения в записях таблиц db или host.

    Столбцы привилегий в таблице user в последнем операторе INSERT (для пользователя dummy) не были заданы явно, поэтому данным столбцам был присвоено принятое по умолчанию значение 'N'. Точно так же действует команда GRANT USAGE.

    В приведенном ниже примере добавляется пользователь custom, который может подсоединяться с компьютеров localhost, server.domain и whitehouse.gov. Он хочет получать доступ к базе данных bankaccount только с компьютера localhost, к базе данных expenses - только с whitehouse.gov, и к базе данных customer - со всех трех компьютеров, а также использовать пароль stupid при подсоединении со всех трех компьютеров.

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

    shell> mysql --user=root mysql
    mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
        -> 	   ON bankaccount.*
        -> 	   TO custom@localhost
        ->     IDENTIFIED BY 'stupid';
    mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
        ->     ON expenses.*
        ->     TO [email protected]
        ->     IDENTIFIED BY 'stupid';
    mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
        ->     ON customer.*
        ->     TO custom@'%'
        ->     IDENTIFIED BY 'stupid';
    

    Привилегии для пользователя custom мы назначаем потому, что этот пользователь хочет получать доступ к MySQL как с локального компьютера через сокеты Unix, так и с удаленного компьютера whitehouse.gov через протокол TCP/IP.

    Чтобы задать привилегии пользователя путем непосредственного внесения изменений в таблицы назначения привилегий, выполните следующие команды (обратите внимание на команду FLUSH PRIVILEGES в конце примера):

    shell> mysql --user=root mysql
    mysql> INSERT INTO user (Host,User,Password)
        -> VALUES('localhost','custom',PASSWORD('stupid'));
    mysql> INSERT INTO user (Host,User,Password)
        -> VALUES('server.domain','custom',PASSWORD('stupid'));
    mysql> INSERT INTO user (Host,User,Password)
        -> VALUES('whitehouse.gov','custom',PASSWORD('stupid'));
    mysql> INSERT INTO db
        -> (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
        -> Create_priv,Drop_priv)
        -> VALUES
        -> ('localhost','bankaccount','custom','Y','Y','Y','Y','Y','Y');
    mysql> INSERT INTO db
        -> (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
        -> Create_priv,Drop_priv)
        -> VALUES
        -> ('whitehouse.gov','expenses','custom','Y','Y','Y','Y','Y','Y');
    mysql> INSERT INTO db
        -> (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
        -> Create_priv,Drop_priv)
        -> VALUES('%','customer','custom','Y','Y','Y','Y','Y','Y');
    mysql> FLUSH PRIVILEGES;
    

    Первые три оператора INSERT добавляют в таблицу user записи, которые позволят пользователю custom подключаться с различных компьютеров с указанным паролем, но не дают ему никаких привилегий (все привилегии установлены в принятое по умолчанию значение 'N'). Следующие три оператора INSERT добавляют записи в таблицу db, в которой назначаются привилегии для пользователя custom по отношению к базам данных bankaccount, expenses и customer, но только если доступ осуществляется с определенных компьютеров. Как обычно, после внесения изменений непосредственно в таблицы назначения привилегий серверу необходимо дать команду на перезагрузку этих таблиц (при помощи FLUSH PRIVILEGES), чтобы внесенные изменения вступили в силу.

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

    mysql> GRANT ...
        ->	   ON *.*
        ->     TO myusername"%.mydomainname.com"
        ->     IDENTIFIED BY 'mypassword';
    

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

    mysql> INSERT INTO user VALUES ('%.mydomainname.com', 'myusername',
        ->		   PASSWORD('mypassword'),...);
    mysql> FLUSH PRIVILEGES;
    
     
    © 1997-2005 PHP Club Team
    Rambler's Top100