Oracle 创建用户
创建一个新的数据库用户是使用CREATE USER语句完成的,该语句一般是由DBA用户来执行;如果要以其他用户身份创建用户,则要求用户必须具有CREATE USDER系统权限。
每个用户在连接到数据库时,都需要进行身份验证。身份验证可以通过操作系统进行,也可以通过数据库进行,或者通过独立的网络服务器进行。数据库验证是指使用数据库来检查用户、密码以及连接用户的身份,该方式也是最常用的用户验证方式,因此本书重点介绍数据库验证方式。采用数据库验证具有如下优点:
用户账号及其身份验证全部由数据库控制,不需要借助数据库外的任何控制。
当使用数据库验证时,Oracle提供了严格的密码管理机制,加强了密码的安全性。
如果使用数据库验证,则创建用户时必须提供连接密码,并且密码必须是单字节字符。例如,下面的语句创建了一个用户ATG,并为该用户指定了登录密码、默认表空间、临时表空间:
SQL> connect system/password
已连接。
SQL> create user developer
  2    identified by developer
  3    default tablespace user01
  4    quota 10m on user01
  5    temporary tablespace temp;
用户已创建。
在上面的语句中,创建了一个名为developer的用户。其中,子句IDENTIFIED BY指定用户密码,该密码是用户的初始密码,在用户登录到数据库后可以对其进行修改。DEFAULT TABLESPACE子句为用户指定默认表空间,这样在建立数据库对象(表、索引和簇)时,如果不指定TABLESPACE子句,Oracle会自动在默认表空间上为这些对象分配空间。TEMP
ORARY TABLESPACE子句用于为用户指定临时表空间,当用户所执行的SQL语句需要进行排序操作时,若临时数据尺寸超过PGA工作区,则会在该表空间上建立临时段。QUOTA子句为用户指定表空间配额,即用户对象在表空间上可占用的最大空间。
oracle11g 创建数据库
 
使用过Oracle 10g以及早期版本的用户需要注意,11g中的用户密码是区分大小的。
在创建用户时需要注意,Oracle不允许使用其他类型的表空间作为临时表空间使用,同样,也不允许使用临时表空间作为默认表空间。否则会出现如下所示的错误:
SQL> create user developer02
  2    identified by developer
  3    default tablespace USER01
  4    quota 128m on users
  5    temporary tablespace USERS;
create user atg02
*
第 1 行出现错误:
ORA-10615: Invalid tablespace type for temporary tablespace
在创建用户时,还可以增加PASSWORD EXPIRE,这可以强制用户在每一次登录数据库后必须修改密码。例如:
SQL> create user developer02
  2    identified by developer
  3    default tablespace USER01
  4    quota 128m on users
  5    temporary tablespace TEMP
  6    password expire;
用户已创建。
SQL> connect developer02/developer
ERROR:
ORA-28001: the password has expired
更改 developer02 的口令
新口令:
重新键入新口令:
在执行CREATE USER创建用户后,需要注意如下事项:
初始建立的用户没有任何权限,不能执行任何数据库操作。
如果建立用户时不指定TEMPORARY TABLESPACE子句,Oracle会将数据库默认的临时表空间作为用户的临时表空间。
如果建立用户时不指定DEFAULT TABLESPACE子句,Oracle会将USERS表空间作为用户的默认表空间。
如果建立用户时没有为表空间指定QUOTA子句,则用户在特定表空间上的配额为0,用户将不能在相应表空间上建立数据对象。
因为初始建立的用户没有任何权限,所以为了使用户可以连接到数据库,必须授予其CREATE SESSION权限。当采用数据库验证方式时,必须通过用户名和密码连接到数据库。例如:
SQL> connect developer/developer
ERROR:
ORA-01045: user DEVELOPER lacks CREATE SESSION privilege; logon denied
警告: 您不再连接到 ORACLE。
SQL> connect system/admin
已连接。
SQL> grant create session,create table to developer;
授权成功。
SQL> conn developer/developer;
已连接。
当要在表空间上建立数据对象时,用户必须具有相应的空间配额,或者UNLIMITED TABLESPACE系统权限。建立DEVELOPER用户时,由于没有为其在USER03表空间上指定空间配额,所以该在USER03表空间上的空间配额为0,即该用户不能使用USER03表空间。例如:
SQL> create table test2(col int) tablespace user03;
create table test2(col int) tablespace user03
*
第 1 行出现错误:
ORA-01950: 对表空间 'USER03' 无权限
这里有一个技巧,如果要回收某用户创建数据库对象的权限,可以通过修改其所有表空间中的配额为0,这样用户已经创建的数据库对象仍然被保留,但是无法再创建新的数据库对象。