MySQL アカウント設定

Revised: 6th/Dec./2002

ユーザ管理

システムにおいて DB のデータというのは本質的なもので、ロジックを実装したアプリケーションよりもはるかに重要です。データの破損や不正な結果の出力に比べれば、利用するためのロジックエラー、システムの異常終了は軽微な障害に分類されます。データは重要なので、DBMS はセキュリティ上、ユーザ管理をきめ細かく行えるようになっています。

ユーザの追加や削除は、GRANT で存在しないユーザに特権 (privileges) を与えるか、直接 MySQL のユーザ管理テーブル (mysql.user) を編集します。推奨されているのは、存在しないユーザに対する GRANT コマンドの発行です。

GRANT

次のコードは、MySQL のドキュメント内に掲載されている例を改変したものです。ユーザ名 root/パスワードmysql で、管理DBmysqlにログインする例です。

C:\mysql\bin> mysql --user=root --password=mysql 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;

ここでは管理DBである mysql にログインし、三つのユーザを作成しています。

monty
最初の二つの GRANT 文 monty@localhost と monty@"%" によって、ユーザ monty はあらゆる特権が付与されており、任意の場所からログインが可能です。パスワードは 'some_pass' です。localhost で明示的に与えない場合は、システムが定義済みの anonymous が優先します。
admin
三つ目の GRANT 文は localhost からのみログイン可能な admin というユーザを定義しています。与えられている特権は RELOAD と PROCESS であり、パスワードが指定されていないため、パスワードなしでログイン可能です。
dummy
最後の GRANT 文では dummy ユーザが定義されています。localhost からのみログイン可能、システム全般にわたるような特権はなし (USAGE) です。システム全般にわたる特権を与えないようにするための、特殊な特権指定が USAGE であり、MySQL 内に作った特定のDBに関する特権だけ付与したい場合に使います。

ユーザ管理DBへの直接的変更

推奨する操作は、上で紹介済みの GRANT ですが、管理DBを直接更新することも可能です。GRANT の場合は MySQL が定義済みの安心できるスキームに則ることになりますが、DBに対してSQL文を発行して直接編集する場合は、設定を誤る恐れがあるので、MySQL の動作になれて、自信を持てる場合に限るべきです。

次のコードは、 MySQL のドキュメントからの抜粋に改変を加えたものです。

C:\mysql\bin> mysql --user=root --password=mysqlmysql
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.user テーブルに select 文を発行すれば見られますが、テーブル定義はパネルでも見られます。タスクトレーの信号機アイコンを右クリックして、"Show me" を選択、パネルを開きます。

  1. 上段左のDatabaseでmysqlを選ぶ。
  2. このDB内のテーブルが上段右側の Database Tables にリストされる。
  3. このDatabase Tables から user を選ぶ。
  4. 中段、下段に列属性定義と索引がリストされる。

パネルを閉じるには、パネル内の任意の位置を右クリックして "Hide me" を選択します。すると、パネルが閉じてタスクトレーに戻ります。

MySQL パネルでの mysql.user
図:MySQL パネルでの mysql DB の user テーブル

以上述べたユーザの追加は、MySQL サイトのマニュアル で閲覧できます。DL する場合は、 MySQL | Documentation | MySQL | Alternate から任意のフォーマットを選んでください。MySQL Manual (all on one page, ZIP) を解凍した場合は、解凍先ディレクトリの manual/manual.html#Adding_users で取得できます。

既存ユーザへのDBに対する特権の授与

現代的な RDBMS では、可能な操作を特権と呼び、特権の集合としてのユーザのロールを権限と呼びます。特権の束が権限です。特権は GRANT によって与え、 REVOKE によって取り上げます。

ヘルプ

マニュアルを参照するのはもちろんなのですが、コマンドラインのヘルプだけでも、あるとずいぶん便利です。

C:\mysql\bin>mysql --help

mysql  Ver 12.16 Distrib 4.0.5-beta, for Win95/Win98 (i32)
Copyright (C) 2002 MySQL AB
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL license
Usage: mysql [OPTIONS] [database]
  -?, --help          Display this help and exit.
  --auto-rehash       Enable automatic rehashing. One doesn't need to use
                      'rehash' to get table and field completion, but startup
                      and reconnecting may take a longer time. Disable with
                      --disable-auto-rehash.
  -A, --no-auto-rehash
                      No automatic rehashing. One has to use 'rehash' to get
                      table and field completion. This gives a quicker start of
                      mysql and disables rehashing on reconnect. WARNING:
                      options deprecated; use --disable-auto-rehash instead.
  -B, --batch         Print results with a tab as separator, each row on new
                      line. Doesn't use history file.
  --character-sets-dir=name
                      Directory where character sets are.
  --default-character-set=name
                      Set the default character set.
  -C, --compress      Use compression in server/client protocol.
  -D, --database=name Database to use.
  -e, --execute=name  Execute command and quit. (Output like with --batch).
  -E, --vertical      Print the output of a query (rows) vertically.
  -f, --force         Continue even if we get an sql error.
  -g, --no-named-commands
                      Named commands are disabled. Use \* form only, or use
                      named commands only in the beginning of a line ending
                      with a semicolon (;) Since version 10.9 the client now
                      starts with this option ENABLED by default! Disable with
                      '-G'. Long format commands still work from the first
                      line. WARNING: option deprecated; use
                      --disable-named-commands instead.
  -G, --named-commands
                      Enable named commands. Named commands mean this program's
                      internal commands; see mysql> help . When enabled, the
                      named commands can be used from any line of the query,
                      otherwise only from the first line, before an enter.
                      Disable with --disable-named-commands. This option is
                      disabled by default.
  -i, --ignore-spaces Ignore space after function names.
  --local-infile      Enable/disable LOAD DATA LOCAL INFILE.
  -b, --no-beep       Turn off beep on error.
  -h, --host=name     Connect to host.
  -H, --html          Produce HTML output.
  -X, --xml           Produce XML output
  --line-numbers      Write line numbers for errors.
  -L, --skip-line-numbers
                      Don't write line number for errors. WARNING: -L is
                      deprecated, use long version of this option instead.
  --no-tee            Disable outfile. See interactive help (\h) also. WARNING:
                      option deprecated; use --disable-tee instead
  -n, --unbuffered    Flush buffer after each query.
  --column-names      Write column names in results.
  -N, --skip-column-names
                      Don't write column names in results. WARNING: -N is
                      deprecated, use long version of this options instead.
  -O, --set-variable=name
                      Change the value of a variable. Please note that this
                      option is deprecated; you can set variables directly with
                      --variable-name=value.
  -o, --one-database  Only update the default database. This is useful for
                      skipping updates to other database in the update log.
  -p, --password[=name]
                      Password to use when connecting to server. If password is
                      not given it's asked from the tty.
  -W, --pipe          Use named pipes to connect to server.
  -P, --port=#        Port number to use for connection.
  --prompt=name       Set the mysql prompt to this value.
  -q, --quick         Don't cache result, print it row by row. This may slow
                      down the server if the output is suspended. Doesn't use
                      history file.
  -r, --raw           Write fields without conversion. Used with --batch
  -s, --silent        Be more silent.
  -S, --socket=name   Socket file to use for connection.
  -t, --table         Output in table format.
  -T, --debug-info    Print some debug info at exit.
  --tee=name          Append everything into outfile. See interactive help (\h)
                      also. Does not work in batch mode.
  -u, --user=name     User for login if not current user.
  -U, --safe-updates  Only allow UPDATE and DELETE that uses keys.
  -U, --i-am-a-dummy  Synonym for option --safe-updates, -U.
  -v, --verbose       Write more. (-v -v -v gives the table output format)
  -V, --version       Output version information and exit.
  -w, --wait          Wait and retry if connection is down.
  --connect_timeout=#
  --max_allowed_packet=#
  --net_buffer_length=#
  --select_limit=#
  --max_join_size=#

Default options are read from the following files in the given order:
C:\WINNT\my.ini C:\my.cnf
The following groups are read: mysql client
The following options may be given as the first argument:
--print-defaults        Print the program argument list and exit
--no-defaults           Don't read default options from any options file
--defaults-file=#       Only read default options from the given file #
--defaults-extra-file=# Read this file after the global files are read

Variables (--variable-name=value)
and boolean options {FALSE|TRUE}  Value (after reading options)
--------------------------------- -----------------------------
auto-rehash                       TRUE
character-sets-dir                (No default value)
default-character-set             (No default value)
compress                          FALSE
database                          (No default value)
vertical                          FALSE
force                             FALSE
named-commands                    FALSE
local-infile                      FALSE
no-beep                           FALSE
host                              (No default value)
html                              FALSE
xml                               FALSE
line-numbers                      TRUE
unbuffered                        FALSE
column-names                      TRUE
port                              3306
prompt                            mysql>
quick                             FALSE
raw                               FALSE
socket                            (No default value)
table                             FALSE
debug-info                        FALSE
user                              root
safe-updates                      FALSE
i-am-a-dummy                      FALSE
connect_timeout                   0
max_allowed_packet                16777216
net_buffer_length                 16384
select_limit                      1000
max_join_size                     1000000


Copyright © 2002 SUGAI, Manabu. All Rights Reserved.
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送