Používám Oracle 12c. Snažím se uživateli udělit všechna oprávnění všech tabulek. A v budoucnu tomuto uživateli nemusím přidávat žádná oprávnění. Musím to udělat. Nechci tomuto uživateli přidělit systémové tabulky. Napsal jsem příkaz pl / sql. ale dává chybu.

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 

Jaká je chyba? děkuji.

Používám 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 

Komentáře

  • Zkuste přidat double uvozovky pro vlastníka a název tabulky. PROVÁDĚTE OKAMŽITĚ ' UDĚLTE VŠECHNY VÝHODY NA " ' || t.owner || ' ". " ' || t.table_name || ' " TO GGSTEST ';
  • GRANTUJTE VŠE NA IX.AQ $ _STREAMS_QUEUE_TABLE_L TO GGSTEST; není to chyba. Ale pl / sql, smyčka; dává chybu.
  • zkuste toto: GRANT VŠE NA IX. " AQ $ _STREAMS_QUEUE_TABLE_L " TO GGSTEST, pokud nefunguje ', může to být něco s funkcí Advanced Queue …
  • Co ' s typ objektu? vyberte OBJECT_TYPE, STATUS From dba_objects where owner = ' IX ' a object_name = ' AQ $ _STREAMS_QUEUE_TABLE_L '
  • Zkoušel jsem to ' s fungovalo. Typ stavu = TABULKA a status = PLATNÝ

Odpověď

GRANT ALL PRIVILEGES ON .... je syntaxe privátních souborů MySQL.

Musíte udělat:

GRANT ALL ON SCHEMA.TABLE TO USER 

Viz dokumentaci .

Komentáře

  • Ahoj, naučil jsem se, že to byla také syntaxe MySQL, ale: zkontrolovat toto
  • grant all privileges to USERNAME je úplně jiné a jedná se o celou db.
  • Existuje sekce s názvem " Udělení oprávnění k objektu uživateli: Příklad "
  • Bůh to vlastně ví. Nepoužívejte ' DB vhodné k testování: /
  • Poskytuje stejnou chybu ..

Odpověď

Je to správný příkaz. Dříve to dávalo chybu kvůli instalačním tabulkám 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; / 

Odpovědět

problém je způsoben tím, že znaky jsou interpretovány PL / SQL, jako je znak dolaru nebo značka hash. Přidáním dvojitých uvozovek už chybu nedostanete.

S pozdravem.

Komentáře

  • možná hash. nedává ' chybu se znakem dolaru.
  • Vylučuji schémata APEX, XDB, FLOW_FILES, ORDDATA a ' s fungoval.

Odpověď

Snažím se udělit uživateli všechna oprávnění všech tabulek.

Proč?

A v budoucnu tomuto uživateli nemusím přidávat žádná oprávnění.

Ano, budete.
Jakmile přidáte další tabulku, musíte celý proces opakovat a musíte to udělat pro každého uživatele. Navrhuji, aby nejde o efektivní využití vašeho času.

Musím to udělat.

Souhlasíme s nesouhlasem.

Drtivá většina uživatelů nepotřebuje (nebo nechce) „všechna oprávnění“ na libovolnou tabulku; výběr, vložení, mazání a aktualizace je vše, co potřebují a vše, co by měli být dán.
Jak vysvětlíte svému managementu, jak výrobní systém selhal (jak dlouho trvá vy jej obnovit), protože nějaký uživatel se někde rozhodl zrušit tabulku , jen proto, že zjistili, že mohou? To není zodpovědnost uživatele, takže by neměli mít k tomu vůbec povolení.

Přečtěte si role.
Udělte roli roli na úrovni objektu a poté ji udělte [mnoha] uživatelům. Když upravujete tabulky, musíte pouze [znovu] udělit oprávnění příslušným rolím; Společnost Oracle se postará o „kaskádování“ těchto oprávnění pro příslušné uživatele. Pokud potřebujete různé „úrovně“ oprávnění pro různé skupiny uživatelů, vytvořte více rolí.

Komentáře

  • I když se může jednat o pravdivé věci, nikdy neposkytuje informace o tom, zda se schéma mění, zda je env dev nebo production, a pokud ' s pro osobní projekt nebo jeho společnost. Nikdy neřešíte jeho skutečný problém související se syntaxí.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *