データベースの原理と応用実験レポート - 実験 5 - データ制御

データベース原理と応用実験レポート

実験テーマ  実験5データ制御     

5.1 実験の目的

SQL のデータ制御機能に精通しており、SQL ステートメントを使用してユーザーに権限を付与および取り消しできること。

5.2 実験内容

        1. GRANT ステートメントを使用してユーザーを認可するか、単一ユーザーまたは複数のユーザーを認可するか、予約語 PUBLIC を使用してすべてのユーザーを認可します。データベース、ビュー、基本テーブルなどの操作オブジェクトごとに異なる権限を付与します。
        2. WITH GRANT OPTION 句を使用して、権限を伝播する権利をユーザーに付与します。
        3. 認可中に循環認可が発生した場合は、DBS がこのエラーを検出できるかどうかを確認してください。そうでない場合は、認可のキャンセル操作と組み合わせて、循環認可に関する DBS の制御を確認してください。
        4. REVOKE 句を使用して認可を取り消し、認可カスケードをキャンセルします。

5.3 実験手順

SSMS を使用して、データベース Xuni_University_Mis に 3 人のユーザー Xuni_USER1、Xuni_USER2、および Xuni_USER3 を作成します。データベース内でのロールは PUBLIC です。以下の要件に従って管理者または3人のユーザーでデータベースにログインし、操作を実行し、操作結果を記録してください。

          1.  すべてのユーザーにテーブル xun_Courses に対するクエリ権限を付与しますSSMSXuni_USER1としてログインし、 SQL 言語を使用してxun_Courses テーブルxun_Studentsテーブルをクエリします。
          2. ユーザー Xuni_USER1 にテーブル xun_Students に対する挿入および更新権限を付与しますが、削除権限は付与しません。また、ユーザー USER1 に両方の権限を伝播する権限を付与します。SSMS に Xuni_USER1 としてログインし、SQL 言語を使用して xun_Students テーブルを挿入および更新すると、結果はどうなりますか? (アップデート操作の権限に注意してください)
          3. ユーザーXuni_ USER2 は、テーブルxun_ Reports にタプルを挿入し、列xun_ Score を更新し、xn_ Snoを除くすべての列をクエリすることができますSSMS にXuni_ USER2としてログインし、SQL 言語を使用してxun_ reports テーブルの挿入、更新、クエリを実行すると、結果はどうなりますか? (アップデート操作の権限に注意してください)
          4. ユーザーXuni_USER1 は、ユーザーXuni_USER2にテーブルxun_Students を挿入および更新する権限を付与し、ユーザーXuni_USER2に挿入および更新操作を伝播する権限を付与しますSSMS にXuni_USER1Xuni_user2としてそれぞれログインし、上記の認可操作を SQL 言語で検証します。
          5. ユーザー USER1 がテーブル xun_Courses をクエリする権限を取り消します。SSMS にそれぞれXuni_ USER1 とXuni_ USER2としてログインし、SQL 言語でxun_ Courses テーブルにクエリを実行します。クエリ結果は何ですか?
          6. 上記の (2) および (4) によって承認されたユーザーXuni_ USER2 は、ユーザーXuni_ USER3にテーブルxun_ Studentsの挿入および更新の権限を付与し、ユーザーXuni_ USER3 に挿入および更新操作を伝播する権限を付与します。このとき、Xuni_ USER3 がXuni_ USER1 にテーブルxun_ Students の挿入および更新権限を付与した場合、成功するでしょうか? 成功した場合、ユーザー Xuni_USER2 が Xuni_USER3 の権限を取り消した場合、Xuni_USER1どうなりますか? DBA がXuni_USER1の権限を取り消すとXuni_USER2にどのような影響がありますか?
    1. 実験要件

(1) 実験を行う前に、実験の一般条件および実験の指示書をよくお読みください。

(2) SQL Server 2005 または 2008 の SSMS 環境で、上記実験の手順(1)~(6)の SQL データ定義操作をすべて完了し、太字の手順の操作画面を実験レポートに貼り付けます。

5.4実験結果

まず3 人のユーザーを作成します。

( 1 )すべてのユーザーにテーブルxun_ Courses に対するクエリ権限を付与します。SSMSXuni_USER1としてログインし、 SQL 言語を使用してxun_Courses テーブルxun_Studentsテーブルをクエリします。

1.1

認証コード:

grant select
on xun_Courses
to Xuni_USER1,Xuni_USER2,Xuni_USER3

1.2

Xuni_ USER1としてログインするとログインが成功します。スクリーンショットは次のとおりです。

 1.3

クエリ ステートメント、xun_Courses テーブル:

select * from xun_Courses

クエリは成功しました。スクリーンショットは次のとおりです。

 1.4

クエリ ステートメント、xun_Reports テーブル:

select * from xun_Reports

エラー、エラーメッセージ:

メッセージ 229、レベル 14、状態 5、行 1

オブジェクト 'xun_Reports' (データベース 'Xuni_University_Mis'、スキーマ 'dbo') に対する SELECT 権限が拒否されました。

スクリーンショットは次のとおりです。

 ( 3 )ユーザーXuni_ USER2は、テーブルxun_ Reportsにタプルを挿入し、 xn_Sc r o c e 列を更新し、xn_Snoを除くすべての列をクエリすることができますSSMS にXuni_USER2としてログインし、SQL 言語を使用してxun_Reportsテーブルの挿入、更新、クエリを実行すると、結果はどうなりますか? (アップデート操作の権限に注意してください)

3.1

許可されます。コードを更新します。

grant insert,update(xn_Scroce),select(xn_Tno,xn_Cno,xn_Scroce)
on xun_Reports
to Xuni_USER2

スクリーンショットは次のとおりです。コマンドは成功しました。

 

3.2

xun_Reportsテーブルに挿入します

insert into xun_Reports
values('S01','T04','C02','20')

コマンドは成功しました。スクリーンショットは次のとおりです。

 

3.3

xn_Tno など、xn_Scroce を除くテーブル内の他の列を更新します。

update xun_Reports
set xn_Tno='T01' 

エラーメッセージ:

メッセージ 230、レベル 14、状態 1、行 1

オブジェクト 'xun_Reports' (データベース 'Xuni_University_Mis'、スキーマ 'dbo') の列 'xn_Tno' で UPDATE 権限が拒否されました。

以下のスクリーンショット:

 

3.4

xn_Scroce 列を更新すると

update xun_Reports
set xn_Scroce=20

成功

 

3.5

すべてのデータをクエリします。

select *from  xun_Reports

エラーを報告する

メッセージ 230、レベル 14、状態 1、行 1

オブジェクト 'xun_Reports' (データベース 'Xuni_University_Mis'、スキーマ 'dbo') の列 'xn_Sno' で SELECT 権限が拒否されました。

 

3.6

他の列をクエリします。

select xn_Tno,xn_Cno,xn_Scroce
from xun_Reports

成功

 ( 4 )ユーザーXuni_USER1は、ユーザーXuni_USER2にテーブルxun_Students を挿入および更新する権限を付与し、ユーザーXuni_USER2に挿入および更新操作を伝播する権限を付与します。SSMS にXuni_USER1Xuni_USER2としてそれぞれログインし、SQL 言語で上記の認可操作を検証します。

4.1

Xuni_USER1次の権限を付与します。

grant insert,update
on xun_Students
to Xuni_USER2
with grant option

正常に実行されました

 

4.2

Xuni_user2としてログインします

①挿入許可:

insert into xun_Students
values('S23','徐','XN@','34','女')

コマンドは成功しました

② 更新権限:

update xun_Students
set xn_Sname='徐徐'
where xn_Sno='S23'

エラーを報告する

メッセージ 229、レベル 14、状態 5、行 2

オブジェクト 'xun_Students' (データベース 'Xuni_University_Mis'、スキーマ 'dbo') に対する SELECT 権限が拒否されました。

 

4.3

Xuni_USER1としてログインします

できる

( 6 )上記の (2) と (4) によって承認されたユーザーXuni_USER2 はユーザーXuni_USER3にテーブルxun_Students を挿入および更新する権限を付与し、ユーザーXuni_USER3に挿入および更新操作を伝播する権限を付与します。このとき、Xuni_ USER3 がXuni_ USER1 にテーブルxun_ Students の挿入および更新権限を付与した場合、成功するでしょうか? 成功した場合、ユーザー Xuni_USER2 が Xuni_USER3 の権限をキャンセルすると、Xuni_USER1どうなりますか? DBA がXuni_USER1の権限を取り消すとXuni_USER2にどのような影響がありますか?

6.1

ユーザーXuni_ USER2 は、ユーザーXuni_ USER3 に、テーブルxun_ Studentsの挿入および更新の権限コードを付与します

grant insert,update
on xun_Students
to Xuni_USER3
with grant option

 

6.2.

Xuni_USER3によってXuni_USER1に付与されたテーブルxun_Studentsに対するアクセス許可挿入と更新

コード:

grant insert,update
on xun_Students
to Xuni_USER1

コマンドは成功しました

 

6.3.

ユーザーXuni_USER2Xuni_USER3の権限をキャンセルします

コード:

revoke insert,update
on xun_Students
from Xuni_USER3 CASCADE

コマンドは成功しました

 

影響:

このコマンドでUSER3の権限を解除し、

USER3 によって USER1 に付与された対応するアクセス許可も取り消されますが、管理者によって最初に USER1 に付与されたアクセス許可はまだ残っています。以下のように、クエリ権限と更新権限の両方が存在します。

6.4

Xuni_USER1 としてログインし、クエリを実行します

user1
insert into xun_Students
values('S24','徐','XN@','34','男')

正常に挿入されました

 

更新する:

update xun_Students
set xn_Ssex='男'

正常に更新されました

 

6.5

DBA がXuni_USER1の権限を取り消すとXuni_USER2にどのような影響がありますか?

Xuni_USERS にも、xun_Students の更新および挿入関数はありません。

入れる:

insert into xun_Students
values('S24','徐','XN@','34','男')

失敗しました。エラーが報告されました。

メッセージ 229、レベル 14、状態 5、行 1

オブジェクト 'xun_Students' (データベース 'Xuni_University_Mis'、スキーマ 'dbo') に対する INSERT 権限が拒否されました。

 

更新する:

update xun_Students
set xn_Ssex='男'

エラーを報告する

メッセージ 229、レベル 14、状態 5、行 1

オブジェクト 'xun_Students' (データベース 'Xuni_University_Mis'、スキーマ 'dbo') に対する UPDATE 権限が拒否されました。

 

 

5.5実験体験_

1) 実験の反省

1. 実験ではまず複数のユーザー間の関係を整理する必要があります。そうしないと、間違ったコードを入力してしまいやすくなります。

2. Grant ステートメントは、一度に 1 人のユーザーを認可することも、一度に複数のユーザーを認可することもできます。

2) 実験的収穫

1.認可中に循環認可が発生した場合、このエラーは DBS を調べても見つかりません

2. REVOKE 句を使用して許可を取り消すと、カスケード反応が発生します、他のユーザーからこの許可を取得した場合、この許可はまだ存在します。

付録:

1.1
授予查询权限
grant select
on xun_Courses
to Xuni_USER1,Xuni_USER2,Xuni_USER3

1.2
查询
select * from xun_Courses

1.3
查询
select * from xun_Reports

报错

消息 229,级别 14,状态 5,第 1 行
拒绝了对对象 'xun_Reports' (数据库 'Xuni_University_Mis',架构 'dbo')的 SELECT 权限。

2.1

授予权限:

grant insert,update
on xun_Students
to Xuni_USER1
with grant option


命令已成功完成。

2.2
user1插入:
insert into xun_Students
values('S22','徐妮','[email protected]','25','女')

显示:
(1 行受影响)

2.3
更新:
update xun_Students
set xn_Ssex='男'

成功


3.1
grant insert,update(xn_Scroce),select(xn_Tno,xn_Cno,xn_Scroce)
on xun_Reports
to Xuni_USER2

命令成功

3.2
insert into xun_Reports
values('S01','T04','C02','20')

一行受影响

3.3
update xun_Reports
set xn_Tno='T01'

消息 230,级别 14,状态 1,第 1 行
拒绝了对对象“xun_Reports”(数据库“Xuni_University_Mis”,架构“dbo”)的列“xn_Tno”的 UPDATE 权限。

3.4
update xun_Reports
set xn_Scroce=20

成功
3.5
select *from  xun_Reports

消息 230,级别 14,状态 1,第 1 行
拒绝了对对象“xun_Reports”(数据库“Xuni_University_Mis”,架构“dbo”)的列“xn_Sno”的 SELECT 权限。

3.6
select xn_Tno,xn_Cno,xn_Scroce
from xun_Reports

成功
4.1
user1
grant insert,update
on xun_Students
to Xuni_USER2
with grant option

成功执行

4.2
user2身份
insert into xun_Students
values('S23','徐','XN@','34','女')

命令成功

4.3
user2身份
update xun_Students
set xn_Sname='徐徐'
where xn_Sno='S23'

报错
消息 229,级别 14,状态 5,第 2 行
拒绝了对对象 'xun_Students' (数据库 'Xuni_University_Mis',架构 'dbo')的 SELECT 权限。

5.1
管理员
revoke select
on xun_Courses
from Xuni_USER1

命令成功

user1身份.
select * from xun_Courses

报错
消息 229,级别 14,状态 5,第 1 行
拒绝了对对象 'xun_Courses' (数据库 'Xuni_University_Mis',架构 'dbo')的 SELECT 权限。

user2身份.
select * from xun_Courses

命令成功

6.1
user2
grant insert,update
on xun_Students
to Xuni_USER3
with grant option

命令成功
6.2
user3

grant insert,update
on xun_Students
to Xuni_USER1
命令成功

6.3
USER2

revoke insert,update
on xun_Students
from Xuni_USER3 CASCADE

成功

取消对USER3的权限 通过这个指令,
USER3赋予USER1的相应权限也被收回,但最初管理员赋予USER1的权限还在


6.4
user1
insert into xun_Students
values('S24','徐','XN@','34','男')

插入成功

6.5
更新
update xun_Students
set xn_Ssex='男'

6.6
insert into xun_Students
values('S24','徐','XN@','34','男')

报错
消息 229,级别 14,状态 5,第 1 行
拒绝了对对象 'xun_Students' (数据库 'Xuni_University_Mis',架构 'dbo')的 INSERT 权限。

6.7
update xun_Students
set xn_Ssex='男'

报错

消息 229,级别 14,状态 5,第 1 行
拒绝了对对象 'xun_Students' (数据库 'Xuni_University_Mis',架构 'dbo')的 UPDATE 权限。

おすすめ

転載: blog.csdn.net/cangzhexingxing/article/details/125562652