Sono nuovo di Oracle DB e non so davvero quale tipo di privilegi dovrei impostare per un utente in modo che possa eseguire comandi di base come creare, rilasciare, eliminare, inserire, aggiornare, selezionare tabelle.
E in realtà ho impostato tutti quei privilegi per il mio account utente. Ma durante l'esecuzione della migrazione, non è riuscito con il seguente errore stampato nella finestra della console:
27-05-2019 08: 29: 07.837809 ID discussione: 1 (ERRORE) OracleRelationalCommand.Execute (): Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-01031: privilegi insufficienti ORA-06512: alla riga 2 di OracleInternal.ServiceObjects .OracleConnectionImpl.VerifyExecution (Int32 & cursorId, booleano bThrowArrayBindRelatedErrors, SqlStatementType sqlStatementType, Int32 arrayBindCount, OracleException & exceptionForArrayBindDML, booleano e hasMoreRowsInDB, booleano bFirstIterationDone) a OracleInternal.ServiceObjects.OracleCommandImpl.ExecuteNonQuery (String commandText, OracleParameterCollection paramColl, CommandType CommandType, OracleConnectionImpl connectionImpl, Int32 longFetchSize, Int64 clientInitialLOBFS, OracleDependencyImpl orclDependencyImpl, Int64 [] & scnFromExecution, OracleParameterCollection & bindByPositionParamColl, Boolean & bBindParamPresent, OracleException & exceptionForArrayBindDML, OracleConnectionolansansTrogansaction F) a Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteNonQuery () a Oracle.EntityFrameworkCore.Storage.Internal.OracleRelationalCommandBuilderFactory.OracleRelationalCommandBuilder.OracleRelationalCommand.Execute (connessione IRelationalConnection, DbCommandMethod executeMethod, IReadOnlyDictionary
2 parameterValues) Failed executing DbCommand (292ms) [Parameters=[], CommandType='Text', CommandTimeout='0'] BEGIN EXECUTE IMMEDIATE 'CREATE TABLE "CUSTOMER" ( "Id" NUMBER(10) GENERATED BY DEFAULT ON NULL AS IDENTITY NOT NULL, ... )'; END; 2019-05-27 08:29:07.842817 ThreadID:1 (ERROR) OracleRelationalCommand.Execute() : Oracle.ManagedDataAccess.Client.OracleException (0x80004005): ORA-01031: insufficient privileges ORA-06512: at line 2 at OracleInternal.ServiceObjects.OracleConnectionImpl.VerifyExecution(Int32& cursorId, Boolean bThrowArrayBindRelatedErrors, SqlStatementType sqlStatementType, Int32 arrayBindCount, OracleException& exceptionForArrayBindDML, Boolean& hasMoreRowsInDB, Boolean bFirstIterationDone) at OracleInternal.ServiceObjects.OracleCommandImpl.ExecuteNonQuery(String commandText, OracleParameterCollection paramColl, CommandType commandType, OracleConnectionImpl connectionImpl, Int32 longFetchSize, Int64 clientInitialLOBFS, OracleDependencyImpl orclDependencyImpl, Int64[]& scnFromExecution, OracleParameterCollection& bindByPositionParamColl, Boolean& bBindParamPresent, OracleException& exceptionForArrayBindDML, OracleConnection connection, OracleLogicalTransaction& oracleLogicalTransaction, Boolean isFromEF) at Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteNonQuery() at Oracle.EntityFrameworkCore.Storage.Internal.OracleRelationalCommandBuilderFactory.OracleRelationalCommandBuilder.OracleRelationalCommand.Execute(IRelationalConnection connection, DbCommandMethod executeMethod, IReadOnlyDictionary
): ORA-01031: privilegi insufficienti ORA-06512: alla linea 2 a OracleInternal.ServiceObjects.OracleConnectionImpl.VerifyExecution (Int32 & cursorId, booleano bThrowArrayBindRelatedErrors, sqlStatementType sqlStatementType, Int32 arrayBindCount, OracleException & exceptionForArrayBindDML, booleano e hasMoreRowsInDB, booleano bFirstIterationDone) a OracleInternal.ServiceObjects. OracleCommandImpl.ExecuteNonQuery (String commandText, OracleParameterCollection paramColl, CommandType commandType, OracleConnectionImpl connectionImpl, Int32 longFetchSize, Int64 clientInitialLOBFS, OracleDependencyImpl orclDependencyImpl, Int64 [ ] & ScnFromExecution, OracleParameterCollection & bindByPositionParamColl, booleano e bBindParamPresent, OracleException & exceptionForArrayBindDML, connessione OracleConnection, a Oracle.EntityFrameworkCore.Storage.Internal.OracleRelationalCommandBuilderFactory.OracleRelationalCommandBuilder.OracleRelationalCommand.Execute OracleLogicalTransaction & oracleLogicalTransaction, booleano isFromEF) a Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteNonQuery () (Connessione IRelationalConnection, DbCommandMethod executeMethod, IReadOnlyDictionary2 parameterValues) at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteNonQuery(IRelationalConnection connection, IReadOnlyDictionary
, IRCr. connessione) su Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate (String targetMigration) su Microsoft.EntityFramewo rkCore.Design.Internal.MigrationsOperations.UpdateDatabase (String targetMigration, String contextType) in Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute (Azione azione) ORA-01031: privilegi insufficienti ORA-06512: alla riga 2
Quindi sembra che il comando sql coinvolto qui sia BEGIN EXECUTE IMMEDIATE …
. Non sono così sicuro di quale tipo di privilegi dovrei impostare affinché questo venga eseguito con successo. Potresti dare un'occhiata alle informazioni di errore sopra per darmi qualche suggerimento per impostare correttamente i privilegi per il mio account utente? Grazie!
PS: schermate che mostrano tutti i privilegi che ho impostato:
Bene, sembra che il privilegio CREATE TABLE
sia corretto solo quando la tabella da creare non contiene alcuna chiave primaria auto-incrementata?
Nel mio caso non è abbastanza e ho provato ad aggiungere altri 2 privilegi (di sicuro ma non so davvero se quale sia il trucco o entrambi): CREATE CLUSTER
e CREATE SEQUENCE
. Sembra che durante la creazione delle mie tabelle, debba prima creare una sequenza (per le colonne di identità) o creare un cluster per la chiave primaria ...
In realtà ho appena provato a cercare nel ruolo RESOURCE
eventuali privilegi che mancano per il mio utente specifico e ho trovato i 2 privilegi più possibili come menzionato sopra.
Ora funziona bene, tutti i tavoli possono essere creati bene :) bloccandomi per circa 1 giorno (ovviamente non sempre mi concentro su di esso, ma aspetto e penso davvero alla causa).