データベース原理と応用実験レポート
実験テーマ 実験5データ制御
5.1 実験の目的
SQL のデータ制御機能に精通しており、SQL ステートメントを使用してユーザーに権限を付与および取り消しできること。
5.2 実験内容
-
-
-
- GRANT ステートメントを使用してユーザーを認可するか、単一ユーザーまたは複数のユーザーを認可するか、予約語 PUBLIC を使用してすべてのユーザーを認可します。データベース、ビュー、基本テーブルなどの操作オブジェクトごとに異なる権限を付与します。
- WITH GRANT OPTION 句を使用して、権限を伝播する権利をユーザーに付与します。
- 認可中に循環認可が発生した場合は、DBS がこのエラーを検出できるかどうかを確認してください。そうでない場合は、認可のキャンセル操作と組み合わせて、循環認可に関する DBS の制御を確認してください。
- REVOKE 句を使用して認可を取り消し、認可カスケードをキャンセルします。
-
-
5.3 実験手順
SSMS を使用して、データベース Xuni_University_Mis に 3 人のユーザー Xuni_USER1、Xuni_USER2、および Xuni_USER3 を作成します。データベース内でのロールは PUBLIC です。以下の要件に従って管理者または3人のユーザーでデータベースにログインし、操作を実行し、操作結果を記録してください。
-
-
-
-
- すべてのユーザーにテーブル xun_Courses に対するクエリ権限を付与します。SSMSにXuni_USER1としてログインし、 SQL 言語を使用してxun_Courses テーブルとxun_Studentsテーブルをクエリします。
- ユーザー Xuni_USER1 にテーブル xun_Students に対する挿入および更新権限を付与しますが、削除権限は付与しません。また、ユーザー USER1 に両方の権限を伝播する権限を付与します。SSMS に Xuni_USER1 としてログインし、SQL 言語を使用して xun_Students テーブルを挿入および更新すると、結果はどうなりますか? (アップデート操作の権限に注意してください)
- ユーザーXuni_ USER2 は、テーブルxun_ Reports にタプルを挿入し、列xun_ Score を更新し、xn_ Snoを除くすべての列をクエリすることができます。SSMS にXuni_ USER2としてログインし、SQL 言語を使用してxun_ reports テーブルの挿入、更新、クエリを実行すると、結果はどうなりますか? (アップデート操作の権限に注意してください)
- ユーザーXuni_USER1 は、ユーザーXuni_USER2にテーブルxun_Students を挿入および更新する権限を付与し、ユーザーXuni_USER2に挿入および更新操作を伝播する権限を付与します。SSMS にXuni_USER1とXuni_user2としてそれぞれログインし、上記の認可操作を SQL 言語で検証します。
- ユーザー USER1 がテーブル xun_Courses をクエリする権限を取り消します。SSMS にそれぞれXuni_ USER1 とXuni_ USER2としてログインし、SQL 言語でxun_ Courses テーブルにクエリを実行します。クエリ結果は何ですか?
- 上記の (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) 実験を行う前に、実験の一般条件および実験の指示書をよくお読みください。
(2) SQL Server 2005 または 2008 の SSMS 環境で、上記実験の手順(1)~(6)の SQL データ定義操作をすべて完了し、太字の手順の操作画面を実験レポートに貼り付けます。
5.4実験結果
まず3 人のユーザーを作成します。
( 1 )すべてのユーザーにテーブルxun_ Courses に対するクエリ権限を付与します。SSMSにXuni_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_USER1とXuni_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_USER2がXuni_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 权限。