在Oracle数据库中,每一个用户一般都有自己的数据表空间、临时表空间和索引表空间等数据存储空间,而且你不能随意写到其他的表空间上。例如,我们常见到有表建立在users表空间上,更有甚者是建立在system表空间上的。不信的话,你去查一下自己的数据库。新用户的权限也需要严格控制,一般授予connect,resource两个角色,另外create view等权限可以根据需求添加。在10g中,resource角色有一个系统权限unlimited tablespace,需要最后手工去掉。
如果你需要对用户的资源等做限制,如密码失效周期、用户最大会话连接数等,可以借助profile来实现。
这是数据库用户创建的规范。具体创建过程,我一步一步的列出来。
首先,创建用户所需要的存储数据的表空间和临时空间。
create tablespace TBS_MIKI datafile '/u01/oradata/servdb/datafile/tbs_miki01.dbf' size 10M;
create temporary tablespace TBS_MIKI_TEMP datafile '/u01/oradata/servdb/datafile/tbs_miki_temp01.dbf' size 10M;
注意表空间命名方式。
其次,创建新用户,如usr_miki 。
CREATE USER USR_MIKI IDENTIFIED BY USR_MIKI
DEFAULT TABLESPACE TBS_MIKI
TEMPORARY TABLESPACE TBS_MIKI_TEMP
PROFILE DEFAULT
QUOTA UNLIMITED ON TBS_MIKI;
最后,授予角色connect,resource
GRANT "CONNECT" TO USR_MIKI WITH ADMIN OPTION;
GRANT "RESOURCE" TO USR_MIKI WITH ADMIN OPTION;
ALTER USER USR_MIKI DEFAULT ROLE "CONNECT", "RESOURCE";
需要将unlimited tablespace去掉,因为10g2之后添加resource角色会自动加此系统权限。
revoke unlimited tablespace from usr_miki;
alter user USR_MIKI QUOTA UNLIMITED ON TBS_MIKI;
还需要一些权限,如创建视图、创建物化视图、创建同义词等,毕竟resource角色的权限还比较少。
通过这些步骤,我们创建了一个基本上符合开发、生产的规范的数据库用户。
这个用户拥有connect,resource 角色,所有数据将只能写入到tbs_miki 表空间上。如果您需要新加一个表空间如用来单独保存索引对象,可以在表空间建立后,将它的使用限额授权给该用户。
create tablespace TBS_MIKI_IND datafile '/u01/oradata/servdb/datafile/tbs_miki_ind01.dbf' size 10M;
alter user USR_MIKI QUOTA UNLIMITED ON TBS_MIKI_IND;