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

推薦する

DockerコンテナでLNMPをコンパイルする例

目次1. プロジェクトの説明2. Nginxイメージの作成3. MySQLイメージの作成4. PHP...

require/import キーワードを使用して v-for ループでローカル画像をインポートするいくつかの方法

目次問題の説明方法 1 (バックエンドが画像 URL を返す)方法 2 (フロントエンドで requ...

Vue プロジェクトで TS (TypeScript) を使用するための入門チュートリアル

目次1. Typescriptの紹介2. 設定ファイル webpack 設定3. プロジェクトに.t...

ドロップダウンメニューとスライドメニューのデザイン例

ドロップダウン メニューやスライド メニューを使用している Web サイトをたくさん見つけたので、私...

CSS 経由で JS にパラメータを渡す方法

1. CSSを通す必要がある背景CSS におけるメディアクエリの用途は、デバイスサイズの判別、マウス...

HTTP ステータス コード

このステータス コードは、リクエストのステータスに関する情報を提供し、サイトとリクエストされたページ...

JS クロスドメイン XML - AS URLLoader を使用

最近、機能拡張の要件を受け取りました。ただし、新しい要件で参照されているデータインターフェイスは、X...

よくある MySQL テーブル設計エラーの概要

目次間違い1: データの列が多すぎる誤解2: 共同クエリが多すぎる誤解3: ENUMの代わりにSET...

レアタグフィールドセットと凡例の使用方法の詳細な説明

<fieldset>と<legend>については、ほとんどの人はおそらく馴染...

MySQLのビューとインデックスの使い方と違いの詳細な説明

MySQL ビュー簡単に言えば、MySQL ビューは SELECT コマンドを定義するためのショート...

Reactのヒントはフックの依存関係の問題を解消する方法を教えます

reactプロジェクトで非常に一般的なシナリオ: const [watchValue、setWatc...

ウェブページの右下隅に「いいね!」カード効果を実現するための CSS (サンプルコード)

効果 HTML を実装するには、まずクリーンな HTML ページを準備し、ノードを記述します。 &l...

MySQLデータベースにパスワードを入力した後にフラッシュバックする問題の解決策

パスワード入力後にMySQLデータベースがクラッシュする問題と解決策1 ケースの説明最近、基本的な機...

JS クロスドメイン ソリューション React 構成 リバース プロキシ

クロスドメインソリューションjsonp (get をシミュレート) CORS (クロスオリジンリソー...

Windows Server 2019 のインストール (グラフィカル チュートリアル)

Windows Server 2019 は、Microsoft が公式にリリースした最新のサーバー...