「S2 運用管理 - S2.5 基本的な運用管理作業(テーブル単位の権限(GRANT/REVOKE))」からの出題です。
テーブルの所有者は、テーブルに対してすべての権限を有するので、REVOKEでSELECT権限を取り消しても、引き続きテーブルからデータをSELECTできる。
テーブルt1についてのSELECT権限をユーザu1とpublicに対してGRANTした後、この権限をu1からREVOKEした。このとき、ユーザu1はテーブルt1のデータをSELECTできない。
テーブルt2についてのSELECT権限をユーザs1がユーザu2にGRANTした後、ユーザs2も同じユーザu2にGRANTした。この後、ユーザs1がt2についてのSELECT権限をu2からREVOKEした。このとき、ユーザu2はテーブルt2のデータをSELECTできる。なお、ユーザs1もs2もt2のSELECTをGRANTする権限を有するものとする。
※この例題は実際のOSS-DB技術者認定試験とは異なります。
例題公開日:2022年10月12日
デフォルトでは、テーブルの所有者(通常は作成したユーザ)のみがテーブルへのアクセス権を持っており、他のユーザがテーブルにアクセスできるようにするにはGRANTで権限を付与する必要があります。付与した権限はREVOKEによって取り消すこともできます。
GRANTコマンドをWITH GRANT OPTIONを指定して実行した場合、権限を付与されたユーザはその権限を他のユーザにGRANTで付与できるようになります。逆にWITH GRANT OPTIONが指定されていない場合は、権限を他のユーザにGRANTできないので、権限を持っているからと言って、それを他のユーザに付与できるとは限りません。
REVOKEで権限を取り消すことができるのは、GRANTを実行したユーザです。例えばユーザAがWITH GRANT OPTIONをつけてユーザBに権限を付与し、ユーザBがその権限をユーザCにGRANTした場合、ユーザCの権限をREVOKEできるのはユーザBだけです。なお、ユーザAがCASCADEオプション付きでユーザBから権限をREVOKEした場合は、ユーザCからもREVOKEされます。
テーブルの所有者はテーブルについてすべての権限を有しているので、明示的に権限をGRANTしなくてもアクセスできますが、自分自身の権限をREVOKEしてSELECTやDELETEなどの操作ができなくすることは可能です。この場合でも、テーブルの所有者として権限をGRANTすることはできますから、自身にSELECT権限などを付与すれば、再びアクセスできるようになります。
ユーザu1とpublicにテーブルt1のSELECT権限をGRANTした後、u1の権限をREVOKEした場合、取り消されるのはu1へのGRANTの部分だけで、publicへのGRANTは引き続き、残ります。従って、u1を含む全ユーザがt2からSELECTできる状態になっています。
ユーザs1とs2がそれぞれユーザu2にテーブルt2のSELECT権限をGRANTしたとき、データベース内部には、s1がu2にGRANTした権限、s2がu2にGRANTした権限の両方が記録されます。この後、s1が権限をREVOKEしたときに取り消されるのは、s1が付与した権限のみで、s2が付与した権限はそのまま残りますから、ユーザu2は引き続きt2からSELECTすることができます。
従って正解はEです。
例題解説についてのご質問やご意見は以下からご連絡ください。
※本例題および解説は、例題作成者から提供されたものです。実際の試験問題とは異なります。
※実際の試験問題に関するお問い合わせについてはご回答いたしかねます。あからじめご了承ください。
© EDUCO All Rights Reserved.