MySQL--ユーザーと権限の取得

はじめに: 

前の記事では、私は様々なSQL構文の使用を紹介します、あなたはDBAの言葉でない場合は、この記事では、知識を関連するMySQLユーザと権限に焦点を当てる、通常は多くの使用ではないかもしれないが、また多くの利点の下で理解すること。

1.ユーザーを作成します。

公式推奨作成の構文は次のとおりです。

CREATE USER [IF NOT EXISTS]
    user [auth_option] [, user [auth_option]] ...
    [REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
    [WITH resource_option [resource_option] ...]
    [password_option | lock_option] ...

user:
    (see Section 6.2.4, “Specifying Account Names”)

auth_option: {
    IDENTIFIED BY 'auth_string'
  | IDENTIFIED WITH auth_plugin
  | IDENTIFIED WITH auth_plugin BY 'auth_string'
  | IDENTIFIED WITH auth_plugin AS 'auth_string'
  | IDENTIFIED BY PASSWORD 'auth_string'
}

tls_option: {
   SSL
 | X509
 | CIPHER 'cipher'
 | ISSUER 'issuer'
 | SUBJECT 'subject'
}

resource_option: {
    MAX_QUERIES_PER_HOUR count
  | MAX_UPDATES_PER_HOUR count
  | MAX_CONNECTIONS_PER_HOUR count
  | MAX_USER_CONNECTIONS count
}

password_option: {
    PASSWORD EXPIRE
  | PASSWORD EXPIRE DEFAULT
  | PASSWORD EXPIRE NEVER
  | PASSWORD EXPIRE INTERVAL N DAY
}

lock_option: {
    ACCOUNT LOCK
  | ACCOUNT UNLOCK
}

通常、私たちは共通の構文を作成することです:

CREATE USER <用户名> [ IDENTIFIED ] BY [ PASSWORD ] <口令>

:構文は次のとおりです。
1)<ユーザー名>は
フォーマット「USER_NAME」@「host_nameの」ユーザーアカウントを作成するように指定します。ここではuser_name、ユーザー名であるhost_nameホストの名前は、ユーザーがMySQLを接続したときにどこのホスト名は、それがあります。作成中の場合は、ユーザーアカウントの唯一の指定された名前が、「%」に、ホスト名のデフォルトをホスト名を指定していない、ホストのグループは述べています。
2)パスワードの
プレーンテキストのパスワードが設定されている場合、あなたは無視する必要がある、つまり、ハッシュされたパスワードを指定するオプションPASSWORDクリアテキストでパスワードを設定したい、とわからない場合PASSWORD()関数は、次のことができ、パスワードにハッシュ値を返します。キーワードを文で指定したパスワードハッシュ値を設定しますが、キーワードを追加する必要がありますPASSWORD
3)IDENTIFIED BY句
アカウントのパスワードに対応するユーザを指定し、パスワードなしのユーザーアカウント場合は、この句を省略することができます。
4)<パスワード>
指定したユーザーアカウントのパスワード、IDENTIFIED BYキーワードまたはPASSWOEDキーワードの後。所与の平文パスワード値は、文字と数字とすることができる、または得られるPASSWORD()関数によってハッシュ値であってもよいです。

次の点に注意しなければならないCREATE USER文で使用します。

  • あなたは、ユーザーのパスワードを使用して、CREATE USER文を指定しない場合、MySQLは、ユーザーがパスワードでログインできるようにすることはできませんが、セキュリティの観点から、これは推奨されません。
  • MySQLのMySQLのデータベースのINSERT権限を持っているか、グローバルなユーザー権限を作成する必要がありCREATE USER文を使用します。
  • あなたは、CREATE USER文使用してユーザーアカウントを作成した後、ユーザ・テーブル・システム自体のMySQLデータベースに新しいレコードを追加します。すでに存在するアカウントを作成した場合は、実行時に、文のエラーが発生します。
  • 新しく作成された小型の権限を持つユーザ。彼らは、そのようなので、上のすべてのストレージエンジンと文字セットとの一覧を照会するには、SHOW文を使用するなどの権限を必要としないだけで動作が可能、MySQLの上でログインすることができます。
  • 2人のユーザーが同じユーザー名と異なるホスト名を使用している場合、MySQLは別のユーザーとしてそれらを参照してください、そして両方のユーザーの権限の異なるセットの割り当てを可能にします。

例:

#注意:test_user@'%' 和 test_user@'localhost' 是两个不同的用户
CREATE USER 'test_user'@'%' identified by '123456';
CREATE USER 'test_user'@'localhost' identified by '123456789';

2.ユーザーを変更します

、名前の変更、パスワードの変更、ロックまたはユーザーのロックを解除するなどのユーザー情報を変更します。以下は、すべての人のためのケースでこれらの使用のデモンストレーションを行います。

#重命名用户
RENAME USER 'test_user'@'%' to 'test'@'%';

#修改密码
ALTER USER 'test'@'%' identified by '123456789';

#锁定或解锁用户
ALTER USER 'test'@'%' ACCOUNT LOCK;
ALTER USER 'test'@'%' ACCOUNT UNLOCK;

3.ユーザーを削除します。

MySQLデータベースは、1つ以上のユーザーアカウントと関連付けられている権限を削除するには、DROP USER文を使用することができます。
公式には、構文をお勧めします:

DROP USER [IF EXISTS] user [, user] ...

以下の点に注意してくださいDROP USER文を使用します。

  • DROP USER文は、一個の以上のMySQLアカウントを削除すると、元の権限を撤回するために使用することができます。
  • MySQLでMySQLデータベースが許可をDELETEまたはグローバルUSERのCREATEを持たなければなりませんDROP USER文を使用します。
  • 明示的にホスト名のデフォルトは、アカウントのホスト名を与えない場合は、DROP USER文を使用した「%。」

4.ユーザー認証

ユーザーが正常に作成された場合、それは何もできない、あなたはそのユーザーのための適切なアクセス許可を割り当てる必要があります。あなたは、ユーザーの許可を照会する声明を表示:GRANTを使用することができます。

注意:のみ新しく作成されたユーザーのログイン権限のMySQLサーバ、他の権限は、他の操作を実行することはできません。
使用状況に任意のデータベースのユーザーとどのテーブルが権限を持っていないことを示します。

新しいMySQLユーザのために、あなたはそれを承認を与える必要があり、新しいユーザーのための認可を実装するためにGRANTステートメントを使用することができます。公式には、構文をお勧めします:

GRANT
    priv_type [(column_list)]
      [, priv_type [(column_list)]] ...
    ON [object_type] priv_level
    TO user [auth_option] [, user [auth_option]] ...
    [REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
    [WITH {GRANT OPTION | resource_option} ...]

GRANT PROXY ON user
    TO user [, user] ...
    [WITH GRANT OPTION]

object_type: {
    TABLE
  | FUNCTION
  | PROCEDURE
}

priv_level: {
    *
  | *.*
  | db_name.*
  | db_name.tbl_name
  | tbl_name
  | db_name.routine_name
}

user:
    (see Section 6.2.4, “Specifying Account Names”)

auth_option: {
    IDENTIFIED BY 'auth_string'
  | IDENTIFIED WITH auth_plugin
  | IDENTIFIED WITH auth_plugin BY 'auth_string'
  | IDENTIFIED WITH auth_plugin AS 'auth_string'
  | IDENTIFIED BY PASSWORD 'auth_string'
}

tls_option: {
    SSL
  | X509
  | CIPHER 'cipher'
  | ISSUER 'issuer'
  | SUBJECT 'subject'
}

resource_option: {
  | MAX_QUERIES_PER_HOUR count
  | MAX_UPDATES_PER_HOUR count
  | MAX_CONNECTIONS_PER_HOUR count
  | MAX_USER_CONNECTIONS count
}

私たちが知っている必要がまず第一に、権限のサブレベルです。アクセス権は、次のグループに付与することができます。

  • 列レベル、および関連するテーブル内の特定の列。たとえば、student_name列の値のテーブルの権限の学生を更新するUPDATEステートメントを使用することができます。
  • テーブル・レベル、および特定のテーブルに関連するすべてのデータ。たとえば、すべてのデータの許可テーブルの学生を照会するSELECTステートメントを使用することができます。
  • データベースレベル、および特定のデータベース関連のすべてのテーブル。たとえば、MyTestというの既存のデータベースに権限の新しいテーブルを作成することができます。
  • グローバル、およびすべてのMySQLデータベース関連。たとえば、既存のデータベースを削除したり、データベースの新しい権限を作成することができます。

次の表は、その重要性に権限を付与することができるすべてです。

技量 意義と助成金のレベル
ALL [PRIVILEGES] すべての権限は、に加えて、アクセスの特定のレベルに付与された  GRANT OPTIONと  PROXY
ALTER 有効ALTER TABLEレベル:グローバル、データベース、テーブル。
ALTER ROUTINE それはあなたがストアドプロシージャを変更または削除することができます。レベル:グローバル・データベース。
CREATE データベースとテーブルの作成を有効にします。レベル:グローバル、データベース、テーブル。
CREATE ROUTINE 作成したストアドプロシージャを有効にします。レベル:グローバル・データベース。
CREATE TABLESPACE ファイルグループを作成、変更、または表スペースを削除し、ログに記録することができます。グレード:グローバル。
CREATE TEMPORARY TABLES 有効CREATE TEMPORARY TABLEレベル:グローバル・データベース。
CREATE USER 使用を許可CREATE USER、  DROP USER、  RENAME USER、とします  REVOKE ALL PRIVILEGES評価:グローバル。
CREATE VIEW ビューを作成または変更できるようにします。レベル:グローバル、データベース、テーブル。
DELETE 有効DELETEレベル:グローバル、データベース、テーブル。
DROP 削除、データベース、テーブルやビューを有効にするには。レベル:グローバル、データベース、テーブル。
EVENT イベントの使用を有効にします。レベル:グローバル・データベース。
EXECUTE これは、ストアドプロシージャを実行するためにユーザを可能にします。レベル:グローバル・データベース。
FILE サーバーは、ファイルを読み書きすることができます。グレード:グローバル。
GRANT OPTION 別のアカウントへのアクセス権を有効にするか、他のアカウントから削除します。レベル:グローバル、データベース、テーブル、エージェント。
INDEX インデックスを作成または削除することができます。レベル:グローバル、データベース、テーブル。
INSERT 有効INSERTレベル:グローバル、データベース、テーブル、列。
LOCK TABLES LOCK TABLESあなたが持っているSELECT テーブルの特権を。レベル:グローバル・データベース。
PROCESS これは、すべてのプロセスを表示することができますSHOW PROCESSLISTグレード:グローバル。
PROXY ユーザーエージェントを有効にします。レベル:ユーザーからユーザーへ。
REFERENCES 外部キーの作成を有効にします。レベル:グローバル、データベース、テーブル、列。
RELOAD 有効FLUSH操作を。グレード:グローバル。
REPLICATION CLIENT ユーザーがマスターに尋ねるか、サーバーの場所からできるようにします。グレード:グローバル。
REPLICATION SLAVE プライマリサーバからバイナリログを読み取るためにレプリケーションスレーブを有効にします。グレード:グローバル。
SELECT 有効SELECTレベル:グローバル、データベース、テーブル、列。
SHOW DATABASES 有効SHOW DATABASESすべてのデータベースを表示します。グレード:グローバル。
SHOW VIEW 有効SHOW CREATE VIEWレベル:グローバル、データベース、テーブル。
SHUTDOWN 有効にシャットダウンをmysqladminはグレード:グローバル。
SUPER 以下のような他のコマンドを使用することができ  CHANGE MASTER TO、  KILL、  PURGE BINARY LOGS、  SET GLOBAL、およびmysqladminのデバッグコマンド。グレード:グローバル。
TRIGGER トリガー操作を有効にします。レベル:グローバル、データベース、テーブル。
UPDATE 有効UPDATEレベル:グローバル、データベース、テーブル、列。
USAGE 「いいえ特権ん」の同義語

実際には、GRANTステートメントとユーザーが直接作成できる権限を与え、ここで最初の使用後に作成されたあなたは再認証個々のユーザーがユーザー文を作成することを示唆しています。今私は、許可の例を使用する方法を紹介します。

#全局权限
GRANT super,select on *.* to 'test_user'@'%';

#库权限
GRANT select,insert,update,delete,create,alter,execute on `testdb`.* to 'test_user'@'%';

#表权限
GRANT select,insert on `testdb`.tb to 'test_user'@'%';

#列权限
GRANT select (col1), insert (col1, col2) ON `testdb`.mytbl to 'test_user'@'%';

5.リサイクル権限

MySQLでは、ユーザーのアクセス権を回復するためにREVOKEステートメントを使用することができ、このユーザは削除されません。

REVOKE
    priv_type [(column_list)]
      [, priv_type [(column_list)]] ...
    ON [object_type] priv_level
    FROM user [, user] ...

REVOKE ALL [PRIVILEGES], GRANT OPTION
    FROM user [, user] ...

構文は次のとおりです。

  • GRANTおよびREVOKEの構文ステートメントの構文は似ていますが、逆の効果があります。
  • 特定の権限の回復のための最初の構文形式。
  • 特定のユーザーのすべての権利の回復のための2番目の構文形式。
  • REVOKE文を使用するには、MySQLデータベースは、ユーザー権限またはUPDATE権限をグローバルCREATEている必要があります。

我々は、ユーザーのクエリ構文に助成金の許可を表示するために使用する通常の状況下では、見つかった場合はあまりにも多くの権限は、構文回復を使用する許可を取り消します。例としては、次のとおりです:

#查看用户权限
mysql> show grants for 'test_user'@'%';
+-----------------------------------------------------------------------------------------------------+
| Grants for test_user@%                                                                              |
+-----------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'test_user'@'%'                                                               |
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, EXECUTE ON `testdb`.* TO 'test_user'@'%' |
+-----------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

#发现权限过大,想回收drop,alter权限 则可以这样回收:
REVOKE drop,alter on `testdb`.* from 'test_user'@'%';

要約: 

本篇文章为大家介绍了如何创建,更改,删除用户以及如何授于和回收权限。希望大家能对MySQL中用户管理这一块能有更深的认识。入门MySQL系列文章写了好几篇了,一开始并没有想好写多少篇的准备,可能逻辑也不太合理,还是感谢大家的阅读。最后一篇打算写备份与恢复相关内容,大家期待一下哦!

おすすめ

転載: blog.51cto.com/10814168/2432316