1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

特定データベースの全権限を持つユーザの作成(RDS for MySQL 5.6)

Last updated at Posted at 2018-10-17

ちょっとひっかかかったのでメモ.

最初に完成形

username, databasename, passwordの部分を書き直して利用します。

# username,password,databasenameを置き換える
# ユーザ作成
CREATE USER 'username'@'%' IDENTIFIED BY 'password' ;

# 権限付与
GRANT
    SELECT,
    INSERT,
    UPDATE,
    DELETE,
    CREATE,
    DROP,
    REFERENCES,
    INDEX,
    ALTER,
    CREATE TEMPORARY TABLES,
    LOCK TABLES,
    EXECUTE,
    CREATE VIEW,
    SHOW VIEW,
    CREATE ROUTINE,
    ALTER ROUTINE,
    TRIGGER
ON  `databasename`.* 
TO 'username'@'%'
;

# [OPTION]SQL実行前に実行されるスクリプトを設定(パラメタグループのinit_commandで指定)している場合はそのスクリプトの実行権限(EXECUTE)を付与
# 以下では古いRDS用に設定してい「UTCを日本時間にする」スクリプトの実行権限を付与
GRANT EXECUTE ON PROCEDURE `mysql`.`adjust_time_zone` TO 'username'@'%';

# ユーザ一覧を表示
SELECT user, host FROM mysql.user;

ひっかかったところ

2つあって、1つは権限付与時のIncorrect usage of DB GRANT and GLOBAL PRIVILEGESエラー。
もう1つはSQL実行時の**Access Denied (init_command)**エラー。

権限エラーの原因と対処

公式サイトに記載されている権限一覧表の「コンテキスト列」の値が「サーバ管理」となっている権限はデータベース単位では付与できません。例えば ALL, SHOW DATABASESなどです。

MySQL :: MySQL 5.6 リファレンスマニュアル :: 6.2.1 MySQL で提供される権限

RDSのマスタユーザの権限を元に作成しようとしたので余計な権限が付与されていた。というオチでした。汗

RDS MySQL でマスターユーザー権限を持つユーザーの新規登録

SQL実行時エラー(init_command)

古いRDSではデータベースサーバの時刻がUTCとなっていて恒久的な設定変更ができませんでした。
このためパラメタグループのinit_commandに時刻調整用スクリプトを設定するというハックが必要でした。

このスクリプトの実行権限が付与されていなかったのが原因でした。

GRANT EXECUTE ON PROCEDURE `mysql`.`adjust_time_zone` TO 'username'@'%';
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?