「運用管理 - 基本的な運用管理作業(テーブル単位の権限(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です。
今回の解説について、理解できないポイントがあればどんどん質問をお寄せ下さい。
採用になった方にはLPI-Japanオリジナルの記念品を贈呈します。
※試験問題に関わるお問い合わせにつきましては、LPI-Japan事務局ではお応えできませんのでご了解ください。
© EDUCO All Rights Reserved.