3-10. MySQLシステムの管理 2004年6月10日 大北高広 01T6010F ◆MySQLサーバー(mysqld)の起動ユーザー /etc/rc.d/rc.localファイルに、マシン起動時にmysqldが立ち上がるよう に設定した場合は、rootユーザーが起動したことになります。他のユー ザーで起動したい場合には、インストール時./configureで、prefixに読み 書きのできるディレクトリを指定します。手動でmysqldを起動した場合は、 そのときのログインユーザーが起動したことになります。 ◆rootのパスワード変更 最初に、MySQL起動時のパスワード設定をしましたが、このrootのパス ワードを変更する場合は、mysqladminという管理ユーティリティを使いま す。 シェルから次のコマンドを発行し、フルパスでmysqladmin1を指定したあ と、 -u root に続けて-pのオプションでパスワードを追加します。 $ / path_to_mysql / bin / mysqladmin -u root -p password “新 パスワード” Enter password : (現在のrootのパスワードを入力) MySQL起動後にSQLコマンドを使って、MySQLのrootのパスワードを 変更することも可能です。ユーザーのパスワード管理は、MySQLの中の mysqlというDBが行っています。その中の「user」というテーブルを変更 することで、パスワードを変更します。 mysql > use mysql; mysql > update user set password = password(“新パスワード”) - > where user = “root”; このあと、いったんexitしてMySQLを起動してみてください。もし新しい パスワードが機能せずにMySQLを起動できなければ、以下のシェルを 発行し、パスワードのテーブルを更新してください。 $ / path_to_mysql / bin / mysqladmin -u root -p reload ◆MySQLを起動できるユーザーの登録 MySQLを起動できるユーザーを新規登録します。mysqlというDBの中 のuserテーブルに対して、新しいユーザーを追加します。 mysql > use mysql; mysql > insert into user set user = “tanaka”, -> password = password(“12345”),host = “localhost”; Query OK, 1 row affected(0.00 sec) 設定後の新ユーザーはMySQLを起動することが可能です。デフォルト では、中にあるDBのうち「test」のみを使用することが可能です。 設定直後にこのユーザーでMySQLを起動できない場合は、パスワード テーブルの更新を行ってください。 $ /path_to_mysql/bin/mysqladmin -u root -p reload ◆ユーザーのパスワード変更 現在MySQLを起動しているユーザーのパスワードを変更する場合は、 ユーザー名を指定しないでSQL文を記述します。 mysql > set password = password(‘123’); 現在MySQLを起動していない別のユーザーのパスワードを変更する場 合、set passwordのあとに「for ユーザー名」を追加します。この場合は、 userテーブルに変更を加える権限が必要です。 mysql > set password for tanaka = password(‘123’); Query OK, 0 rows affected(0.00 sec) もしくは、mysqlの中のuserに対して、次のupdateのコマンドを発行します。 mysql > update mysql.user set password = password(“789”) -> where user = “tanaka”; 別のホストから接続するユーザーを設定する場合は、and host = “ホス ト名”を追加します。 いずれの場合も確認メッセージなしに処理が終了します。設定したパス ワードは必ず覚えておいてください。 「パスワードなし」に指定する場合は、次のように空文字を指定します。 mysql > set password = password(‘’); ◆ユーザーの権限を管理 ・権限を与える:grant 新しいユーザーを追加したら、そのユーザーに対してテーブルやコマン ドごとの使用権限を与えたり、権限を無効にしたりできます。そのために SQLコマンドの「grant」を使います。デフォルトではrootのみ使用できます。 mysql> grant select on ADDRESS_DB.JOBLIST_T to -> tanaka@localhost identified by “tanaka_pass”; Query OK, 0 rows affected(0.01 sec) 次のコマンドで、設定した権限を有効にします。 mysql> flush privileges; Query OK, 0 rows affected(0.00 sec) そして、ユーザーtanakaがADDRESS_DBにアクセスしてもテーブルは JOBLIST_Tしか見ることができません。 mysql > use ADDRESS_DB; Database changed mysql > show tables; +-------------------------------------+ | Tables_in_ADDRESS_DB | +-------------------------------------+ | JOBLIST_T | +-------------------------------------+ 2 rows in set(0.00 sec) 他のテーブルを使おうとすると、エラーが返ってきます。 mysql> select * from FRIENDS_T; ERROR 1142 : select command denied to user: ‘tanaka@localhost’ for table ‘FRIENDS_T’ 複数の権限を与える場合や複数のユーザーに対して同じ権限を与える 場合は、ユーザー名をカンマで区切って記述します。 mysql > -> -> -> grant select,insert on ADDRESS_DB.JOBLIST_T to tanaka@localhost identified by “tanaka_pass”,tanaka2@localhost identified by “tanaka2_pass”; 権限を与える際、「すべてのホストに対して」SQLコマンドを発行できる という指定は、” ”内にワイルドカード%を、ADDRESS_DBの「全部の テーブルに対して」という場合は、次のように * を使います。 mysql> grant select on ADDRESS_DB. * to “tanaka”; onのあとに*.*と指定すると、「すべてのDBのすべてのテーブルに対 して」の意味になる。 カラムごとの権限設定ですが、発行権限を与えるコマンドのあとに、( ) でカラム名を記述します。もしテーブルに対して発行権限のあるコマンドが あれば、そちらが優先されます。 mysql > grant select(JOB_C) on ADDRESS_DB.JOBLIST_T to -> tanaka3@localhost identified by “tanaka3_pass”; Query OK, 0 rows affected(0.00 sec) コマンド設定を反映させます。 mysql> flush privileges; Query OK, 0 rows affected(0.00 sec) ユーザtanaka3がADDRESS_DBのJOBLIST_Tに対して全カラムの全 レコードを表示させようとすると、カラムJOBID_Cへのselect権限がない 場合は、エラーが出ます。 mysql > select * from JOBLIST_T; ERROR 1143: select commnad denied to user: ‘tanaka3@localhost’ for column ‘JOBID_C’ in table ‘JOBLIST_T’ そして*を使わず、JOB_Cのみを指定してselectすると、JOB_Cの全 レコードを表示させることができます。 mysql > select JOB_C from JOBLIST_T; +-------------------------------------+ | JOB_C | +-------------------------------------+ | 営業販売 | | プログラマー | | デザイナー | | インストラクター | | ミュージシャン | +-------------------------------------+ 5 rows in set(0.00 sec) 指定できる権限の種類のほとんどがSQLコマンドと呼応しています。 ■特別な権限 all ・・・ 「コマンドレベルの権限」「管理レベルの権限」のすべてのコマンドが 利用できる権限を与える。rootと同じ権限になる。 ■コマンドレベルの権限 alter ・・・DBの持つテーブルの構造やデータ型を更新できる権限 create ・・・DBやテーブルを作成できる権限 delete ・・・テーブルの中のレコードを削除できる権限 drop ・・・DBやテーブルを削除できる権限 index ・・・テーブルのインデックスを作成・削除できる権限 insert ・・・テーブルに新しくレコードを追加できる権限 select ・・・テーブルからレコードを取り出せる権限 update ・・・テーブルのデータを更新できる権限 usage ・・・権限なしユーザーを作成する権限 ■管理レベルの権限 file ・・・MySQLサーバーがどのファイルへ読み書きするかを指定する権限。 この権限を与えるとかなりセキュリティレベルが下がるので注意。 grant ・・・ユーザーに対して権限を与えられる権限 process ・・・show processlistを使って全スレッドに関する情報を見たり、プ ロセスを切ったりすることだできる権限 reload ・・・reload,refresh,flushなどを使って、ログや管理テーブルなどを更 新したり0に戻したりする権限 shutdown ・・・MySQLサーバをシャットダウンする権限 ・ユーザーの権限を無効にする:revoke grant文で発行した権限を無効にするSQLコマンドです。grantの場合、 ユーザー名の前に指定するものはtoでしたが、revokeの場合はfromに なります。 mysql> revoke select, insert on ADDRESS_DB.JOBLIST_T from -> tanaka@localhost; Query OK, 0 rows affected(0.00 sec) 次のコマンドで、設定した権限を反映させます。 mysql> flush privileges; Query OK, 0 rows affected(0.00 sec) ◆ユーザー管理DBについて ユーザー名や権限は、mysqlというDBが管理しています。このDB の中にはいくつかのテーブルがあり、権限などの内容によって各テーブ ルが使用されます。 mysql> use mysql; Database changed mysql> show tables; mysql中のテーブルである、 columns_priv , db , func , host , tables_priv , user の名前が表示されます。 ・ユーザーを設定すると、userテーブルに追加されます。パスワードもこのテー ブルで管理されています。 ・hostテーブルでは、ホストごと ・dbテーブルではDBごと ・tables_privではテーブルごと ・columns_privではカラムごとに権限が管理されています。 mysql > select * from db; +--------+----------------------+------------+-----------------+ | Host | Db | User | Select_priv | +--------+----------------------+------------+-----------------+ | % | test | | Y | | % | test\_% | | Y | | % | ADDRESS_DB | tanaka | Y | +--------+----------------------+------------+-----------------+ ------------------+------------------+-----------------+------------------+---------------+ Insert_priv | updata_priv | Delete_priv | Create_priv | Drop_priv | ------------------+------------------+-----------------+------------------+---------------+ Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | N | N | N | N | ----------------+------------------+------------------+------------------+---------------+ -----------------+------------------------+----------------+---------------+ Grant_priv | References_priv | Index_priv | Alter_priv | -----------------+------------------------+----------------+---------------+ N | Y | Y | Y | N | Y | Y | Y | N | N | N | N | -----------------+------------------------+----------------+---------------+ 3 rows in set(0.00 sec) tebles_privを見てみます。これは、「テーブルごとの権限」に関するテー ブルです。 mysql > select * from tables_priv; +--------------+----------------------+-------------+-------------------+ | Host | DB | User | Table_name | +--------------+----------------------+-------------+-------------------+ | localhost | ADDRESS_DB | tanaka2 | JOBLIST_T | | localhost | ADDRESS_DB | tanaka3 | JOBLIST_T | +--------------+-----------------------+------------+-------------------+ -----------------------+-------------------------+-------------------+-------------------+ Grantor | Timestamp | Table_priv | Column_priv | -----------------------+--------------------------+------------------+-------------------+ root@localhost | 20000811104214 | Select,Insert | | root@localhost | 20000811100132 | | Select | -----------------------+--------------------------+-------------------+-------------------+ 2 rows in set(0.00 sec) 各カラムに対して設定できる権限は、select, insert, update, referencesの4つです。 columns_privを見てみます。 mysql > select * from columns_priv; +--------------+----------------------+-------------+-------------------+-----------------------+ | Host | DB | User | Table_name | Columns_name | +--------------+----------------------+-------------+-------------------+-----------------------+ | localhost | ADDRESS_DB | tanaka3 | JOBLIST_T | JOB_C | +--------------+-----------------------+------------+-------------------+-----------------------+ --------------------------+-------------------+ Timestamp | Column_priv | --------------------------+-------------------+ 20000811100132 | Select | --------------------------+-------------------+ 1 row in set(0.00 sec) 権限に関する詳細は、次のURLを参照してください。 http://www.softagency.co.jp/mysql/TIPS/permission.html ◆情報を見る: show showコマンドを使って、 show index from TABLE01; ・・・TABLE01上で作成されたインデックスが表示さ れる show processlist; ・・・サーバーのスレッド情報を表示 show status; ・・・現在の接続状況 show variables; ・・・サーバーに関する変数とその値を表示
© Copyright 2024 ExpyDoc