Oracle用户管理与安全

      在创建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为用户提供更多的权限。

猜你喜欢

转载自bjtale.iteye.com/blog/2230865