The error ORA-01031: insufficient privileges is typically thrown if a user lacks a privilege to execute an SQL statement (when already connected to the database, in contrast to ORA-01031: insufficient privileges which is raised if a user cannot be authenticated to connect to the database).
Necessary privileges can be given to a user (or a role) with the grant statement.
Starting an instance
If this error is thrown when an instance is started up, it might indicate that the user trying to start the instance does not belong to the ora_dbagroup on Windows or dba group on Unix.
On Windows, a user can be added to the Window group with
MOS Note 730067.1 points out that ORA-01031 may be thrown if the definition of SQLNET.AUTHENTICATION_SERVICES in tnsnames.ora has leading blank spaces.