前回はMariaDBのインストールを行いました。
しかし、実際にアプリケーションでMariaDBを使うためにはユーザとデータベースをそれぞれ作る必要があります。
MariaDBには最初からrootというユーザが存在するので、rootを使わせる方法もあります。
しかし、rootはMariaDBの全権を持つユーザです。(CentOS8におけるrootと同じ立ち位置です)
万一、このユーザが乗っ取られでもしたらMariaDBを使う全てのアプリケーションがめちゃくちゃになります。
また、仮に全てのアプリケーションで同じデータベースを使わせると、使うテーブルの名前が被った際にこれまためちゃくちゃになります。
実際は、大抵のアプリケーションではテーブル名にプレフィックスを付けるので名前が被ることはほぼありませんが、同じデータベース内に大量のテーブルがあると管理も面倒なので、アプリケーション毎にデータベースを分けるのが普通です。
各アプリケーション用に作成したユーザに、そのアプリケーション用に作成したデータベースの権限を付けて運用を行うのが安全です。
ここではデータベースの作成・削除とユーザの作成・削除、そしてユーザへのデータベースの権限付与を行いたいと思います。
(この記事ではデータベースの中身はいじりません。もし直接データベースの中身をいじりたい場合は、SQL文について調べてみてください)
この記事で行うこと
1. MariaDBにログインする
データベースの作成・削除やユーザの作成・削除を行うには基本的にrootでログインする必要があります。
[root@localhost ~]# mariadb -u root -p
Enter password:
mariadb
: MariaDBにログインするためのコマンドです。なお、バージョンやインストールしたリポジトリによってはmysql
になっている場合があります。-u root
:-u
はログインするユーザを指定するためのオプションです。今回はrootでログインするということになります。-p
:-p
はパスワードを使ってログインする為のオプションになります。このオプションを付けると、パスワードを求めるメッセージが表示されます。
パスワード認証が必要なアカウントにこのオプション無しでログインしようとするとエラーが出てログインできません。
ちなみに、前回の初期設定でunix_socket認証を行っていた場合、rootで mariadb
と入力するだけでMariaDBのrootにログインすることが出来ます。
2. コマンド一覧
MariaDBにログインすると、コマンド入力の部分の表示が以下のように変わります。
MariaDB [(none)]>
なお、[]内のnoneは現在選択されているデータベースの名前が表示されます。
今回の内容ではデータベースを選択することは無いため、ずっと(none)のままですが。
また、詳しくは説明しませんがMariaDBで入力するコマンドはほとんどがSQL言語という言語のになります。
気になる方はSQL言語で調べてみてください。(ただし、言語というだけあってなかなか奥が深いです)
またMariaDB(に限らず、RDBMS全般)は、基本的に最後に;
を入力しないとコマンドを受け付けてくれないので、注意してください。( ;
を付けないと単に改行されます)
慣習的にコマンドは基本的に大文字で入力されますが、小文字でも問題なく使えます(大文字小文字を区別しない)のでこの記事では小文字で入力します。
元のCentOSの画面に戻りたい場合は exit
コマンドで戻ることが出来ます。
MariaDB [(none)]> exit;
2-1. データベースの一覧確認・作成・削除
データベースの一覧を確認するためのコマンドは以下です。
MariaDB [(none)]> show databases;
show
: 文字通り表示を行うコマンドです。databases
: 表示する対象としてデータベースを指定しています。
show
では他にも、テーブルの一覧などが見れます。この記事内でもユーザの権限確認のためにもう一度使います。
データベースを作成するコマンドは以下になります。
MariaDB [(none)]> create database wordpress;
create
: こちらも文字通り作成するコマンドです。database
: 作成する対象としてデータベースを指定しています。(表示と違い、単数形であることに注意してください。表示するのは複数ですが、作成するのは1つなのでコマンドに違いがあります)wordpress
: 作成するデータベースの名前を指定します。今回は、Wordpressで使う事を想定して、このような名前にしました。データベースの名称は基本的には任意で付けて大丈夫です。自分が分かりやすい名前を付けましょう。
create
も他に、テーブルの作成などでも使います。この記事内ではユーザ作成に使います。
データベースの削除は以下のコマンドになります。
MariaDB [(none)]> drop database wordpress;
drop
: 表やテーブルなどそのものを削除する場合に使うコマンドです。中身のデータだけ削除する場合はdelete
など別のコマンドを使います。(今回は使わないですが)database
: 削除の対象としてデータベースを指定しています。(こちらも単数形です)wordpress
: 削除するデータベースの名前を指定します。先程作ったwordpress
データベースを削除します。
なお、 drop
文で削除した物は別でバックアップなどを取っていない限り復旧できないので、削除の際は細心の注意を払ってください。
2-2. ユーザの一覧確認・作成・削除
ユーザの一覧を確認するためのコマンドは以下になります。
MariaDB [(none)]> select user from mysql.user;
select user
: 取得する列名を指定します。ここではUser
を指定しています。なお、*
を入力すると全ての列を取得できます。from mysql.user
: データの取得元を表します。今回はmysql
データベースのuser
テーブルからデータを取得しています。
ちょっと今までのコマンドと毛色が違いますね。これは典型的なSQL文です。
ユーザ一覧は mysql
データベースの user
テーブル内に格納されているので、そこから user
列(ユーザ名が格納されている列)のデータを取得したと言う物になります。
ユーザの作成のためのコマンドは以下になります
MariaDB [(none)]> create user wordpress identified by 'password';
create user
: データベースの作成と同じ感じですね。今回は作成対象としてユーザが指定されています。wordpress
: ユーザ名を指定します。こちらも今回はWordpressで使う事を念頭にwordpress
というユーザ名を指定しました。identified by 'password'
: パスワードを指定するオプションのような物です。今回は例示としてパスワードにpassword
を指定しました(実際には絶対にpassword
なんて分かりやすいパスワードを指定しないでください)。なお、指定するパスワードはシングルクォート「'
」で囲んであげる必要があります。
ユーザ削除のコマンドは以下になります
MariaDB [(none)]> drop user wordpress;
drop user
: データベースと同じ要領です。今回は削除対象としてユーザを指定しています。wordpress
: 削除するユーザ名です。
3-3. ユーザへのデータベースの権限付与・権限状況確認
権限付与のコマンドは以下になります。
MariaDB [(none)]> grant all privileges on wordpress.* to wordpress;
grant
: ユーザに権限を与えるコマンドです。all privileges
: 与える権限を指定します。all privileges
は全ての権限を与えるという指定です。他にもselect
(参照権限)、insert
(行の追加権限)など細かく権限を渡すことも出来ます。on wordpress.*
: どれの権限を与えるかを指定します。今回はwordpress
データベースの全てのテーブルを指定しています。他にもon *.*
と指定すると全てのデータベースの全てのテーブルになりますし、on wordpress.user
と指定するとwordpress
データベースのuser
という名前のテーブルのみになります。to wordpress
: 誰に権限を与えるかを指定します。今回はwordpress
というユーザを指定しています。テーブル名とユーザ名が同じで紛らわしいですが、結構良くあることなので慣れてください。
権限確認のコマンドは以下です。
MariaDB [(none)]> show grants for wordpress;
show grants
: データベース確認のときに使ったのと同じ要領です。今回は対象として grantつまり許可=権限が指定されています。for wordpress
: ユーザの指定です。今回はwordpress
を指定しています。
まとめ
今回はデータベースの作成と、ユーザの作成そしてユーザへのデータベース権限の付与について説明しました。
アプリケーションでデータベースを使うために設定するだけであればこれだけで十分ですが、例えばデータでちょっと不整合があって直接直したい等ということがあれば別途SQL文について勉強してみてください。