在创建Oracle数据库时,默认新建了许多账户,而在实际开发中dba通常会给开发人员分配特定的账户;并且在正式环境中,web系统将使用其他的数据库账户。
每一个Oracle数据库账户都在创建时定义了较多属性,这些属性在账户连接到会话时生效,dba拥有管理和修改这些属性的权限。每一个账户的主要属性包括:用户名、身份验证方法、默认表空间、表空间配额、用户配置文件、临时表空间、账户状态等。
运行sqlplus使用以下命令连接到sysdba账户:
SQL> conn sys/Oracle_123@orcl as sysdba;
已连接。
创建一个账户:
SQL> create user yanh identified by oracle;
用户已创建。
此时,该用户将具有默认表空间users,该用户创建的任何模式对象将被保存在这个表空间中。实际上,创建一个用户的完整SQL如下:
create user scott identified by tiger
default tablespace users temporary tablespace temp
quota 100m on users, quota unlimited on temp
profile developer_profile
password expire
account unlock;
只有第一行是必须的,其它所有参数都具有默认设置。
可以使用以下语句创建一个表空间,用于存储某些账户创建的模式对象:
SQL> edit;
已写入 file afiedt.buf
1 create tablespace user_data
2 logging
3 datafile 'C:\user_data.dbf'
4 size 50m
5 autoextend on
6 next 1m maxsize 1024m
7* extent management local
SQL> /
表空间已创建。
此时,通过alter命令可以更改创建用户的默认表空间:
SQL> alter user yanh default tablespace user_data;
用户已更改。
更改完成后,可通过以下Sql查看用户的表空间分配情况:
SQL> select username,default_tablespace,temporary_tablespace from dba_users where username='YANH';
USERNAME DEFAULT_TABLESPACE TEMPORARY_TABLESPACE
------------------------------ ------------------------------ ------------------------------
YANH USER_DATA TEMP
此外,可以为用户分配表空间配额,在配额未完全占用前,用户可以创建对象,并分配空间,一旦表空间分配的配额用完,该用户就无法再创建对象。通过以下SQL为用户yanh分配表空间配额:
SQL> alter user yanh quota 10m on user_data;
用户已更改。
SQL> alter user yanh quota unlimited on users;
用户已更改。
以上语句表明:为yanh账户分配user_data表空间中10M的配额,同时在users表空间中为其分配不限容量的配额,通过以下SQL可以查看当前账户的配额分配情况:
SQL> select tablespace_name,bytes,max_bytes from dba_ts_quotas where username='YANH';
TABLESPACE_NAME BYTES MAX_BYTES
------------------------------ ---------- ----------
USERS 0 -1
USER_DATA 0 10485760
上述结果中,由于yanh账户尚未创建任何对象,因此bytes字段值为0;并且在users表空间中max_bytes列值为-1,表明该账户在users表空间中确实有无限容量的空间配额。
一个用户在创建后,都具有特定的状态,Oracle中某一个用户的状态有以下的9种可能:
1)open,用户正常可用
2)locked,账户被dba锁定,无法使用其登录到数据库服务器;
3)expired,用户登录口令已经过期,需要重新更改登录口令才可以连接数据库;
4)expired&locked,账户不仅被锁定,同时登录口令也过期;
5)expired(grace),正常过期,表明登录口令在生命周期结束时不会立即过期,用户可以在一个时间段内选择更改登录口令;
6)locked(timed),超时锁定,表明用户在多次尝试使用错误的口令登录数据库时,账户被锁定。通常dba可以配置错误登录出现特定次数后,账户自动锁定。
7)expired&locked(timed),口令过期并且处于超时锁定状态
8)expired(grace)&locked,正常过期状态,同时账户被锁定;
9)expired(grace)&locked(timed),正常过期,同时处于超时锁定状态。
使用以下命令可以更改用户的锁定状态:
SQL> alter user yanh account lock;
用户已更改。
SQL> alter user yanh account unlock;
用户已更改。
若想让某个用户强制修改登录口令,可使用以下命令:
SQL> alter user yanh password expire;
用户已更改。
SQL> conn yanh/oracle@orcl;
ERROR:
ORA-28001: the password has expired
更改 yanh 的口令
新口令:
此时,再次使用账户登录数据库服务器时,将提示修改登录口令。
在创建一个用户之后,若不授权给这个用户,将不能在数据库中执行任何操作,甚至不能连接到数据库服务器:
SQL> conn yanh/oracle@orcl;
ERROR:
ORA-01045: user YANH lacks CREATE SESSION privilege; logon denied
警告: 您不再连接到 ORACLE。
在默认情况下,只有DBA(一般是sys和system账户)才可以对其它用户授予所有权限。oracle中的权限包括:系统权限和对象权限。
常见的系统权限有:
1)create session
2)alter database
3)alter system
4)create tablespace
7)creaate table
8)create view
9)drop/delete,update,insert,select any table等。
为用户授权的语法为:grant privilege[...] to username;代码如下:
SQL> conn sys/Oracle_123@orcl as sysdba;
已连接。
SQL> grant create session to yanh;
授权成功。
SQL> conn yanh/oracle@orcl;
已连接。
SQL> create table test(
2 id varchar2(2));
create table test(
*
第 1 行出现错误:
ORA-01031: 权限不足
此时,可以使用该账户连接数据库,但是不能执行其它任何操作,需要dba为用户提供更多的权限。