I created a user "UserA" and granted it Create session, user, tablespace privileges. Now logged in as "UserA", I have successfully created another user "UserB" but unable to run grant privileges to "UserB" with error: ORA-01031: insufficient privileges. What privileges should "UserA" have to be able to run grant statements?
CodePudding user response:
This is what you currently have (I presume so, as you didn't post what you exactly did):
Connected as a privileged user (sys
), I'm creating a new user who's being granted create session
and create user
privileges:
SQL> connect sys@pdb1 as sysdba
Enter password:
Connected.
SQL> select tablespace_name from dba_tablespaces;
TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
TEMP
USERS
SQL> create user usera identified by usera
2 default tablespace users
3 temporary tablespace temp
4 quota unlimited on users;
User created.
SQL> grant create session, create user to usera;
Grant succeeded.
As usera
has been granted the create user
privilege, it is allowed to create a new user - userb
:
SQL> connect usera/usera@pdb1
Connected.
SQL> create user userb identified by userb
2 default tablespace users
3 temporary tablespace temp
4 quota unlimited on users;
User created.
But, granting create session
fails because usera
isn't allowed to do that:
SQL> grant create session to userb;
grant create session to userb
*
ERROR at line 1:
ORA-01031: insufficient privileges
SQL>
So, what can you do?
One option is to use the with admin option
; back to sys
and re-grant it to usera
:
SQL> connect sys@pdb1 as sysdba
Enter password:
Connected.
SQL> grant create session to usera with admin option;
Grant succeeded.
Can usera
now grant create session
to userb
? Yes!
SQL> connect usera/usera@pdb1
Connected.
SQL> grant create session to userb;
Grant succeeded.
SQL>
Another option is to grant dba
role to usera
:
SQL> connect sys@pdb1 as sysdba
Enter password:
Connected.
Revoking create session
from usera
will cascade to userb
who can't create session any more:
SQL> revoke create session from usera;
Revoke succeeded.
Only usera
has create session privilege:
SQL> grant create session to usera;
Grant succeeded.
But, grant dba
as well
SQL> grant dba to usera;
Grant succeeded.
Can usera
now grant create session
to userb
? Yes!
SQL> connect usera/usera@pdb1
Connected.
SQL> grant create session to userb;
Grant succeeded.
SQL>
However: note that both with admin option
and dba
are powerful and - if you don't pay attention - you might have a security hole in your system. Leave powerful privileges to powerful users only; all the others shouldn't be doing such tasks.