Oracle CREATE USER 权限
Oracle CREATE USER privilege
晚上好!
问题是 - 我授予某些用户创建、更改和删除用户的权限(创建用户、更改用户、删除用户)但是当我尝试使用该用户创建用户时,它说该用户没有足够的权限特权。应该怎么做才能解决这个问题?
提前谢谢大家!
编辑:我使用 Oracle Database 18c 快捷版
编辑2:
用户创建:
SQL> CREATE USER predefined
2 IDENTIFIED BY pf
3 DEFAULT TABLESPACE USERS
4 QUOTA 50M ON USERS
5 TEMPORARY TABLESPACE TEMP;
User created.
SQL> GRANT CREATE SESSION TO predefined;
Grant succeeded.
SQL> GRANT CREATE ANY TABLE, CREATE ANY SEQUENCE, CREATE ANY VIEW, CREATE ANY PROCEDURE, CREATE ANY INDEX, CREATE ANY TRIGGER TO predefined
Grant succeeded.
SQL> GRANT CREATE USER TO predefined;
Grant succeeded.
SQL> GRANT ALTER USER TO predefined;
Grant succeeded.
SQL> GRANT DROP USER TO predefined;
Grant succeeded.
当我尝试用该用户创建用户时,我得到了这个:
SQL> CREATE USER predefined2
2 IDENTIFIED BY pf2
3 DEFAULT TABLESPACE USERS
4 QUOTA 5M ON USERS
5 TEMPORARY TABLESPACE TEMP;
CREATE USER predefined2
*
ERROR at line 1:
ORA-01031: insufficient privileges
另一件事 - 我检查了 USER_SYS_PRIVS
table,它向我显示了这个:
USERNAME PRIVILEGE ADM COM INH
-------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------- --- --- ---
PREDEFINED ALTER USER NO NO NO
PREDEFINED CREATE USER NO NO NO
PREDEFINED DROP USER NO NO NO
PREDEFINED CREATE ANY VIEW NO YES NO
PREDEFINED CREATE ANY PROCEDURE NO YES NO
PREDEFINED CREATE ANY SEQUENCE NO YES NO
PREDEFINED CREATE SESSION NO YES NO
PREDEFINED CREATE ANY TRIGGER NO YES NO
PREDEFINED CREATE ANY INDEX NO YES NO
PREDEFINED CREATE ANY TABLE NO YES NO
我注意到,在 COM
列中,它没有创建用户、更改用户和删除用户权限。所以也许它必须对此做些什么?
嗯,你不应该有那个问题。至少我没有。
作为 SYS,我正在创建一个将被授予 CREATE USER
权限的全新用户:
SQL> show user
USER is "SYS"
SQL> create user predefined identified by pf;
User created.
SQL> grant create session, create user to predefined;
Grant succeeded.
那么,它有效吗?
SQL> connect predefined/pf
Connected.
SQL> create user test identified by test;
User created.
SQL>
是的,确实如此。
请编辑问题和post你到底做了什么(就像我一样)以便我们可以看到它。
所以问题是 - 我在授予权限时没有添加 CONTAINTER=ALL
子句。
所以 GRANT 子句应该是这样的
GRANT CREATE USER TO predefined CONTAINTER=ALL;
之后,创建新用户成功。
编辑:
在做了一些研究之后,我发现那些是系统权限,所以如果你想将它们从系统用户授予另一个用户,你必须在 grant 子句的末尾添加 CONTAINER = ALL
子句。
如果我错了,请纠正我,但我希望这对将来的人也有帮助! :)
晚上好!
问题是 - 我授予某些用户创建、更改和删除用户的权限(创建用户、更改用户、删除用户)但是当我尝试使用该用户创建用户时,它说该用户没有足够的权限特权。应该怎么做才能解决这个问题?
提前谢谢大家!
编辑:我使用 Oracle Database 18c 快捷版
编辑2: 用户创建:
SQL> CREATE USER predefined
2 IDENTIFIED BY pf
3 DEFAULT TABLESPACE USERS
4 QUOTA 50M ON USERS
5 TEMPORARY TABLESPACE TEMP;
User created.
SQL> GRANT CREATE SESSION TO predefined;
Grant succeeded.
SQL> GRANT CREATE ANY TABLE, CREATE ANY SEQUENCE, CREATE ANY VIEW, CREATE ANY PROCEDURE, CREATE ANY INDEX, CREATE ANY TRIGGER TO predefined
Grant succeeded.
SQL> GRANT CREATE USER TO predefined;
Grant succeeded.
SQL> GRANT ALTER USER TO predefined;
Grant succeeded.
SQL> GRANT DROP USER TO predefined;
Grant succeeded.
当我尝试用该用户创建用户时,我得到了这个:
SQL> CREATE USER predefined2
2 IDENTIFIED BY pf2
3 DEFAULT TABLESPACE USERS
4 QUOTA 5M ON USERS
5 TEMPORARY TABLESPACE TEMP;
CREATE USER predefined2
*
ERROR at line 1:
ORA-01031: insufficient privileges
另一件事 - 我检查了 USER_SYS_PRIVS
table,它向我显示了这个:
USERNAME PRIVILEGE ADM COM INH
-------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------- --- --- ---
PREDEFINED ALTER USER NO NO NO
PREDEFINED CREATE USER NO NO NO
PREDEFINED DROP USER NO NO NO
PREDEFINED CREATE ANY VIEW NO YES NO
PREDEFINED CREATE ANY PROCEDURE NO YES NO
PREDEFINED CREATE ANY SEQUENCE NO YES NO
PREDEFINED CREATE SESSION NO YES NO
PREDEFINED CREATE ANY TRIGGER NO YES NO
PREDEFINED CREATE ANY INDEX NO YES NO
PREDEFINED CREATE ANY TABLE NO YES NO
我注意到,在 COM
列中,它没有创建用户、更改用户和删除用户权限。所以也许它必须对此做些什么?
嗯,你不应该有那个问题。至少我没有。
作为 SYS,我正在创建一个将被授予 CREATE USER
权限的全新用户:
SQL> show user
USER is "SYS"
SQL> create user predefined identified by pf;
User created.
SQL> grant create session, create user to predefined;
Grant succeeded.
那么,它有效吗?
SQL> connect predefined/pf
Connected.
SQL> create user test identified by test;
User created.
SQL>
是的,确实如此。
请编辑问题和post你到底做了什么(就像我一样)以便我们可以看到它。
所以问题是 - 我在授予权限时没有添加 CONTAINTER=ALL
子句。
所以 GRANT 子句应该是这样的
GRANT CREATE USER TO predefined CONTAINTER=ALL;
之后,创建新用户成功。
编辑:
在做了一些研究之后,我发现那些是系统权限,所以如果你想将它们从系统用户授予另一个用户,你必须在 grant 子句的末尾添加 CONTAINER = ALL
子句。
如果我错了,请纠正我,但我希望这对将来的人也有帮助! :)