Informix、すべてのテーブルで選択を許可します
-
22-07-2019 - |
質問
Informix を使用すると、次のことが可能になります grant select
みたいなテーブルの上に。
grant select on 'dba'.mytable to someuser as dba;
データベース内のすべてのテーブルに対してこれを実行するにはどうすればよいですか?
解決
これを行う簡単な方法は (SQL 標準でも Informix でも) ありませんが、その特定の権限は通常はデフォルトで付与されるため、通常は必要ありません。しかし、実際には、より一般的な操作も実行したいと考えており、どのようなオプションがあるのか知りたいと考えていると思います。
目的とシステムのセットアップ方法に応じて、さまざまな方法で目標を達成できます。
ブルートフォース - 質問に対する直接の回答
SELECT 'GRANT SELECT ON "' || TRIM(owner) || '".' || TRIM(tabname) ||
' TO someuser AS dba;'
FROM "informix".systables
WHERE tabid >= 100;
ここからの出力を取得してプログラムに入力します。私が使う SQLCMD 特に不要な出力が生成されないため、ジョブにとって有利です。
sqlcmd -d dbname -e "
SELECT 'GRANT SELECT ON \"' || TRIM(owner) || '\".' || TRIM(tabname) ||
' TO someuser AS dba;'
FROM "informix".systables
WHERE tabid >= 100;" |
sqlcmd -d dbname -f -
シェルを回避するには、追加のバックスラッシュが必要です。'-f -
' オプションは厳密には必要ではありませんが、2 番目の SQLCMD が標準入力から読み取ることを明示してください。DB-Access を使用する場合は、DB-Access が生成する冗長な表現について心配する必要があります。それが、私が最初に SQLCMD を作成した理由です。
明らかに、このソリューションは非常に簡単にスクリプト化して一般化できます。引用符の使用に注意する必要があるだけです。
ロールの使用
もう 1 つのオプションは、必要なすべての権限を持つロールを作成し、必要に応じてそのロールをユーザーに付与することです。この欠点は、接続するユーザーにその権限が与えられるようにソフトウェアで役割を設定する必要があることです。1 つの可能性は、選択専用ロールを各ユーザーのデフォルトのロールとして設定することです。
Server Studio Java Edition の使用
SSJE には、このタスクを簡素化する権限管理ツールがあります。
Open Admin Tooの使用
OAT には権限管理に役立つツールがあります。