oracle12cを使用します。すべてのテーブルのすべての特権をユーザーに付与しようとしています。そして将来的には、そのユーザーに特権を追加する必要はありません。これを行う必要があります。そのユーザーにシステムテーブルを付与したくありません。 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 

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

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 

コメント

  • doubleを追加してみてください所有者とテーブル名への引用。すぐに実行'すべての特権を" ' ||に付与しますt.owner || ' "。" ' || t.table_name || ' "からGGSTEST ';
  • IX.AQ $ _STREAMS_QUEUE_TABLE_LのすべてをGGSTESTに付与します。エラーではありません。しかし、pl / sql、ループ;エラーが発生します。
  • 次に、これを試してください:GRANT ALL ONIX。" AQ $ _STREAMS_QUEUE_TABLE_L " TO GGSTEST If 'は機能しません。高度なキュー機能を備えている可能性があります…
  • 何'オブジェクトのタイプ? OBJECT_TYPE、STATUS From dba_objects where owner = ' IX 'およびobject_name = ' AQを選択します$ _STREAMS_QUEUE_TABLE_L '
  • 試してみました'は機能しました。ステータスタイプ= TABLEおよびステータス=有効

回答

GRANT ALL PRIVILEGES ON ....はMySQLprivs構文です。

必要な作業:

GRANT ALL ON SCHEMA.TABLE TO USER 

のドキュメントを参照

コメント

  • こんにちは、MySQL構文でもあることを教えましたが、:チェックこれ
  • grant all privileges to USERNAMEは完全に異なり、データベース全体のものです。

ユーザーへのテーブルのオブジェクト権限の付与:例"

  • 実際、神は知っています。 'テストに便利なDBがない:/
  • 同じエラーが発生します。
  • 回答

    これは正しいコマンドです。以前は、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によって解釈されることが原因です。二重引用符を追加することで、エラーが発生しなくなります。

    よろしくお願いします。

    コメント

    • 多分ハッシュ。 'ドル記号でエラーが発生しません。
    • APEX、XDB、FLOW_FILES、ORDDATAスキーマを除外し、'は機能しました。

    回答

    試してみますすべてのテーブルのすべての特権をユーザーに付与します。

    >なぜですか?

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

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

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

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

    広大な大多数のユーザーは、どのテーブルでも「すべての権限」を必要としない(または必要としない)。選択、挿入、削除、更新だけで十分です。
    一部のユーザーがどこかでテーブルを削除することを決定したため、本番システムがどのようにダウンしたかを管理者にどのように説明しますか(回復するのに かかります)。 、彼らができることを発見したという理由だけで?それはユーザーの責任ではないので、そもそもユーザーはそれに対する許可を持っているべきではありません。

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

    コメント

    • これらは本当のことかもしれませんが、スキーマが変更されているかどうか、環境が開発か本番か、そして'が個人的なプロジェクトまたは彼の会社の場合。彼の実際の構文関連の問題に対処することはありません。

    コメントを残す

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です