USAGEについて

Usageの意味は使用することと記述した記事をエントリした。
その中に、MySQLの構文の意味としては、使用権限を与えるのような言葉を記述したが、間違った認識をしていたことが判明した。

以下がUSAGEを使用したGRANT命令の構文である。

GRANT USAGE databaseName.* to UserName  

意味は、no privilege 権限なしと同義である。

感想

正反対の機能を持たせる構文であることに戸惑いを隠せないが間違いを訂正しながら生きていくことは大事。
間違ったことを書かかないようにしっかりしようと思います。

あと、勉強になったです。

新しい英単語【USAGE】

背景

以下の権限の確認をするための構文で出会った単語 grantは承認する。与えるなどを意味として持つ語で、似た言葉にaward、gift、agree 、付与する 例:grant permission 権限を(譲渡、)与える。

GRANT USAGE ON *.* TO 'student'@'%'    

分からない語があったので調査
以下の辞書より引用
http://ejje.weblio.jp/conten t/usage

不可算名詞
a使うこと,使用; 利用.
b使用法,用い方,取り扱い(方).
This instrument will not stand rough usage. この器具は荒っぽい使い方に耐えられそうもない.
2不可算名詞 [具体的には 可算名詞] (言語の)慣用法,語法.
modern English usage 現代英語の用法.
3不可算名詞 [具体的には 可算名詞] 慣習,慣行,慣例.

まとめ

USAGEは使用という意味
studentが(データベースなどの)使用することを認めるのような意味にであること
訂正:正しくは権限なしを明示的に示すものでしたです。
以上今回は短いけれどここまでで終了です。

以前はパスワードカラムがあったという事実

https://yoku0825.blogspot.jp/2015/03/mysql-576mysqluser.html  

mysql> SELECT user, host, password FROM mysql.user;
+--------+--------------+-------------------------------------------+
| user   | host         | password                                  |
+--------+--------------+-------------------------------------------+
| root   | localhost    | *2AF14BD74D8A4FDB580D3208C0092BE75EE95B75 |
| root   | dd51374b09e7 | *2AF14BD74D8A4FDB580D3208C0092BE75EE95B75 |
| root   | 127.0.0.1    | *2AF14BD74D8A4FDB580D3208C0092BE75EE95B75 |
| root   | ::1          | *2AF14BD74D8A4FDB580D3208C0092BE75EE95B75 |
| fabric | %            | *BA4015F6659FB2A40463B9728083556079C45EE7 |
| app    | %            | *07C85F556938C8B845F807BCD7EA0B7A296072DC |
+--------+--------------+-------------------------------------------+
6 rows in set (0.11 sec)

バージョンアップでなくなった模様です。

 

https://dev.mysql.com/doc/refman/5.7/en/grant-tables.html


"The
user table plugin, Password, and authentication_string columns store authentication plugin and credential information. In MySQL 5.7.6, the Password column was removed and all credentials are stored in the authentication_string column. "

MySQL5.7が境目

www.slideshare.net

 

 

 

 

マークダウンでテーブルを記述

はじめ

mysqlで出力されるテーブルをマークダウンで記述すると下記のように表記がぶれてしまい使えないことが判明。

+———+———————–+——————+——————-+
| user | password_last_changed | password_expired | password_lifetime |
+———+———————–+——————+——————-+
| student | 2017-05-14 02:26:18 | N | NULL |
+———+———————–+——————+——————-+

 解決案

解決案も模索していると、マークダウンでテーブル表記することができると判明。

早速試すことに。記述のルールは以下。

Github
https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet
Qiita
http://qiita.com/tbpgr/items/989c6badefff69377da7
はてな
http://seeku.hateblo.jp/entry/2013/05/24/080851

| Left align | Right align | Center align |
|:———–|————:|:————:|
| This | This | This |
| column | column | column |
| will | will | will |
| be | be | be |
| left | right | center |
| aligned | aligned | aligned |

  1. 列の区切りは〈|〉で記述 
  2. 1行目にヘッダー情報を記述
  3. 2行目にセンターかレフトかライトかを〈:〉で表現
  4. 2行目に 〈-〉で文字数を表現

表記乱れ申しわけです。

適応

以下に適応しました。

user password_last_changed password_expired password_lifetime
student 2017-05-14 02:26:18 N NULL

きれいなテーブルの完成。

MySQLでパスワードを表示する際に陥ったこと。

背景

以前ユーザを作成する際に確認方法として以下のselect構文を使用してmysql.user(mysqlデータベース内のuserテーブル)の中からhostとuserとpasswordを表示させることで確認できるとしたが、今回改めて下記の構文を使用したところうまく表示されなかった。

状況

SELECT USER,HOST,PASSWORD from mysql.user  

下記がエラーメッセージ

ERROR 1054 (42S22): Unknown column ‘password’ in ‘field list’

そんなカラム無いよとのことらしい。

おかしいな紹介されていたから無いはず無いのだけどなと思ったが、とりあえずuserテーブルにどんな属性が設定されているか確認することにした。
あまり詳しくない僕はとりあえず、select文ですべて表示することにした。

select * from mysql.user from user ="student";  

対応方針

select文で表示するとにした。 上記で表示したところカラムが多すぎて画面に収まらず横に長いディスプレイが欲しくなった。
とりあえず、上記で表示された(*1)カラム名の中にpasswordと言うかラムが存在するか目視で確認したところ数件発見

参照先

| password_expired | password_last_changed | password_lifetime |

みたところ全部違いそうだったけれど一応意味のメモ
password_expired:期限切れのパスワード
password_last_changed:最終更新日
password_lifetime:パスワードが有効な期間のサイクル
https://dev.mysql.com/doc/refman/5.7/en/grant-tables.html
URL先を参照してもpasswordというかラムは存在していない。

ユーザ情報の中のセキリティに分類されている列の抜粋

リンク先のセキュリティ情報という分類の中にも存在していなかった。

Security columns ssl_type
ssl_cipher
x509_issuer
x509_subject
plugin
authentication_string
password_expired
password_last_changed
password_lifetime
account_locked

上記の中で該当しそうなカラムは、authentication_stringかなと思い確認してみることに。
こちらは、セキュリティの認証情報が格納されているカラムとのこと。 passwordそのものでなく、passwordをhash化したデータが格納されている。 そのため、authentication_stringという名を(*2)翳しているのかなとおもいました。
非可逆なカラムで他者からは見えない、セキリティ上当然の使用であることを恥ずかしながら今更知ったというところでした。

passwordが文字列に含まれる列名のテーブルの参照結果

一旦下記にstudentの情報を吐き出す。

select user,password_last_changed ,password_expired,password_lifetime from mysql.user where user = 'student';  
user password_last_changed password_expired password_lifetime
student 2017-05-14 02:26:18 N NULL

passwordのハッシュ化された列名の確認

authentication_string は以下

select user,password_last_changed ,password_expired,password_lifetime ,authentication_string  from mysql.user where user = 'student';  
user password_last_changed password_expired password_lifetime authentication_string
student 2017-05-14 02:26:18 N NULL *5C9A4E4AB5E34FC99610372BA8D061F994CFFB94

テーブルが持つ属性の確認方法

今回はselect文でどんな属性情報がテーブルに登録されているか確認したが、この記録をするために調べたところ、別途構文が存在していること知る。以下がそれです。

use 'database_name';  
desc 'table_name';

上記で簡単に属性情報を閲覧することができる。

以下はuserテーブルに登録されているカラム名の一覧と型および制約情報などのviewtableです。

Field Type Null Key Default Extra
Host char(60) NO PRI
User char(32) NO PRI
Select_priv enum(‘N’,‘Y’) NO N
Insert_priv enum(‘N’,‘Y’) NO N
Update_priv enum(‘N’,‘Y’) NO N
Delete_priv enum(‘N’,‘Y’) NO N
Create_priv enum(‘N’,‘Y’) NO N
Drop_priv enum(‘N’,‘Y’) NO N
Reload_priv enum(‘N’,‘Y’) NO N
Shutdown_priv enum(‘N’,‘Y’) NO N
Process_priv enum(‘N’,‘Y’) NO N
File_priv enum(‘N’,‘Y’) NO N
Grant_priv enum(‘N’,‘Y’) NO N
References_priv enum(‘N’,‘Y’) NO N
Index_priv enum(‘N’,‘Y’) NO N
Alter_priv enum(‘N’,‘Y’) NO N
Show_db_priv enum(‘N’,‘Y’) NO N
Super_priv enum(‘N’,‘Y’) NO N
Create_tmp_table_priv enum(‘N’,‘Y’) NO N
Lock_tables_priv enum(‘N’,‘Y’) NO N
Execute_priv enum(‘N’,‘Y’) NO N
Repl_slave_priv enum(‘N’,‘Y’) NO N
Repl_client_priv enum(‘N’,‘Y’) NO N
Create_view_priv enum(‘N’,‘Y’) NO N
Show_view_priv enum(‘N’,‘Y’) NO N
Create_routine_priv enum(‘N’,‘Y’) NO N
Alter_routine_priv enum(‘N’,‘Y’) NO N
Create_user_priv enum(‘N’,‘Y’) NO N
Event_priv enum(‘N’,‘Y’) NO N
Trigger_priv enum(‘N’,‘Y’) NO N
Create_tablespace_priv enum(‘N’,‘Y’) NO N
ssl_type enum(‘’,‘ANY’,‘X509’,‘SPECIFIED’) NO
ssl_cipher blob NO NULL
x509_issuer blob NO NULL
x509_subject blob NO NULL
max_questions int(11) unsigned NO 0
max_updates int(11) unsigned NO 0
max_connections int(11) unsigned NO 0
max_user_connections int(11) unsigned NO 0
plugin char(64) NO mysql_native_password
authentication_string text YES NULL
password_expired enum(‘N’,‘Y’) NO N
password_last_changed timestamp YES NULL
password_lifetime smallint(5) unsigned YES NULL
account_locked enum(‘N’,‘Y’) NO N

 気づき

上記のテーブルを見て今までboolean型bit(1)を使用していたけれどenum(‘N’,‘Y’)を使用していることに気づきました。
mysqlに標準で付いているテーブルに登録されている属性が列挙型のY/Nになっているのでそちらの方のメリットデメリットを再考する必要があるなと感じました。
まだまだわからないことがたくさんあるので学んでいきたい。

今後の課題

  • boolean型採用時の最適な型についての調べる。
  • plugin の  mysql_native_passwordについても調べる。
  • password_last_changedの単位を調べる。
注釈

(1)カラム名 :属性、カラム名、属性名、列名、などの表記の乱れが文章中に存在しています。ネット上の情報を見るとfield name やフィールド名などともいうそうでどれを使えば通じるのかイマイチよくわからないのが現状です。
(
2)翳して:その名を付けた器などという風に、通り名(?)がついた状態の時に使う言葉だと思っていましたが、辞書で調べてみたらその意味は記述されていませんでした。

①手に持って頭上に高くかかげる。 「団旗を-・して進む」 ②物の上方におおいかけるように手をさしだす。 「火鉢に手を-・す」 ③光などをさえぎるために、手などを額のあたりに持っていっておおう。 「小手を-・す」出典|三省堂大辞林 第三版について | 情報

https://kotobank.jp/word/%E7%BF%B3%E3%81%99-461674
すこし頑固なので表記を変えず使ってみました。
イメージした用例は、正宗の名を翳(かざ)した名刀などです。
許されがたいかも  

既存のMySQLユーザにパスワードを追加する

既存のMySQLユーザにパスワード設定する方法は以下の構文で可能

SET PASSWORD 'something password';  
SET PASSWORD for <user> = 'some password';  

上のコマンドは現在ログイン中のユーザのパスワードの設定を変更する方法 下のコマンドはユーザを指定してパスワードの設定を変更する方法

接続先ホストの制限を設けた状態でパスワードを設定することもできる以下がそのコマンド

SET PASSWORD for <user@localhost.com> = 'some password';

www.dbonline.jp