0

別のデータベースのスキーマにアクセスできますが、移行作業の一環として、2 つのスキーマを比較しています。Syscat2つのスキーマを比較するために使用しています。ただし、スキーマの1つで、次のエラーが表示されます

"ユーザーには選択権限がありません"

特定のスキーマ (基本的には、アクセス権を持つすべてのユーザーと、gievn スキーマのアクセスの種類) に設定されているすべてのアクセス許可を確認する方法を教えてください。データベースはdb2です。スキーマクローラーなどのツールは使用していないことに注意してください。代わりに、を使用しSyscatて詳細を照会する JDBC アプリケーションを作成しています。select * from syscat.tables where tabSchema = <schemaName>

ツールなどの使用は、承認、正当化などの点で長いプロセスです (個人的には、分析から始めるには JDBC プログラムが適していると思います)。

4

2 に答える 2

0

スキーマは、オブジェクトの論理グループです。これらのオブジェクトには、ビュー、テーブル、インデックス、シーケンス、関数、ソートされたプロシージャなどがあります。これらの各オブジェクトには、異なる一連の権限があります。テーブルには選択、挿入、削除などがあります。ストアドプロシージャには実行などがあります。など。これは、すべてのオブジェクトが異なるタイプの特権を持っていることを意味し、「特定のスキーマのすべての特権」を取得することはできません。オブジェクトのタイプを指定する必要があります。

たとえば、特定のスキーマのテーブルに対する権限を取得するには、次を実行できます。

db2 "
select substr(GRANTEE,1,16),GRANTEETYPE,substr(tabschema || '.' || tabname,1,64),
CONTROLAUTH, ALTERAUTH, DELETEAUTH, INDEXAUTH, INSERTAUTH, REFAUTH, SELECTAUTH, UPDATEAUTH 
from syscat.TABAUTH 
where tabschema like 'MYSCHEMA%'"

オブジェクトの種類ごとに、その種類のオブジェクトに対する特権を含む syscat スキーマ内のテーブル。テーブルをクエリするだけです。

同様の方法で、オブジェクトに対する権限を付与または取り消すために、適切な文を作成できます。

select 'grant select on ' || trim(tabschema) || '.' || trim(tabname) ' to user johndoe'
from syscat.tables
where tabschema like 'MYSCHE%'

最後に、db2 に対する特権 (付与) だけでなく、データベース レベルの権限もあり、それらのいくつかはすべてのオブジェクトに対する特権を持っています。

于 2013-10-10T08:12:33.340 に答える
0

DB2 では、スキーマに対して付与された特権によって、そのスキーマに属するオブジェクトに対する特権は与えられません (それらのオブジェクトを自分で作成した場合を除く)。明示的なオブジェクト権限または特定のデータベース レベルの権限 (DATAACCESS など) が付与されている必要があります。

実際の DB2 エラー メッセージには、エラーを生成したオブジェクトの名前が含まれている必要があります。SQLException オブジェクトの文字列表現を出力してみてください。

于 2013-10-09T18:59:40.907 に答える