検索
ホームページデータベースmysql チュートリアルMySQL セキュリティ ガイド (3) (リダイレクト)

MySQL セキュリティ ガイド (3)


2.4 GRANT を使用しないユーザーのセットアップ
MySQL バージョン 3.22.11 より前の場合、GRANT (または REVOKE) ステートメントを使用してユーザーとそのアクセス権を設定することはできませんが、認可テーブルの内容を直接変更することはできます。 GRANT ステートメントが付与テーブルをどのように変更するかを理解していれば、これは簡単です。その後、INSERT ステートメントを手動で発行することで、同じことを自分で行うことができます。

GRANT ステートメントを発行するときは、ユーザー名とホスト名、場合によってはパスワードを指定します。このユーザーに対してユーザー テーブル レコードが生成され、これらの値が User、Host、および PassWord 列に記録されます。 GRANT ステートメントでグローバル権限を指定すると、これらの権限はレコードの [権限] 列に記録されます。 GRANT ステートメントではパスワードが暗号化されますが、INSERT ではパスワードを暗号化するために PASSWORD() 関数を使用する必要がないことに注意してください。

データベースレベルの権限を指定すると、ユーザー名とホスト名が db テーブルの User 列と Host 列に記録されます。承認したデータベースは [Db] 列に記録され、付与したアクセス許可は [Permissions] 列に記録されます。

テーブルレベルと列レベルの権限の場合、効果は同様です。 tables_PRiv テーブルと columns_priv テーブルにレコードを作成して、ユーザー名、ホスト名、データベース、および関連するテーブルと列を記録します。付与された権限は、「権限」列に記録されます。

前の紹介を覚えていれば、GRANT ステートメントなしで GRANT の動作を実行できるはずです。認可テーブルを直接変更する場合は、サーバーに認可テーブルをリロードするように指示することになります。そうしないと、サーバーは変更を認識できません。 mysqladminを実行できます フラッシュ特権または mysqladmin reload コマンドはリロードを強制します。これを忘れると、なぜサーバーが期待通りの動作をしないのか疑問に思うことになります。

次の GRANT ステートメントは、所有権を持つスーパーユーザーを作成します。他の人に委任する機能を含む:

GRANT "passwd" によって識別された anyname@localhost に対して *.* をすべてオンにします
(許可付き) OPTION
このステートメントは、user テーブルに anyname@localhost のレコードを作成し、すべての権限を開きます。これは、ここにスーパー ユーザー (グローバル) 権限が保存されるためです。INSERT ステートメントで同じことを行うには、ステートメントは次のようになります。

に挿入 ユーザー VALUES("localhost","anyname",PASSWORD("passwd"),
"Y","Y","Y","Y","Y","Y","Y","Y" ,"Y","Y","Y","Y","Y","Y")
MySQLのバージョンによっては動作しない場合があります。権限テーブルの構造が変更されたため、ユーザー テーブルに 14 個の権限列が存在しない可能性があります。ショーを使用する COLUMNS 付与テーブルに含まれる各権限列を確認し、それに応じて INSERT ステートメントを調整します。 次の GRANT ステートメントでも、スーパーユーザー ステータスを持つユーザーが作成されますが、権限は 1 つだけです。

GRANT RELOAD ON *.* TO flash@localhost IDENTIFIED BY "flushpass"
この例の INSERT ステートメントは前のステートメントよりも単純で、列名を簡単にリストし、権限列を 1 つだけ指定します。他のすべての列はデフォルトの「N」に設定されます。

ユーザーに挿入 (ホスト、パスワード、リロード) VALUES("localhost","flush",PASSWORD("flushpass"),"Y")
データベースレベルの権限には ON を使用します 認可のための ON *.* の代わりに db_name.* 句:

GRANT ALL ON サンプル.* TO boris@localhost 識別者 "ruby"
これらの権限はグローバルではないため、ユーザー テーブルに保存されません (ユーザーが接続できるように) が、db テーブル レコードも作成する必要があります。データベースセットの権限を記録するには、次のようにします。

ユーザーに挿入 (ホスト、ユーザー、パスワード) VALUES("localhost","boris",PASSWORD("ruby"))

データベースに挿入 VALUES("localhost","sample_db","boris","Y","Y","Y","Y","Y","Y","N","Y","Y", "Y")

"N" 列は、最後のデータベース レベルの WITH を伴う GRANT 権限を表します。 付与 OPTION の GRANT ステートメントの場合、列を "Y" に設定する必要があります。

テーブルレベルまたは列レベルの権限を設定するには、tables_priv または columns_priv で INSERT ステートメントを使用します。もちろん、GRANT ステートメントがない場合、これらのテーブルはすべて MySQL に同時に表示されるため、これらのテーブルは存在しません。これらのテーブルがあり、何らかの理由でそれらを手動で操作したい場合は、個々の列に対して権限を有効にできないことに注意してください。

tables_priv.Table_priv または columns_priv.Column_priv 列を設定して、有効にする権限の値を含めます。たとえば、テーブルに対する SELECT および INSERT 権限を有効にするには、関連する tables_priv レコードで Table_priv を「Select,Insert」に設定します。

MySQL アカウントを持つユーザーの権限を変更する場合は、権限を追加するか取り消すかに関係なく、INSERT ではなく UPDATE を使用してください。ユーザーを完全に削除するには、ユーザーが使用しているすべてのテーブルからレコードを削除します。

全権限テーブルを直接変更するクエリを発行したくない場合は、MySQL に付属の mysqlaccess スクリプトと mysql_setpermissions スクリプトを参照してください。



付録 1 クイズ
MySQL サーバーをインストールし、MySQL への接続を許可されたユーザーを追加した後、次のステートメントを使用します:

GRANT ALL ON samp_db.* 宛先 fred@*.snake.net 識別されました "cocoa"

そして、fred はたまたまサーバー ホストにアカウントを持っていたため、サーバーに接続しようとしました:

%mysql -u fred -pcocoa samp_db
エラー 1045: ユーザーのアクセスが拒否されました: 'fred@localhost' (使用パスワード: はい)

なぜですか?

その理由は次のとおりです。

まず、mysql_install_db が初期権限テーブルを確立する方法と、サーバーが顧客の接続を照合するためにユーザー テーブル レコードを使用する方法を検討します。 mysql_install_db でデータベースを初期化すると、次のようなユーザー テーブルが作成されます:

Host ユーザー
localhost
pit.snake.net
localhost
pit.snake.net root
root



最初の 2 つのレコードでは、root がローカル サーバーに接続するための localhost またはホスト名を指定でき、最後の 2 つのレコードでは、匿名ユーザーがローカルから接続できるようになります。 fred ユーザーを追加した後、

ホスト ユーザー
localhost
pit.snake.net
localhost
pit.snake.net
%.snake.net ルート
ルート


フレッド

サーバーが起動すると、レコードを読み取って並べ替えます (最初はホストごと、次にホスト上のユーザーごと)。具体的であるほど上位にランクされます:

ホスト ユーザー
ローカルホスト
ローカルホスト
pit.snake.net
pit.snake.net
%.snake.net ルート

ルート

フレッド

localhost のレコードは 2 つ一緒にランク付けされていますが、root のレコードは null よりも具体的であるため、最初にランク付けされています。 pig.snake.net の記録も同様です。これらはすべて、ワイルドカードを含まないリテラルのホスト値であるため、fred のレコードの前、特に匿名ユーザーは fred の前にランク付けされます。

その結果、fred が localhost から接続しようとすると、[Host] 列に空のユーザー名を持つレコードが、%.snake.net を含むレコードの前に一致します。デフォルトの匿名ユーザーにはパスワードがないため、このレコードのパスワードは空です。 fred が接続時にパスワードを指定したため、不一致が発生し、接続に失敗しました。

ここで覚えておくべきことは、ユーザーが接続できるホストを指定するにはワイルドカードを使用すると便利ですが、ということです。ただし、テーブルに匿名ユーザー レコードを保持している限り、localhost からの接続に問題が発生します。

一般に、匿名ユーザー レコードを削除することをお勧めします。

mysql> ユーザーの場所から削除 User="";

さらに進んで、他の認可テーブルにある匿名ユーザーを削除します。User 列を持つテーブルは db、tables_priv、columns_priv です。

付録 2 新しい MySQL インストールをより安全にする
新しい MySQL サーバーを自分でインストールした後、MySQL root ユーザーのディレクトリを指定する必要があります (デフォルトではパスワードなし)。これを忘れると、MySQL が非常に危険な状態で失われます。 (少なくともしばらくの間は)。

Unix (linux) では、マニュアルの指示に従って MySQL をインストールした後、mysql_install_db スクリプトを実行して、認可テーブルと初期権限を含む mysql データベースを確立する必要があります。 Windows では、ディストリビューション内のセットアップ プログラムを実行して、データ ディレクトリと mysql データベースを初期化します。サーバーも稼働していると想定されます。

初めて MySQL をマシンにインストールすると、mysql データベース内の認証テーブルが次のように初期化されます:

パスワードを指定せずにローカルホスト (localhost) から root として接続できます。 root ユーザーはすべての権限 (管理者権限を含む) を持ち、何でもできます。 (ちなみに、MySQL のスーパーユーザーは Unix のスーパーユーザーと同じ名前であり、まったく関係ありません。)
匿名アクセスは、test という名前のデータベースおよび名前が test_ で始まるデータベースにローカルに接続できるユーザーに付与されます。匿名ユーザーはデータベースに対して何でも行うことができますが、管理権限はありません。
接続ユーザーがローカルホストのホスト名を使用するか実際のホスト名を使用するかに関係なく、ローカルホストから複数のサーバーへの接続が許可されます。例:

% mysql -h localhost テスト

% mysql -h pig.snake.net テスト

パスワードを指定せずに root として MySQL に接続しているという事実は、初期インストールが安全ではないことを意味するだけです。そのため、管理者として最初に行うべきことは、root パスワードを設定し、その後、パスワードに応じてパスワードを設定することです。パスワードの設定に使用するメソッドに加えて、サーバーにこの変更を認識させるために認可テーブルをリロードするように指示することもできます。 (サーバーが起動すると、テーブルがメモリに再ロードされるため、テーブルが変更されたことが認識されない可能性があります。)

MySQL の場合 バージョン 3.22 以降の場合、mysqladmin を使用してパスワードを設定できます:

% mysqladmin -u root パスワード yourpassword

MySQL のどのバージョンでも、mysql プログラムを使用して、mysql データベース内のユーザー認証テーブルを直接変更できます:

% mysql -u root mysql
mysql>UPDATE user SET パスワード=PASSWORD("あなたのパスワード") WHERE User="root";

古いバージョンの MySQL を使用している場合は、mysql と UPDATE を使用してください。

パスワードを設定した後、次のコマンドを実行して、サーバーに認証テーブルをリロードするように指示する必要があるかどうかを確認します:

% mysqladmin -u root ステータス

サーバーがパスワードを指定せずに root として接続できる場合は、認可テーブルをリロードします:

% mysqladmin -u root reload

root パスワードを設定した後 (必要に応じて認証テーブルをリロードした後)、root としてサーバーに接続するときは必ずパスワードを指定する必要があります。

上記は MySQL セキュリティ ガイド (3) (再版) の内容です。その他の関連記事については、PHP 中国語 Web サイト (www.php.cn) に注目してください。


声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
データ処理と計算にMySQL関数を使用する方法データ処理と計算にMySQL関数を使用する方法Apr 29, 2025 pm 04:21 PM

MySQL関数は、データ処理と計算に使用できます。 1.基本的な使用には、文字列処理、日付計算、数学操作が含まれます。 2。高度な使用法には、複数の関数を組み合わせて複雑な操作を実装することが含まれます。 3.パフォーマンスの最適化では、Where句での機能の使用を回避し、GroupByおよび一時テーブルを使用する必要があります。

MySQLにデータを挿入する効率的な方法MySQLにデータを挿入する効率的な方法Apr 29, 2025 pm 04:18 PM

MySQLでデータを挿入するための効率的な方法には、次のものが含まれます。1。insertInto ...値構文、2。LoadDatainFileコマンドの使用、3。トランザクション処理の使用、4。バッチサイズの調整、5。Insurtignoreまたは挿入の使用...

フィールドをMySQLテーブルに追加および削除する手順フィールドをMySQLテーブルに追加および削除する手順Apr 29, 2025 pm 04:15 PM

MySQLでは、AlterTabletable_nameaddcolumnnew_columnvarchar(255)afterexisting_columnを使用してフィールドを追加し、andtabletable_namedopcolumncolumn_to_dropを使用してフィールドを削除します。フィールドを追加するときは、クエリのパフォーマンスとデータ構造を最適化する場所を指定する必要があります。フィールドを削除する前に、操作が不可逆的であることを確認する必要があります。オンラインDDL、バックアップデータ、テスト環境、および低負荷期間を使用したテーブル構造の変更は、パフォーマンスの最適化とベストプラクティスです。

MySQLクエリの実行計画を分析する方法MySQLクエリの実行計画を分析する方法Apr 29, 2025 pm 04:12 PM

説明コマンドを使用して、MySQLクエリの実行計画を分析します。 1.説明コマンドは、パフォーマンスのボトルネックを見つけるのに役立つクエリの実行計画を表示します。 2。実行計画には、ID、select_type、table、type、baining_keys、key、key_len、ref、行、およびextraなどのフィールドが含まれます。 3。実行計画によると、インデックスを追加し、完全なテーブルスキャンを避け、参加操作の最適化、オーバーレイインデックスの使用により、クエリを最適化できます。

MySQLサブクエリを使用してクエリ効率を向上させる方法MySQLサブクエリを使用してクエリ効率を向上させる方法Apr 29, 2025 pm 04:09 PM

サブクエリは、MySQLクエリの効率を向上させることができます。 1)Subqueryは、データのフィルタリングや集約値の計算など、複雑なクエリロジックを簡素化します。 2)MySQL Optimizerは、サブクエリを操作に参加させてパフォーマンスを向上させることができます。 3)INの代わりに存在することは、複数の行の戻りエラーを回避できます。 4)最適化戦略には、関連するサブ征服の回避、存在の使用、インデックスの最適化、およびサブクエリネスティングの回避が含まれます。

mysqlの文字セットと照合ルールを構成する方法mysqlの文字セットと照合ルールを構成する方法Apr 29, 2025 pm 04:06 PM

MySQLで文字セットと照合を構成する方法は次のとおりです。1。サーバーレベルでの文字セットとコレクションの設定:setNames'utf8 '; setCharacterSetutf8; setCollat​​ion_connection = 'utf8_general_ci'; 2。特定の文字セットと照合を使用するデータベースを作成します:createdatabaseexample_dbcharactersetutf8collat​​eutf8_general_ci; 3.テーブルを作成するときに文字セットとコレクションを指定:createTableExample_table(idint

MySQLをアンインストールし、残留ファイルをクリーンする方法MySQLをアンインストールし、残留ファイルをクリーンする方法Apr 29, 2025 pm 04:03 PM

安全かつ徹底的にMySQLをアンインストールし、すべての残留ファイルをクリーンにするには、次の手順に従ってください。1。MySQLサービスを停止します。 2。MySQLパッケージをアンインストールします。 3.構成ファイルとデータディレクトリのクリーン。 4.アンインストールが徹底していることを確認します。

MySQLのデータベースの名前を変更する方法MySQLのデータベースの名前を変更する方法Apr 29, 2025 pm 04:00 PM

MySQLでデータベースを変更するには、間接的な方法が必要です。手順は次のとおりです。1。新しいデータベースを作成します。 2。mysqldumpを使用して、古いデータベースをエクスポートします。 3.データを新しいデータベースにインポートします。 4.古いデータベースを削除します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール