知识点的梳理:
- Oracle中的每一个用户都是作为数据库对象存在的;
- 在Oracle中,管理员可以通过3个数据字典查看用户,角色,权限的信息:
- dba_sys_privs:查看用户所拥有的权限;
- dba_role_privs:查看用户所拥有的角色;
- role_sys_privs:查看角色所用的权限;
- 概要文件定义了用户登录后的相关操作配置,通过概要文件,可以实现对用户的控制;
- 创建用户
- 语法:想完成以下操作,必须使用管理员权限
create user 用户名 identified by 密码 QUOTA数字 [K|M] | UNLIMITED ON 表空间名称 ...] [PROFILE 概要文件名称 |DEFAULT] [PASSWORD EXPIRE] [ACCOUNT LOCK | UNLOCK] |
该语法各部分解析: |
- 示例:创建一个新的用户:c##mldnuser,密码为:java_android
CREATE USER c##mldnuser IDENTIFIED BY java_android DEFAULT TABLESPACE mldn_data TEMPORARY TABLESPACE mldn_temp QUOTA 30M ON mldn_data QUOTA 20M ON users ACCOUNT UNLOCK PASSWORD EXPIRE ; | 创建一个c##mldnuser用户,密码为java_android,配置说明如下: QUOTA 30M ON mldn_data :该用户在mldn_data表空间上最多使用30MB大小; |
- 示例:用户创建完后,通过dba_users查看用户信息
SELECT username,user_id,default_tablespace,temporary_tablespace,created,lock_date,profile FROM dba_users WHERE username='C##MLDNUSER'; |
c##mldnuser用户的lock_date列信息为null,这是因为默认创建的用户并非锁定用户,而当一个用户锁定之后,lock_data列就会变为锁定日期 |
- 每个用户都存在着多个可以操作的表空间,可以通过dba_ts_quotas数据字典来看出
- 示例:通过dba_ts_quotas查看用户可用表空间配额
SELECT * FROM dba_ts_quotas WHERE username='C##MLDNUSER' ; |
- 概要文件(profiles)
- 概要文件是一组已经命名的口令和资源限制文件,管理员利用它可以直接限制用户的资源访问量或用户管理等操作
- 语法:
- create profile 概要文件名称 limit 命令(s)
- 在概要文件中可以通过如下两组命令格式来进行控制:
- 第一组:资源限制命令
- session_per_user 数字 | UNLIMITED | DEFAULT:允许一个用户同时创建session的最大数量;
- cpu_per_session 数字 | UNLIMITED | DEFAULT:每一个SESSION允许使用CPU的时间数,单位为毫秒;
- cpu_per_call 数字 | UNLIMITED | DEFAULT:限制每次调用sql语句期间,CPU的时间总量;
- connect_time 数字 | UNLIMITED | DEFAULT:每个session的连接时间数,单位为分;
- IDLE_TIME 数字 | UNLIMITED | DEFAULT:每个session的超时时间,单位为分;
- LOGICAL_READS_PER_SESSION 数字 | UNLIMITED | DEFAULT:为了防止笛卡尔积的产生,可以限定每一个用户最多允许读取的数据块数;
- LOGICAL_READS_PER_CALL 数字 | UNLIMITED | DEFAULT:每次调用SQL语句期间,最多允许用户读取的数据库块数;
- 第二组:口令限制命令
- FAILED_LOGIN_ATTEMPTS 数字 | UNLIMITED | DEFAULT:当连续登录失败次数达到该参数指定值时,用户被加锁;
- PASSWORD_LIFE_TIME 数字 | UNLIMITED | DEFAULT:口令的有效期(天),默认为UNLIMITED;
- PASSWORD_REUSE_TIME 数字 | UNLIMITED | DEFAULT:口令被修改后原有口令隔多少天后可以被重新使用,默认为UNLIMITED;
- PASSWORD_REUSE_MAX 数字 | UNLIMITED | DEFAULT:口令被修改后原有口令被修改多少次才允许被重新使用;
- PASSWORD_VERIFY_FUNCTION 数字 | UNLIMITED | DEFAULT:口令效验函数;
- PASSWORD_LOCK_TIME 数字 | UNLIMITED | DEFAULT:账户因FAILED_LOGIN_ATTEMPTS锁定时,加锁天数;
- PASSWORD_GRACE_TIME 数字 | UNLIMITED | DEFAULT:口令过期后,继续使用原口令的宽限期(天);
-
- 示例:定义一个概要文件
| ||
概要文件也可以使用dba_profiles数据字典查看概要文件的完整信息: SELECT * FROM dba_profiles WHERE profile='C##MLDN_PROFILE' ; |
- 示例:创建用户时指定概要文件
CREATE USER c##mldnjava IDENTIFIED BY hello PROFILE c##mldn_profile ; | 此时新的c##mldnjava用户创建时的相关资源配置全部采用默认方式,而概要文件使用了mldn_profile。 |
- 示例:为已经存在的用户设置概要文件
ALTER USER c##mldnuser PROFILE c##mldn_profile ; |
查看dba_users数据字典,观察c##mldnjava和c##mldnuser两个用户的定义 SELECT username,user_id,default_tablespace,temporary_tablespace,created,lock_date,profile FROM dba_users WHERE username IN ('C##MLDNJAVA','C##MLDNUSER') ; |
两个用户都使用了概要文件为c##mldn_profile; |
- 示例:修改已经存在的概要文件
ALTER PROFILE c##mldn_profile LIMIT CPU_PER_SESSION 1000 PASSWORD_LIFE_TIME 10 ; | 此sql修改了CPU的占用时间和密码过期时间 |
- 示例:删除概要文件。如果已经有用户使用了此概要文件,则必须使用cascade;
DROP PROFILE c##mldn_profile CASCADE ; |
概要文件被删除后,所有拥有此概要文件的用户将自动将使用的概要文件设定为default |
- 维护用户
- 修改用户密码
- 语法:alter user 用户名 identified by 新密码;
- 示例:修改c##mldnuser的密码为:hellojava
-
ALTER USER c##mldnuser IDENTIFIED BY hellojava ; |
- 控制用户锁定
- 语法:alter user 用户名 account lock | unlock;
- 示例:将c##mldnuser用户设置为锁定状态
ALTER USER c##mldnuser ACCOUNT LOCK ; |
- 示例:通过dba_users查看mldnuser用户的锁定信息
SELECT username,user_id,default_tablespace,temporary_tablespace,created,lock_date,profile FROM dba_users WHERE username='C##MLDNUSER'; |
- 解锁示例:将c##mldnuser用户解锁
ALTER USER c##mldnuser ACCOUNT UNLOCK ; |
- 让密码失效
- 语法:alter user 用户名 password expire;
- 示例:让c##mldnuser密码失效
- 注意:密码失效之后,用户必须在进行登录时强制性修改密码;
ALTER USER c##mldnuser PASSWORD EXPIRE ; |
- 修改用户表空间配额
- 可以利用alter语句,增加用户在表空间上的配额,来增加保存的数据量空间;
- 语法:alter user 用户名 quota 数字 [k|m] unlimited on 表空间名称 ...
- 示例:修改c##mldnuser用户的表空间配额
ALTER USER c##mldnuser QUOTA 20M ON system QUOTA 35M ON users ; |
通过dba_ts_quotas数据字典查看mldnuser用户新的表空间配额 SELECT * FROM dba_ts_quotas WHERE username='C##MLDNUSER' ; |
- 删除用户
- 语法:drop user 用户名 [cascade];
- 注意:如果用户在存在期间进行了数据库对象的创建,就可以利用cascade子句删除模式中的所有对象;
- 示例:删除c##mldnuser用户
-
DROP USER c##mldnuser ; |
- 说明:用户被删除后,此用户下的所有对象(表,索引,子程序)都会一起被删除,删除前请备份数据;