第32回:Oracle Database技術者向けMySQL超入門-ユーザー作成・権限付与編

技術者向け・データベースの技術情報発信

「Oracle Database技術者向けMySQL超入門」シリーズでは、MySQLの機能について、Oracle Databaseと比較しながらご紹介します。

前回の「ログイン編」に続き、今回はユーザーの作成方法・権限の付与方法についてご説明します。
※OSはLinuxをベースにしています。

1.Oracle(SQL*Plus)のユーザー作成方法とユーザー情報確認

SYSDBA権限でCDBへログインします。

$ sqlplus <ユーザー名>/<パスワード>

Oracleのバージョンが 12c以降の場合、ユーザーを作成したいPDBへアクセスします。

SQL> alter session set container = ;

以下のコマンドを実行し、ユーザーを作成します。

SQL> create user <ユーザー名> identified by "<パスワード>";

以下コマンドで作成してあるユーザーを確認することができます。

SQL> select username from dba_users where username = '<ユーザー名>';

2.MySQL(mysqlコマンド)のユーザー作成方法とユーザー情報確認

rootユーザーでMySQLへログインします。

$ mysql -u root -h <ホスト名> -p

以下のコマンドを実行し、ユーザーを作成します。
1のOracleと異なり、ユーザー名だけでなく接続元ホストも指定する必要があります。

mysql> create user '<ユーザー名>'@'<ホスト名>' identified by '<パスワード>';

以下コマンドで作成してあるユーザーを確認することができます。

mysql> select user,host from mysql.user where user = '<ユーザー名>';

3.Oracle(SQL*Plus)のユーザー権限付与とユーザー権限確認

作成したユーザーで接続・スキーマ作成等の基本的な操作を実行するのに権限を付与する必要があります。
Oracleは上記の基本操作を実行するために必要な権限がセットになっているロールが事前定義されています。

今回は以下の2点を紹介します。
・CONNECT…ユーザーのデータベースへの接続を可能にします。
・RESOURCE…スキーマ・オブジェクトの作成・変更・削除を可能にします。

以下のコマンドでロールを付与できます。

SQL> GRANT CONNECT TO <ユーザー名>; SQL> GRANT RESOURCE TO <ユーザー名>; 

以下コマンドで、ユーザーに付与してあるロールを確認することができます。

SQL> select * from dba_role_privs where grantee = '<ユーザー名>' ;

各ロールに付与されているシステム権限の詳細は、下記で確認できます。

SQL> select * from dba_sys_privs where GRANTEE in ('CONNECT','RESOURCE');

4.MySQL(mysqlコマンド)のユーザー権限付与とユーザー権限確認

MySQLは、以下のようなレベルで権限を付与することができます。

  • 全データベース:grant <権限> on *.* to ‘<ユーザー名>’@’<ホスト名>’;
  • 各データベース:grant <権限> on <データベース名>.* to ‘<ユーザー名>’@’<ホスト名>’;
  • 各テーブル:grant <権限> on <データベース名>.<テーブル名> to ‘<ユーザー名>’@’<ホスト名>’;
  • 各カラム:grant <権限> (カラム1, カラム2, …) on <データベース名>.<テーブル名> to ‘<ユーザー名>’@’<ホスト名>’;

全データベースへcreate権限・select権限・insert権限・update権限・delete権限を適用する場合は以下のようにコマンドを実行します。

mysql> grant create,select,insert,update,delete on *.* to '<ユーザー名>'@'<ホスト名>';

以下コマンドでユーザーに付与してある権限を確認することができます。

mysql> show grants for '<ユーザー名>'@'<ホスト名>';

5.最後に

今回は簡易的なユーザーの作成方法および権限の付与・確認方法についてご紹介しました。

コマンドの形式は大きく変わりませんが、OracleとMySQLではユーザー名の記述の仕方が異なりますので、混同しないように注意しましょう。