MySQL 権限とデータベース設計のケーススタディ

MySQL 権限とデータベース設計のケーススタディ

権限とデータベース設計

ユーザー管理

SQLyogを使用してユーザーを作成し、権限を付与する

基本コマンド

/* ユーザーと権限の管理 */ ------------------
ユーザー情報テーブル: mysql.user
 
-- 権限をフラッシュする
 
-- ユーザーの追加 CREATE USER kuangshen IDENTIFIED BY '123456'
CREATE USER ユーザー名 IDENTIFIED BY [PASSWORD] パスワード (文字列)
    - mysql データベースに対するグローバル CREATE USER 権限、または INSERT 権限を持っている必要があります。
    - ユーザーの作成のみ可能で、権限を付与することはできません。
    - ユーザー名、引用符に注意してください: 例: 'user_name'@'192.168.1.1'
    - パスワードも引用符で囲む必要があり、純粋な数字のパスワードも引用符で囲む必要があります - パスワードをプレーンテキストで指定するには、PASSWORD キーワードを省略します。 PASSWORD() 関数によって返されるハッシュ値としてパスワードを指定するには、キーワード PASSWORD を含めます。
 
-- ユーザーの名前を変更する RENAME USER kuangshen TO kuangshen2
ユーザー名 old_user を new_user に変更
 
-- パスワードを設定する SET PASSWORD = PASSWORD('password') -- 現在のユーザーのパスワードを設定する SET PASSWORD FOR username = PASSWORD('password') -- 指定したユーザーのパスワードを設定する -- ユーザーを削除する DROP USER kuangshen2
DROP USER username -- 権限の割り当て/ユーザーの追加 GRANT permission list ON table name TO username [IDENTIFIED BY [PASSWORD] 'password']
    - すべての権限はすべての権限を意味します - *.* はすべてのライブラリ内のすべてのテーブルを意味します - ライブラリ名.テーブル名はライブラリの下のテーブルを意味します - 表示権限 SHOW GRANTS FOR root@localhost;
SHOW GRANTS FOR username - 現在のユーザー権限を表示します SHOW GRANTS; または SHOW GRANTS FOR CURRENT_USER; または SHOW GRANTS FOR CURRENT_USER();
 
-- 権限を取り消す REVOKE permission list ON table name FROM user name REVOKE ALL PRIVILEGES, GRANT OPTION FROM user name -- すべての権限を取り消す

権限の説明

-- 権限リスト ALL [PRIVILEGES] -- GRANT OPTION ALTERを除くすべての単純な権限を設定します -- ALTER TABLEの使用を許可します
ALTER ROUTINE -- ストアド プロシージャを変更または削除します CREATE -- CREATE TABLE の使用を有効にします
CREATE ROUTINE -- ストアドルーチンを作成する CREATE TEMPORARY TABLES -- CREATE TEMPORARY TABLEの使用を許可する
CREATE USER - CREATE USER、DROP USER、RENAME USER、および REVOKE ALL PRIVILEGES の使用を有効にします。
CREATE VIEW -- CREATE VIEWの使用を許可します
DELETE -- DELETEの使用を許可します
DROP -- DROP TABLEの使用を許可します
EXECUTE -- ユーザーがストアド プロシージャを実行できるようにします。 FILE -- SELECT ... INTO OUTFILE および LOAD DATA INFILE の使用を許可します。
INDEX -- CREATE INDEX と DROP INDEX の使用を許可します
INSERT -- INSERTの使用を許可します
LOCK TABLES - SELECT 権限を持つテーブルに対して LOCK TABLES を使用できます。
PROCESS -- SHOW FULL PROCESSLIST の使用を有効にする
REFERENCES -- 実装されていません RELOAD -- FLUSH は許可されています
レプリケーション クライアント - ユーザーがスレーブ サーバーまたはマスター サーバーのアドレスを問い合わせることができます。レプリケーション スレーブ - レプリケーション スレーブ サーバー (マスター サーバーからバイナリ ログ イベントを読み取る)
SELECT -- SELECTの使用を許可する
SHOW DATABASES -- すべてのデータベースを表示します SHOW VIEW -- SHOW CREATE VIEWの使用を有効にします
SHUTDOWN -- mysqladmin シャットダウンの使用を許可する
SUPER - CHANGE MASTER、KILL、PURGE MASTER LOGS、SET GLOBAL ステートメント、および mysqladmin debug コマンドの使用を有効にします。max_connections に達した場合でも、接続 (1 回) できます。
UPDATE -- UPDATEの使用を許可する
USAGE -- 「権限なし」の同義語 GRANT OPTION -- 権限の付与を許可する /* テーブルメンテナンス */
 
-- テーブルのキーワード分布を分析して保存します。ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE テーブル名...
-- 1 つ以上のテーブルにエラーがないか確認します CHECK TABLE tbl_name [, tbl_name] ... [オプション] ...
オプション = {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}
-- データ ファイルをデフラグします OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...

MySQL バックアップ

データベースバックアップの必要性

  • 重要なデータが失われないようにする
  • データ転送

MySQLデータベースのバックアップ方法

  • mysqldump バックアップ ツール
  • SQLyogなどのデータベース管理ツール
  • データベースファイルと関連する構成ファイルを直接コピーする

mysqldump クライアント

効果:

  • データベースをダンプ
  • バックアップ用のデータベースを収集する
  • 必ずしもMySQLサーバーではなく、別のSQLサーバーにデータを転送する

-- エクスポート 1. テーブルをエクスポートします -- mysqldump -uroot -p123456 school student >D:/a.sql
  mysqldump -u ユーザー名 -p パスワード データベース名 テーブル名 > ファイル名 (D:/a.sql)
2. 複数のテーブルをエクスポートする -- mysqldump -uroot -p123456 school student result >D:/a.sql
  mysqldump -u ユーザー名 -p パスワード データベース名 テーブル 1 テーブル 2 テーブル 3 > ファイル名 (D:/a.sql)
3. すべてのテーブルをエクスポートします --mysqldump -uroot -p123456 school >D:/a.sql
  mysqldump -u ユーザー名 -p パスワード データベース名 > ファイル名 (D:/a.sql)
4. ライブラリをエクスポートします -- mysqldump -uroot -p123456 -B school >D:/a.sql
  mysqldump -u ユーザー名 -p パスワード -B データベース名 > ファイル名 (D:/a.sql)
 
-w を使用してバックアップ条件を実行できます -- インポート 1. mysql にログインする場合: -- source D:/a.sql
  ソースバックアップファイル 2. ログインせずに、mysql -u ユーザー名 -p パスワード データベース名 < バックアップファイル

正規化されたデータベース設計

なぜデータベース設計が必要なのでしょうか?

データベースが複雑な場合は、データベースを設計する必要があります

不適切なデータベース設計:

  • データの冗長性、ストレージスペースの無駄
  • データの更新と挿入における例外
  • プログラムのパフォーマンスが悪い

優れたデータベース設計:

  • データ保存スペースを節約
  • データの整合性を確保できる
  • データベースアプリケーションシステムの開発を促進する

ソフトウェア プロジェクト開発サイクルにおけるデータベース設計:

  • 需要分析フェーズ: 顧客のビジネスとデータ処理のニーズを分析する
  • 概要設計フェーズ:データベースのERモデル図を設計し、需要情報の正確性と完全性を確認します。

データベースを設計する手順

  • 情報収集
  • システム関係者とコミュニケーションを取り、話し合い、ユーザーのニーズとデータベースが完了する必要のあるタスクを完全に理解します。
  • エンティティを識別する [エンティティ]
  • データベースによって管理される主要なオブジェクトまたはエンティティを識別します。エンティティは通常、名詞です。
  • 各エンティティに保存する必要がある詳細情報を特定する [属性]
  • エンティティ間の関係を識別します [関係]

3つのパラダイム

質問: データの正規化はなぜ必要なのでしょうか?

不適切なテーブル設計によって発生する問題:

  • 重複情報
  • アップデート異常
  • 例外を挿入
    • 情報を正しく表現できない
  • 例外の削除
    • 有効な情報の損失

3つのパラダイム

第一正規形(1st NF)

最初のパラダイムの目標は、各列の原子性を保証することです。各列が最小の分割不可能なデータ単位である場合、最初のパラダイムは満たされます。

第 2 正規形 (2nd NF)

第 2 正規形 (2NF) は第 1 正規形 (1NF) に基づいて構築されます。つまり、第 2 正規形 (2NF) を満たすには、まず第 1 正規形 (1NF) を満たす必要があります。

2番目のパラダイムでは、各テーブルが1つのことだけを記述する必要がある。

第 3 正規形 (3rd NF)

リレーションが第 2 正規形であり、主キー以外の列が主キー列に推移的に依存していない場合、そのリレーションは第 3 正規形になります。

3 番目のパラダイムでは、データ テーブル内の各データ列が主キーに間接的ではなく直接的に関連付けられていることを確認する必要があります。

正規化とパフォーマンスの関係

特定のビジネス目標を達成するには、データベースの正規化よりもデータベースのパフォーマンスの方が重要です。

データを正規化する場合、データベースのパフォーマンスを総合的に考慮する必要があります。

特定のテーブルに追加のフィールドを追加することで、そのテーブル内の情報の検索にかかる時間を大幅に短縮できます。

計算列を特定のテーブルに挿入すると、クエリが簡単になります。

MySQL のパーミッションとデータベース設計事例に関する記事はこれで終了です。MySQL のパーミッションとデータベース設計についてさらに詳しく知りたい方は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Springbootバックエンドで複数のデータソースとMySQLデータベースを構成する便利な方法
  • MySQL DEFINER の使用方法の詳細な説明
  • MySQLの分離レベルとロックメカニズムの詳細な説明
  • Django 本番環境構築 (uWSGI+django+nginx+python+MySQL)
  • MySQL の主キーがクエリを高速化するために数値を使用するか UUID を使用するかについての簡単な分析
  • MySQL がデフォルト値を持つ NULL 列の使用を推奨しない理由
  • Node-Redを使用してMySQLデータベースに接続する方法
  • MySQL の group by と having の詳細な説明

<<:  Podmanはコンテナを自動的に起動し、Dockerと比較します

>>:  レイアウトサイズを変更するために左右にドラッグする純粋なCSS

推薦する

HTML相対パスの親ディレクトリと子ディレクトリの書き方

親ディレクトリを指定する方法../ はソース ファイルの親ディレクトリを表し、../../ はソース...

W3C チュートリアル (14): W3C RDF および OWL アクティビティ

RDF と OWL は、2 つの重要なセマンティック ウェブ テクノロジーです。 RDF と OWL...

MySQL での IN データボリュームの使用の最適化された記録

MySQL のバージョン番号は 5.7.28 です。テーブル A には 390 万件のレコードがあり...

Jenkinsを使用してプロジェクトを別のホストにデプロイするプロセス

環境ホスト名IPアドレス仕えるジェンキンス192.168.216.200トムキャット、ジェンキンスサ...

4種類のMySQL接続とマルチテーブルクエリの詳細な説明

目次MySQL 内部結合、左結合、右結合、外部結合、複数テーブルクエリビルド環境: 1. 内なる慈恩...

テキストエリアの使用に関する注意事項

なぜテキストエリアについて具体的に言及するのでしょうか?なぜなら、textarea ノードは実際には...

効果的なウェブフォームのための 8 つのルール

ユーザーから情報を収集する場合、Web フォームを使用するより簡単で直接的な方法はありません。適切に...

JavaScript 円グラフの例

描画効果実装コードJavaScript var キャンバス = document.getElemen...

JavaScript での && および || 演算子の使用例

目次序文&& 演算子|| 演算子|| 演算子の簡単なデモ章の目的ケース演習(json...

SQLはLeetCodeを実装します(180.連続した数字)

[LeetCode] 180. 連続した数字少なくとも 3 回連続して出現するすべての数字を検索す...

MySQLテクノロジーにおけるInnoDBロックの詳細な説明

目次序文1. ロックとは何ですか? 2. InnoDBストレージエンジンのロック2.1 ロックの種類...

WeChat アプレット計算機の例

この記事では、参考までに、計算機を実装するためのWeChatアプレットの具体的なコードを紹介します。...

Gitコミットログの変更方法のまとめ

ケース1: 最後の提出とプッシュなし次のコマンドを実行します。 git コミット --amend g...

MySQL PXC は IST 送信のみで新しいノードを構築します (推奨)

需要シナリオ: 既存の PXC 環境には大量のデータがあります。新しく購入したサーバーをこのクラスタ...

Win10にMySQL8圧縮パッケージ版をインストールするチュートリアル

1 公式サイトからMySQL8をダウンロードしてインストールするMySQL8 ダウンロードアドレスこ...