実験 4 データベースのセキュリティと整合性

実験 4 データベースのセキュリティと整合性

一。実験の目的
1. データベースのセキュリティと整合性の理解を深める;
2. 承認とリサイクルを学ぶ;
4. データベース エンティティの整合性、参照整合性、およびユーザー定義の整合性制約の役割を理解し、体験する。
2.実験内容

構築された各テーブルとユーザーの権限を承認および再利用します. 操作が完了したら、承認されたユーザーが付与されたデータを操作する権利を本当に持っているかどうか、および権限取り消し操作後のユーザーが本当に権限を失うかどうかを確認します.データを操作します。
さまざまな整合性制約を定義し、さまざまなデータを入力して制約の効果を検証します

  1. SPJテーブルでユーザーaのクエリ権限を設定しますとしてログインしての権限を確認します

実験手順:

(1) 最初にユーザーを作成します。パスワードは「password」です。

CREATE USER 'a' IDENTIFIED WITH mysql_native_password BY'password';

      (2) 承認前に a の権限を確認します。

             ログイン:

クエリ ステートメントを実行します。

選択する

spj から

データベースへのアクセスがないことが判明しました:

(3) 再認証:

グラントセレクト

オン spj

に;

      (4) ログインして次の権限を確認します。

選択する

spj から

            

実験結果:

作成:

承認:

結果分析:

ユーザーを作成するときは、'a'@% を作成し、a@host を作成しないでください。そうしないと、承認できません。

  1. ユーザーbがSリストPリストの変更権限を持つように設定し、 bがこの権限を他のユーザーcに付与できるようにしますbcでそれぞれログインしbcの権限を確認します

実験手順:

(1) パスワード「bpassword」でユーザー b を作成します。

'bpassword' によって mysql_native_password で識別されるユーザー 'b' を作成します。

(2) パスワード「cpassword」で c ユーザーを作成します。

'cpassword' によって mysql_native_password で識別されるユーザー 'c' を作成します。

      (3) 承認 (クエリと変更のアクセス許可を付与します。変更のアクセス許可のみは許可されません):

グラントセレクト

ON

へ;

付与の更新

ON

GRANT オプション付き。

グラントセレクト

オン p

へ;

付与の更新

オン p

GRANT オプション付き。

      (4) ユーザー b にログインし、権限を確認します。

            

(5) b にログインし、s のテーブル s5 の SNAME を「for the people」に、都市を「Beijing」に変更します。

UPDATE s

SET SNAME='for the people',CITY='北京'

WHERE sno='S1';

(6) p テーブルの p1 をネジに変更し、色を赤に変更します。

UPDATE p

SET PNAME='screw',COLOR='red'

WHERE pno='p1';

     

(7) b にログインし、認可権限を実行し、c に s テーブルと p テーブルに対するクエリと変更の権限を付与します。

グラントセレクト

ON

に c;

付与の更新

ON

グラントセレクト

オン p

に c;

付与の更新

オン p

(8)cにログインし、sのテーブルs5のSNAMEを「Weimin」、都市を「Shanghai」に変更

UPDATE s

SET SNAME='for the people', CITY='Shanghai'

WHERE sno='S1';

(9) p テーブルの p1 をナットに変更し、色を青に変更します。

UPDATE p

SET PNAME='ナット',COLOR='ブルー'

WHERE pno='p1';

実験結果:

(1) パスワード「bpassword」でユーザー b を作成します。

(2) パスワード「cpassword」で c ユーザーを作成します。

      (3) 承認 (クエリと変更のアクセス許可を付与します。変更のアクセス許可のみは許可されません):

      (4) ユーザー b にログインし、権限を確認します。

            

(5) b にログインし、s のテーブル s5 の SNAME を「for the people」に、都市を「Beijing」に変更します。

(6) p テーブルの p1 をネジに変更し、色を赤に変更します。

            

(7) b にログインし、認可権限を実行し、c に s テーブルと p テーブルに対するクエリと変更の権限を付与します。

(8)cにログインし、sのテーブルs5のSNAMEを「Weimin」、都市を「Shanghai」に変更

       (9) p テーブルの p1 をナットに変更し、色を青に変更します。

結果分析:

        ユーザーに変更権限を付与するときは、クエリ権限も同時に付与することを忘れないでください。選択しないと更新できません。

  1. ユーザーabの権限を取り戻し、ユーザーcの権限のステータスを確認します

実験手順:

      (1) spj テーブルに対する a のクエリ権限を取り戻します。

取消選択

SPJで

から;

      (2) テーブル s および p を変更する b の許可を取り戻します。

更新を取り消す

から b;

更新を取り消す

上に

から b;

(3) ユーザー c がまだテーブル s および p を変更する権限を持っているかどうかを確認します。

ログイン c:

s テーブル s5 の SNAME を「Weiguo」に、都市を「Guangzhou」に変更します。

UPDATE s

SET SNAME='国',CITY='広州'

WHERE sno='S1';

p テーブルの p1 をネジに変更し、色を緑に変更します。

UPDATE p

SET PNAME='ネジ',COLOR='緑'

WHERE pno='p1';

実験結果:

      (1) spj テーブルに対する a のクエリ権限を取り戻します。

      (2) テーブル s および p を変更する b の許可を取り戻します。

      (3) ユーザー c がまだテーブル s および p を変更する権限を持っているかどうかを確認します。

       

結果分析:

       b の権限のみが取り消されていますが、b によって c に付与された権限は取り消されていません。これは、mysql がカスケード リカバリを実行していないことを示しています。

4.実験1で作成したテーブルについて、グラフィカル ユーザー インターフェイスを使用して外部キーの関係を確立し、外部キーの役割を確認します。

実験手順:

  1. 右クリック -- テーブルの設計 -- 外部キー -- 外部キーの作成

 

(2) 外部キーの役割を確認します: (外部キー制約に違反するデータを spj テーブルに挿入します)
spj テーブルに ('S8', 'P1', 'J9', 200) を挿入します:
INSERT INTO spj VALUES('S8' ,'P1','J9',300);
実験結果:

 結果の分析:
    S テーブルは S6 まで、p テーブルは P6 まで、j テーブルは J7 まで 挿入されたデータは外部キー制約に違反しているため、エラーが報告されます。

 5. 実験 1 で作成したテーブルに対して、パーツの色を赤、オレンジ、黄、緑、青、青、紫の 7 色の範囲内にする必要があり、パーツの重量が 50 を超えないように設定します。これらの 2 つの制約条件付きの名前付けを指定します。名前は、自分の名前の完全なスペルです。

実験手順:

(1) 制約を追加します。

ALTER TABLE p

ADD CONSTRAINT pengzhen CHECK(COLOR in ('red','orange','yellow','green','green','blue','purple') and WEIGHT<=50);

(2) 制約が有効かどうかを検証するには、p テーブルの P1 の「緑」を「赤」に変更します。

UPDATE p

SET color='赤'

WHERE pno='P1';

実験結果:

(1) 制約を追加します。

(2) 制約が有効かどうかを検証するには、p テーブルの P1 の「緑」を「赤」に変更します。

結果分析:

        制約が有用かどうかを確認するには、p テーブルの P1 の「緑」を「赤」に変更します。実行時にエラーが報告され、pengzhen 制約が既に存在します。データは変更できません。

6. SPJ テーブルの支給部品数を 1000 以下に設定する

実験手順:

      (1) 制約を追加します。

ALTER TABLE spj

CHECK(QTY<=1000) を追加します。

  1. spj テーブルで最初のデータの QTY を 1200 に変更します。

アップデート spj

セット数量=1200

WHERE sno='S1' AND pno='P1' AND jno='J4';

実験結果:

  1. 制約を追加します。

(2) spj テーブルの最初のデータの QTY を 1200 に変更します。

結果分析:

制約が存在するため、データを 1000 を超える数に変更することはできません。

7. S テーブルのサプライヤ番号を文字「S」で始まるように設定します
実験プロセス:
ALTER TABLE s
add CHECK(sno like 's%');
実験結果:
 
結果分析:
        制約を作成し、CHECK(sno like 's %')
 

8. 各テーブルのエンティティの整合性を確認します。
実験的プロセス:
-- テーブル s のエンティティの完全性を検証
-- (1) 通常のデータをテーブル s に挿入
INSERT INTO s VALUES('S7','Red Flag',10,'済南'); --
( 2) 重複データをテーブルに挿入 s
INSERT INTO s VALUES('S7','People',10,'Qingdao'); -- (
3) 空のデータをテーブルに挿入 s
INSERT INTO s VALUES( '','イノベーション',10,'広州');

-- p テーブルのエンティティの整合性を確認
-- (1) 通常のデータを p テーブルに挿入
INSERT INTO p VALUES('P7','tire',null,20);
-- (2) ピースを挿入p テーブル 繰り返しデータ
INSERT INTO p VALUES('P7','tire',null,20);
-- (3) p テーブルに空のデータを挿入
INSERT INTO p VALUES(NULL,'nail',null,5 );

-- テーブル j のエンティティの整合性を検証
-- (1) 通常のデータをテーブル j に挿入
INSERT INTO j VALUES('J8','Car Factory','Shanghai');
-- (2) テーブルに挿入j 繰り返しデータ
INSERT INTO j VALUES('J8','Car Factory','Shanghai');
-- (3) テーブルに空のデータを挿入 j
INSERT INTO j VALUES(NULL,'タイヤ工場' ,'南京');

-- spj テーブルのエンティティの整合性を確認します
-- (1) 通常のデータを spj テーブルに挿入します
INSERT INTO spj VALUES('S7','P6','J7',300);
-- (2) spj テーブルに挿入 重複データを挿入
INSERT INTO spj VALUES('S7','P6','J7',300);
-- (3) spj テーブルに空のデータを挿入
INSERT INTO spj VALUES('S7' ,NULL,' J7',300);
実験結果:
-- テーブル s のエンティティの整合性を検証
-- (1) 通常のデータをテーブル s に挿入 ('S7','Red Flag',10,'済南')
 

-- (2) s テーブルに重複データを挿入 ('S7','People',10,'Qingdao')

-- (3) テーブル s ('','Innovation',10,'Guangzhou') に空のデータを挿入します。

-- pテーブルのエンティティの整合性を確認します

-- (1) p テーブルに通常のデータを挿入 ('P7','tire',null,20)

-- (2) p テーブルに繰り返しデータを挿入 ('P7','tire',null,20)

-- (3) p テーブルに空のデータを挿入する (NULL,'nail',null,5)

--テーブルjのエンティティの整合性を確認します

-- (1) 通常のデータを j テーブルに挿入 ('J8'、'car factory'、'Shanghai')

-- (2) テーブル j に重複データを挿入 ('J8', 'car factory', 'Shanghai')

-- (3) jテーブルに空のデータを挿入 (NULL,'タイヤ工場','南京')

-- spjテーブルのエンティティの整合性を確認します

-- (1) 通常のデータを spj テーブルに挿入 ('S7','P6','J7',300)

-- (2) spj テーブルに重複データを挿入 ('S7','P6','J7',300)

-- (3) spj テーブルに空のデータを挿入 ('S7', NULL, 'J7', 300)

結果分析:

        s、p、および j テーブルの作成時に定義された整合性制約により、重複データを挿入できず、プライマリ コードが null であるデータを挿入できません。上記のステートメントは、整合性制約を検証します。

おすすめ

転載: blog.csdn.net/weixin_41957626/article/details/129739883