web-dev-qa-db-ja.com

データベース内のすべてのテーブルのすべての権限をユーザーに付与する

Oracle 12cを使用しています。すべてのテーブルのすべての特権をユーザーに付与しようとしています。将来的には、そのユーザーに特権を追加する必要はありません。これを行う必要があります。そのユーザーにシステムテーブルを付与したくありません。 pl/sqlコマンドを書いた。エラーが発生します。

BEGIN
  2  FOR t IN (select * from dba_tables where owner not like '%SYS%' AND owner not like '%ADMIN%' AND iot_type IS NULL)
  3  LOOP
  4  EXECUTE IMMEDIATE 'GRANT ALL PRIVILEGES ON '|| t.owner ||'.' || t.table_name ||' TO GGSTEST';
  5  END LOOP;
  6  END;
  7  /
BEGIN
*
ERROR at line 1:
ORA-00905: missing keyword
ORA-06512: at line 4

間違いは何ですか?ありがとう。

私はdbms_printを使用します

GRANT ALL ON OUTLN.OL$ TO GGSTEST
GRANT ALL ON OUTLN.OL$HINTS TO GGSTEST
GRANT ALL ON OUTLN.OL$NODES TO GGSTEST
GRANT ALL ON DBSNMP.BSLN_BASELINES TO GGSTEST
GRANT ALL ON APEX_040200.WWV_FLOW_LOG_HISTORY TO GGSTEST
GRANT ALL ON DBSNMP.BSLN_METRIC_DEFAULTS TO GGSTEST
GRANT ALL ON XDB.XDB$ROOT_INFO TO GGSTEST
GRANT ALL ON XDB.XDB$XDB_READY TO GGSTEST
GRANT ALL ON XDB.XDB$CDBPORTS TO GGSTEST
GRANT ALL ON XDB.XDB$IMPORT_TT_INFO TO GGSTEST
GRANT ALL ON XDB.XDB$TTSET TO GGSTEST
GRANT ALL ON XDB.XDB$H_INDEX TO GGSTEST
GRANT ALL ON XDB.XDB$D_LINK TO GGSTEST
GRANT ALL ON XDB.XDB$COLUMN_INFO TO GGSTEST
GRANT ALL ON XDB.XDB$PATH_INDEX_PARAMS TO GGSTEST
GRANT ALL ON XDB.X$NM7UJB7VOLFE92KV0GUML7K0LVSF TO GGSTEST
GRANT ALL ON XDB.X$QN7UJB7VOLFE92KV0GUML7K0LVSF TO GGSTEST
GRANT ALL ON XDB.X$PT7UJB7VOLFE92KV0GUML7K0LVSF TO GGSTEST
GRANT ALL ON XDB.APP_USERS_AND_ROLES TO GGSTEST
GRANT ALL ON XDB.APP_ROLE_MEMBERSHIP TO GGSTEST
GRANT ALL ON XDB.XDB$DBFS_VIRTUAL_FOLDER TO GGSTEST
BEGIN
*
ERROR at line 1:
ORA-00905: missing keyword
ORA-06512: at line 4

GRANT ALL PRIVILEGES ON ....はMySQLの特権構文です。

あなたがする必要があります:

GRANT ALL ON SCHEMA.TABLE TO USER 

ドキュメント を参照してください。

2
Philᵀᴹ

それは正しいコマンドです。以前は、Oracleのインストールテーブルが原因でエラーが発生しました。

BEGIN
    FOR t IN (select * from dba_tables where owner!='GGSTEST' AND owner not like '%SYS%' AND owner not like '%ORDDATA%' AND owner not like '%ADMIN%' AND owner not like '%APEX%' AND owner not like '%XDB%' AND owner not like '%FLOW_FILES%' AND owner not like '%OE%' AND iot_type IS NULL)
    LOOP
    EXECUTE IMMEDIATE 'GRANT ALL PRIVILEGES ON '|| t.owner ||'.' || t.table_name ||' TO GGSTEST';
    END LOOP;
    END;
    /

問題は、ドル記号やハッシュタグなどの文字がPL/SQLによって解釈されるためです。二重引用符を追加すると、エラーが発生しなくなります。

よろしく。

1

すべてのテーブルのすべての特権をユーザーに付与しようとしています。

どうして?

将来的には、そのユーザーに特権を追加する必要はありません。

はい、そうします。
別のテーブルを追加したらすぐに、プロセス全体およびを繰り返す必要があり、すべてのユーザーに対してこれを行う必要があります。これはあなたの時間の効率的な使用ではないことをお勧めします。

これを行う必要があります。

同意しないことに同意します。

vastユーザーの大多数は、どのテーブルに対する「すべての特権」も必要としない(または望んでいない)。選択、挿入、削除、更新は、ユーザーが必要とするすべてであり、ユーザーがすべて提供される必要があります。
生産システムがどのようにダウンしたかを経営陣にどのように説明しますか(回復するのにあなたにかかります)一部のユーザーは、どこかに、テーブルを削除することを決定しました。それはユーザーの責任ではないので、それらのには権限がありませんそもそもそれに。

役割について読んでください。
オブジェクトレベルの権限をロールに付与し、そのロールを[多くの]ユーザーに付与します。テーブルを変更するときは、関連するロールに権限を[再]付与するだけで済みます。 Oracleは、これらの特権を関連するユーザーに「カスケード」します。ユーザーのグループごとに異なる「レベル」の権限が必要な場合は、複数のロールを作成します。

0
Phill W.