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

はじめ

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

すごく有益でないただの感想

GASをgithubに投稿するスクリプト

chrome.google.com

リモートリポジトリの削除やリベースは出来ないが大変便利。

個人情報の入ったコードを挙げる際はプライベートにするか、情報を別ファイルに隔離するかすること。

最近気になっていること

アイコンファインダー

iconfinder

www.iconfinder.com

 

DBpediaのアニメの項目

About: Anime

ニャンパス株式会社

nyampass.com

調査

www.buildinsider.net

ニュースサイト

New Technology, Science News, The Future Now | Popular Science

オラクルコード

Tokyo | Oracle Code 2017 | Live for the Code

ノッキング

d.hatena.ne.jp

ApacheCommmons

意外と使われていないけど便利なCommons - Logic Dice

StringUtils (Commons Lang 2.6 API)

取り除くについて

http://lsa.dialog.jp/qaboard/qab-show-answers.php?no=7653

マークダウンリンク漏れ

qiita.com

mametanuki.hateblo.jp

渚にて1959

http://www.nicovideo.jp/watch/sm6952259

 

 

Lispmemo

Lispで気になっていること、気になったことのメモ。 主にURLのリンク引用のほうが安全だと思ったが取り急ぎ
初心者の為のLisp環境 - 紫藤のWiki 第1回関西Lispユーザ会 - connpass
Anatomy Of LISP by John Allen — Reviews, Discussion, Bookclubs, Lists
モダンCommon Lisp第3回: SLIMEの使い方 基礎編 | ありえるえりあ