11.1.2 如何创建用户

数据库系统在运行的过程中,往往要根据实际需求创建用户,然后为用户指定适当的权限。创建用户的操作一般只能由sys用户完成,如果普通用户也要创建用户,必须具有一个系统权限,即CREATE USER。

创建用户的命令是CREATE USER,创建用户所涉及的内容包括为用户指定用户名、口令、默认表空间、存储空间配额等。其中用户名是代表用户账号的标识符,它的命名规则是:

·必须以字母开始。

·长度为1~30个字符。

·从第二个字符开始,可以包括大小写字母、数字、_、$和#等字符。

·大写和小写是相同的。

用来创建用户的CREATE USER命令的完整语法格式为:


CREATE USER 用户名 IDENTIFIED BY"口令"

DEFAULT TABLESPACE 表空间

TEMPORARY TABLESPACE 临时表空间

QUOTA 空间配额大小 ON 表空间

PASSWORD EXPIRE

ACCOUNT LOCK|UNLOCK


其中DEFAULT TABLESPACE用来为用户指定默认表空间,如果不指定,那么SYSTEM表空间将被指定为这个用户的默认表空间。如果不特别指定,用户创建的表、索引等数据库对象就位于默认表空间中。为了提高数据库的性能,同时为了方便管理数据,Oracle建议为用户指定一个默认表空间。

DEFAULT TABLESPACE用于为用户指定临时表空间。在一个数据库中可以创建多个临时表空间,为每个用户可以指定不同的临时表空间。还可以把多个临时表空间组织为一个表空间组,把这个表空间组作为整个数据库或者某个用户的默认临时表空间。

QUOTA子句用于为用户在表空间上指定空间配额。尽管为用户指定了默认表空间,但是用户在这个表空间上还不能创建数据库对象,因为它在这个表空间上没有可支配的存储空间。空间配额以字节、KB、MB等为单位,还可以指定为UNLIMITED,即无限制的空间配额。如果希望用户在所有表空间上都具有无限制的空间配额,只要为其指定UNLIMITED TABLESPACES系统权限即可。

PASSWORD EXPIRE用于指定用户的口令过期,用户在第一次登录数据库服务器时必须修改自己的口令。在创建用户账号时,用户的初始口令是由管理员指定的。如果以口令过期的方式强迫用户修改自己的口令,这样将使用户的账号更加安全。

ACCOUNT子句用于指定用户账号的状态,如果为UNLOCK,这个用户就能够登录数据库服务器,这是默认设置。如果为LOCK,则为锁定状态。

例如,下面的CREATE语句用于创建用户user1,并为其指定相关属性:


SQL>CREATE USER user1 IDENTIFIED BY"1234"

DEFAULT TABLESPACE users

TEMPORARY TABLESPACE temp

QUOTA 20M ON users

PASSWORD EXPIRE

ACCOUNT UNLOCK;


用户被创建之后,还没有任何权限,甚至不能登录数据库,只有当sys用户为它指定了一定的权限后,它才能对数据库进行访问。

用户的相关信息可以从数据字典视图dba_users中获得。例如,下面的SELECT语句用于查询当前数据库中所有用户的名称、口令、默认表空间和账号状态等信息:


SQL>SELECT username, password, default_tablespace, account_status FROM dba_users;


这条命令的执行结果为(这里只列出了部分用户):


username password default_tablespace account_status

SYS SYSTEM OPEN

SYSTEM SYSTEM OPEN

SCOTT SYSTEM OPEN

USER1 USERS EXPIRED


在列出的用户中,包括特权用户、数据库预创建的用户和刚刚手工创建的用户。用户的口令都是经过加密的,在较早版本的数据库中,可以显示加密的口令,在现在的版本中不显示口令。如果不特别指定,用户的默认表空间是SYSTEM表空间。除最后一个用户外,其余用户的账号都是活动的(OPEN)。