日期:2014-05-16 浏览次数:20468 次
在日常管理的Oracle数据库中,会有第三方应用需要操作数据库。第三方应用会要求在数据库中创建一个用户,用于读写自己的对象和其他的对象。
关键点是,这是一个来自第三方应用的用户。我们不清楚它会如何操作数据库对象,如何使用数据库资源。
我碰到过这类用户读了超范围的表,将其表创建在users表空间上,其数据库会话数暴涨导致其他应用不再能连接数据库等等。
因此,需要从权限、使用资源、表空间限额等方面上对这类用户予以限制。
整理了一个这类用户的创建流程。如下所示:
?
(miki西游 @mikixiyou 原文链接: http://mikixiyou.iteye.com/blog/1716560
)
首先,创建第三方用户的数据表空间和临时表空间。
create tablespace tbs_crm datafile '/testdb/datafile/tbs_crm01.dbf' size 10240M;
create temporary tablespace tbs_crm_temp tempfile '/testdb/tempfile/tbs_crm_temp01.dbf' size 10240M;
其次,创建数据库用户
CREATE USER usr_crm IDENTIFIED BY usr_crm
?DEFAULT TABLESPACE tbs_crm
?TEMPORARY TABLESPACE TBS_crm_TEMP
?PROFILE DEFAULT;
?
再次, 授予connect,resource角色
GRANT "CONNECT","RESOURCE" TO usr_crm;
注意,需要从这个用户上撤销unlimited tablespace 系统权限。如果你是10g以下版本,这个操作可以不必去做。
revoke unlimited tablespace from usr_crm;
最后,限定该用户的表空间额度和使用会话数据
alter user usr_crm QUOTA UNLIMITED ON tbs_crm;
使得该用户只能在表空间tbs_crm上创建表和索引等对象。
如果需要新增表空间,如tbs_crm_ind,那么可以继续设置一下。
在user_ts_quotas中可以查到相关信息。
CREATE PROFILE "PROFILE_THIRD" LIMIT SESSIONS_PER_USER 60;
ALTER USER "USR_CRM" PROFILE "PROFILE_THIRD";
使用profile限制该用户的数据库连接数。
需要先创建一个profile,名称为profile_third,继而将用户的profile调整为profile_third。
这样就能实现数据库用户的连接数控制。
再有一些业务用户的表需要读写,可以另外单独授权。
简而言之,在第三方应用的用户管理上,我们需要从表空间限额和系统权限及资源使用上进行限制,保证数据库正常运行。