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

推薦する

MySQL の基本: グループ化関数、集計関数、グループ化クエリの詳細な説明

目次1. 使い方が簡単2. DISTINCTを使用して重複を削除する3. COUNT()の詳細な紹介...

MySQL エラー: ロックを取得しようとしたときにデッドロックが見つかりました。トランザクションの解決策を再起動してください

問題を見つける最近、以前のデータを入力していたときに、プログラムが突然次のエラーを報告しました。 [...

MySQL で B+ ツリー インデックスを使用する利点は何ですか?

この問題を理解する前に、まず MySQL テーブルのストレージ構造を確認し、次にバイナリ ツリー、マ...

Vue で ToDo アプリケーションを実装する例

背景まず最初に、私はフロントエンド開発の専門家ではないことを述べておきたいと思います。私の以前のコン...

LeetCode の SQL 実装 (183. 注文をしたことがない顧客)

[LeetCode] 183.注文しない顧客Web サイトに、Customers テーブルと Or...

Enterキーを押すとフォームが自動的に送信されます。予期せぬ発見

コードをコピーコードは次のとおりです。 <!DOCTYPE html> <html...

MySQL で絵文字表現を挿入できない理由と解決策

失敗のシナリオMySQL データベースに絵文字表現を挿入するために JDBC を呼び出すと、例外ja...

必見の JavaScript 面接質問 10 選のまとめ (おすすめ)

1.これは1. 誰が誰に電話をかけますか?例: 関数foo(){ console.log(&quo...

MySQL 8.0.21 無料インストール版 設定方法 グラフィックチュートリアル

MySQLをインストールする6つの手順(インストールパッケージのみがインストール場所を選択できます)...

js を使用して数字推測ゲームを実装する

先週、先生が私に数字当てゲームをするちょっとした宿題を出しました。とても面白いと思ったので、適当に書...

Linux の wget コマンドの詳細な紹介

目次まずwgetをインストールするヘルプマニュアルを見る1. wgetを使用して単一のファイルをダウ...

すべてのブラウザとの完全な互換性を実現するために最適なプリセットを選択してください

各ブラウザの select タグのプロパティと各ブラウザのサポートが多少異なるため、各ブラウザでの選...

Vue プロジェクトのパッケージ化と最適化の実装手順

目次Vueプロジェクトのパッケージ化、起動、最適化Vueプロジェクトのパッケージ化プロジェクトホステ...

MySQLデータベースについて学びましょう

目次1. データベースとは何ですか? 2. データベースの分類は? 3. データベースとデータ構造の...

JavaScript を使用して動的に生成されるテーブルの詳細な説明

*ページを作成する: 2つの入力ボックスとボタン*コードと手順/* 1. 入力行と列の値を取得する2...