Mysqlアカウント管理の原理と実装方法の詳細な説明

Mysqlアカウント管理の原理と実装方法の詳細な説明

この記事では、例を使用して、MySQL アカウント管理の原則と実装方法を説明します。ご参考までに、詳細は以下の通りです。

アカウント管理

実稼働環境でデータベースを操作する場合、接続にルート アカウントを使用しないでください。代わりに、特定のアカウントを作成し、このアカウントに特定の操作権限を付与してから接続して操作します。主な操作はデータの CRUD です。
MySQL アカウント システム: アカウントのさまざまな権限に応じて、MySQL アカウントは次の種類のサービス インスタンス レベルのアカウントに分類できます。データベース インスタンスである mysqld が起動すると、root などのユーザーにサービス インスタンス レベルで割り当てられた権限がある場合、アカウントはこれらのデータベース内のテーブルを含むすべてのデータベースを削除できます。データベース レベルのアカウント: 特定のデータベースに対して、追加、削除、変更、クエリなどのすべての操作を実行します。テーブル レベルのアカウント: 特定のテーブルに対して、追加、削除、変更、クエリなどのすべての操作を実行します。フィールド レベルの権限: 特定のテーブルの特定のフィールドに対して操作を実行します。ストアド プログラム レベルのアカウント: ストアド プログラムに対して、追加、削除、変更、クエリなどの操作を実行します。アカウント操作には、主にアカウントの作成、アカウントの削除、パスワードの変更、権限の承認が含まれます。注:

アカウント操作を実行するときは、ルート アカウントでログインする必要があります。このアカウントはインスタンス レベルの最高の権限を持ち、通常はデータベース レベルの操作権限を使用します。

権限を付与する

例として root を使用し、インスタンス レベルのアカウントでログインする必要があります。

主な業務は次のとおりです。

すべてのユーザーを表示 パスワードを変更 ユーザーを削除

1. すべてのユーザーを表示

すべてのユーザーと権限情報は、MySQLデータベースのユーザーテーブルに保存されます。ユーザーテーブルの構造を表示します。
desc ユーザー;
メインフィールドの説明:
ホストはアクセスが許可されているホストを示します
ユーザーはユーザー名を表します
authentication_stringはパスワードを表し、これはすべてのユーザーを表示するための暗号化された値です。

ユーザーからホスト、ユーザー、認証文字列を選択します。

結果

mysql> ユーザーからホスト、ユーザー、認証文字列を選択します。
+-----------+------------------+--------------------------------------------------------+
| ホスト | ユーザー | 認証文字列 |
+-----------+------------------+--------------------------------------------------------+
| ローカルホスト | ルート | *E74858DB86EBA20BC33D0AECAE8A8108C56B17FA |
| localhost | mysql.sys | *ここで使用できるパスワードは無効です |
| ローカルホスト | debian-sys-maint | *EFED9C764966EDB33BB7318E1CBD122C0DFE4827 |
+-----------+------------------+--------------------------------------------------------+
セット内の 3 行 (0.00 秒)

2. アカウントを作成して承認する

ログインして操作するには、インスタンスレベルのアカウントを使用する必要があります。ルートを例にとると、一般的な権限には、作成、変更、削除、挿入、更新、削除、選択などがあります。
すべての権限を割り当てたい場合は、すべての権限を使用できます

2.1 アカウントの作成と承認

'password' で識別される 'user name'@'access host' にデータベースの権限リストを付与します。

2.2 例1

パスワード 123456 を持つ laowang という名前のアカウントを作成します。このアカウントにはローカルでのみアクセスでき、jing_dong データベース内のすべてのテーブルを読み取ることしかできません。

ステップ1: rootとしてログインする

mysql -uroot -p
パスワードを入力してEnterを押してください

ステップ2: アカウントを作成し、すべての権限を付与する

jing_dong.* に対する選択権限を 'laowang'@'localhost' に '123456' で識別して付与します。

例示する

Python データベースのすべてのテーブルは、次の方法で操作できます: jing_dong.*
アクセスホストは通常​​、パーセント記号 % を使用して、このアカウントが任意の IP ホストを使用してこのデータベースにログインしてアクセスできることを示します。アクセスホストは、ローカルホストまたは特定の IP に設定でき、ローカルマシンまたは特定のホストのみがアクセスを許可されることを示します。ユーザーが持っている権限を表示します。

laowang@localhost の権限を表示します。

ステップ3: ルートからログアウトする

やめる

ステップ4: Laowangアカウントを使用してログインする

mysql -ulaowang -p
パスワードを入力してEnterを押してください

ログイン後の効果は以下のとおりです
ここに画像の説明を挿入
ここに画像の説明を挿入

2.3 例2

パスワードが 12345678 の laoli アカウントを作成します。このアカウントはどのコンピューターからでもアクセスでき、jing_dong データベース内のすべてのテーブルに対する完全な権限を持ちます。

jing_dong.* のすべての権限を、「12345678」で識別される「laoli」@「%」に付与します。

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

アカウント操作

1. 権限を変更する

GRANT オプションを使用して、データベースの権限名を account@host に付与します。

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

2. パスワードを変更する

ルートとしてログインし、MySQLデータベースのユーザーテーブルを変更します。

パスワードを暗号化するにはpassword()関数を使用します

ユーザーを更新します。set authentication_string=password('新しいパスワード')、user='ユーザー名';
例:
ユーザーを更新します。set authentication_string=password('123') where user='laowang';

変更が完了したら権限を更新する必要があることに注意してください

権限をフラッシュする

3. リモートログイン(危険ですので、注意して使用してください)

Ubuntuでmsyqlコマンドを使用して別のMySQLサーバーにリモート接続する場合は、次の方法で実行できますが、この方法は理解のためだけのものであり、実際の運用環境では使用しないでください。

/etc/mysql/mysql.conf.d/mysqld.cnfファイルを変更する

vim /etc/mysql/mysql.conf.d/mysqld.cnf

ここに画像の説明を挿入
次にmsyqlを再起動します

サービスmysqlの再起動

別のUbuntuで接続をテストする

ここに画像の説明を挿入
それでも接続できない場合は、次の理由が考えられます。

  1. ネットワークが機能していません

ping xxx.xxx.xx.xxx を使用して、ネットワークが正常かどうかを確認できます。

2) データベースがbind_addressパラメータで設定されているかどうかを確認します。

ローカルでデータベースにログインして my.cnf ファイルを表示すると、データベースの現在のパラメータに 'bind_address' などの変数が表示されます。

bind_address=127.0.0.1が設定されている場合は、ローカルでのみログインできます。

3) データベースにskip_networkingパラメータが設定されているかどうかを確認する

このパラメータが設定されている場合、MySQLデータベースにローカルでのみログインできます。

4) ポートは正しく指定されていますか?

4. アカウントの削除

構文1: rootとしてログインする

ユーザー 'username'@'host' を削除します。
例:
ユーザー 'laowang'@'%' を削除します。

構文2: rootとしてログインし、MySQLデータベースのユーザーテーブル内のデータを削除します。

user='username' のユーザーから削除します。
例:
user='laowang' のユーザーから削除します。

-- 操作が完了したら、権限をフラッシュする必要があります

ユーザーを削除するには、構文 1 を使用することをお勧めします。構文 1 でユーザーを削除できない場合は、構文 2 を使用します。

3. ルートアカウントのパスワードを忘れてしまったらどうすればいいですか?

通常、ルートアカウントを管理するのは私たちの番ではないので、盲目的にならないでください

mysql ルート ユーザーのパスワードを忘れた場合の解決策 (skip-grant-tables):

スキップ許可テーブル
名前の通り、データベース起動時に権限テーブルの制限がスキップされ、パスワードの確認なしで直接ログインできます。

知らせ:

この状況は、ルート パスワードを忘れてデータベースを再起動する必要がある場合にのみ使用されます。データベースの再起動が必要であり、セキュリティを保証するのが難しいため、ライブ ネットワーク環境では注意して使用してください。

1. 構成パラメータを変更する

/etc/my.cnf

存在する

[mysqld] 以下を追加:

スキップ許可テーブル
構成項目。

2. MySQLを再起動する

パラメータを有効にします。

サービスmysqldを再起動

3. 注意事項

現時点では、すべてのユーザーがパスワードなしで現在のデータベースにログインできるため、データベースのセキュリティは非常に低くなります。

4. パスワードを変更する

具体的な方法:

https://www.jb51.net/article/169143.htm

5. パラメータを削除する

a. パスワードを変更した後、設定ファイルから skip-grant-tables を削除します。

b. データベースを再起動します。

MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL クエリ スキル」、「MySQL 共通関数の概要」、「MySQL ログ操作スキル」、「MySQL トランザクション操作スキルの概要」、「MySQL ストアド プロシージャ スキル」、および「MySQL データベース ロック関連スキルの概要」

この記事が皆様のMySQLデータベース設計に役立つことを願っています。

以下もご興味があるかもしれません:
  • MySQLのユーザーアカウント管理と権限管理の詳細な説明
  • MySQLは新しいユーザーを作成し、2つのアカウントを追加して例を使用します
  • MySQL ログ管理の詳細
  • MySQL 管理
  • メモを作成するためのMySQL権限管理付与コマンド
  • MySQLユーザー権限管理の詳細な説明
  • MySQL における基本的なユーザーおよび権限管理方法の概要
  • MySQL での mysqladmin 日常管理コマンドの概要 (必読)
  • MySQL ベースの学生管理システムを Java で実装する
  • mysqladmin を使って MySQL をリモート管理する方法

<<:  Nginxは特定のページへのIPアクセスを制限します

>>:  nginx を使用して特定のインターフェース (URL) をブロックする方法

推薦する

Dockerはホスト間のネットワーク通信を実現するためにMacvlanを導入する

基本的な概念: Macvlanの動作原理: Macvlan は、Linux カーネルでサポートされて...

Docker ファイルの保存パス、ポート マッピング操作モードの変更

コンテナの起動コマンドを取得する方法コンテナはすでに作成されていますが、その起動パラメータ(データが...

リクエスト数を制限するために Ajax 同時リクエストを実装するために js を使用するサンプル コード

問題の説明: 非同期リクエストの数が不確定な場合、数百の http リクエストが瞬時に発生したときに...

Vueは虫眼鏡付きの検索ボックスを実装します

この記事では、Vueを使用して虫眼鏡付きの検索ボックスを実装する方法を紹介します。具体的な内容は次の...

Docker環境を構築する簡単な方法

まず、Docker とは何かを理解しましょう。 Docker は、アプリケーションをデプロイするため...

React.js フレームワーク Redux 基本ケースの詳細な説明

react.js フレームワーク Redux https://github.com/reactjs/...

VMware Workstation 14 Pro(仮想マシン)にシステムをインストールする方法の詳細な説明

この記事では、VMware Workstation 14 Pro (仮想マシン) にシステムをインス...

Vueはシンプルなショッピングカートの例を実装します

この記事では、参考までに、シンプルなショッピングカートケースを実装するためのVueの具体的なコードを...

MySQLクエリ速度を最適化する方法

前の章では、高性能な MySQL に不可欠な、最適化されたデータ型の選択方法とインデックスの効率的な...

React Hooksを使用する際のよくある落とし穴

React Hooks は React 16.8 で導入された新しい機能で、クラスを使用せずに状態や...

Reactは複雑な検索フォームの展開と折りたたみ機能を実装します

時間に余裕を持って、過去を忘れましょう。前のセクションでは、[検索] フォームとクエリおよびリセット...

CSS で 3D ブック効果を実装するためのサンプル コード

さっそく、レンダリングを見てみましょうソースコードは以下のとおりです <!DOCTYPE ht...

JavaScript 関数呼び出しの典型的なサンプルコード

目次JavaScript 関数呼び出しの典型的な例JS関数の定義と呼び出し方法要約するJavaScr...

ドメイン名を指定されたポートに転送するようにNginxを設定する方法

/usr/local/nginx/conf と入力する sudo cd /usr/local/ngi...

MySQL 8.0.22 のインストールと設定のグラフィックチュートリアル

MySQL8.0.22のインストールと設定(超詳細)参考までに、具体的な内容は次のとおりです。みなさ...