Oracle 用户
1.关于创建用户;
2.用户配置文件;
3.创建用户;
4.更改用户;
5.删除用户;
1.关于创建用户:
1.1 用户名:创建数据库用户必须具有 Create user 系统权限,必须指定用户名和密码;用户名字母大小写不受限制,除非指定用户名时使用了双引号(如"tS"),这种形式创建的用户使用时必须严格区分大小写;
1.2 表空间:在未指定默认表空间时默认是:USERS表空间,表空间空间的使用默认是不允许写入(我的理解是quota=0m);用户创建的对象、DDL在未指定表空间时都会存储在用户默认表空间下;
1.3 临时表空间: 在未指定临时表空间时默认是:TEMP,当用户执行的sql语句需要排序(sort)和join时需要使用临时表空间;
1.4用户配置文件(PROFILE): PROFILE是控制和管理系统资源和密码配置的系统文件,当数据库用户连接到数据库时,数据库加载用户对应的配置文件参数值管理数据库用户资源使用和密码参数配置情况,默认配置文件为:DEFAULT,有一定限制(如登录错误次数,有效期),用户可以根据业务需求创建用户配置文件管理进程的资源使用和密码参数配置,当一个进程所使用的资源超过配置文件设定值时,系统终止该进程,由 Process Monitor(PMON)后台进程清理该进程所使用的系统资源并返回给系统;
2.用户配置文件:
2.1 查询'DEFAULT' 用户配置文件:
1: OPS$SYWU@sydb>select profile,resource_name,resource_type,limit from dba_profiles where profile='DEFAULT';
2:
3: PROFILE RESOURCE_NAME RESOURCE LIMIT
4: ------------------------------ -------------------------------- -------- ----------------------------------------
5: DEFAULT COMPOSITE_LIMIT KERNEL UNLIMITED
6: DEFAULT SESSIONS_PER_USER KERNEL UNLIMITED
7: DEFAULT CPU_PER_SESSION KERNEL UNLIMITED
8: DEFAULT CPU_PER_CALL KERNEL UNLIMITED
9: DEFAULT LOGICAL_READS_PER_SESSION KERNEL UNLIMITED
10: DEFAULT LOGICAL_READS_PER_CALL KERNEL UNLIMITED
11: DEFAULT IDLE_TIME KERNEL UNLIMITED
12: DEFAULT CONNECT_TIME KERNEL UNLIMITED
13: DEFAULT PRIVATE_SGA KERNEL UNLIMITED
14: DEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD 10
15: DEFAULT PASSWORD_LIFE_TIME PASSWORD 180
16: DEFAULT PASSWORD_REUSE_TIME PASSWORD UNLIMITED
17: DEFAULT PASSWORD_REUSE_MAX PASSWORD UNLIMITED
18: DEFAULT PASSWORD_VERIFY_FUNCTION PASSWORD NULL
19: DEFAULT PASSWORD_LOCK_TIME PASSWORD 1
20: DEFAULT PASSWORD_GRACE_TIME PASSWORD 7
可以根据系统业务情况自己创建用户配置文件(要具有Create profile 系统权限):
1: OPS$SYWU@sydb>create profile test_profile limit
2: 2 failed_login_attempts 3
3: 3 logical_reads_per_session 1
4: 4 /
5:
6: Profile created.
7:
8: OPS$SYWU@sydb>create profile general_profile limit
9: 2 COMPOSITE_LIMIT UNLIMITED
10: 3 SESSIONS_PER_USER UNLIMITED
11: 4 CPU_PER_SESSION UNLIMITED
12: 5 CPU_PER_CALL UNLIMITED
13: 6 LOGICAL_READS_PER_SESSION UNLIMITED
14: 7 LOGICAL_READS_PER_CALL UNLIMITED
15: 8 IDLE_TIME UNLIMITED
16: 9 CONNECT_TIME UNLIMITED
17: 10 PRIVATE_SGA UNLIMITED
18: 11 FAILED_LOGIN_ATTEMPTS UNLIMITED
19: 12 PASSWORD_LIFE_TIME UNLIMITED
20: 13 PASSWORD_REUSE_TIME UNLIMITED
21: 14 PASSWORD_REUSE_MAX UNLIMITED
22: 15 PASSWORD_VERIFY_FUNCTION NULL
23: 16 PASSWORD_LOCK_TIME UNLIMITED
24: 17 PASSWORD_GRACE_TIME UNLIMITED
25: 18 /
26:
27: Profile created.
2.2 修改用户配置文件参数(要具有 Alert Profile 系统权限):
1: OPS$SYWU@sydb>alter profile test_profile limit LOGICAL_READS_PER_SESSION unlimited;
2:
3: Profile altered.
2.3 删除用户配置文件(要具有 Drop Profile 系统权限),不能删除默认配置文件'DEFAULT',当删除已经分配给用户的配置文件时,要加cascade子句,系统删除配置文件并将关联该配置文件的用户配置文件修改为系统默认配置文件'DEFAULT':
1: SYS@sydb>select username,profile from dba_users where username='OPS$SYWU';
2:
3: USERNAME PROFILE
4: ------------------------------ ------------------------------
5: OPS$SYWU TEST_PROFILE
6:
7: SYS@sydb>drop profile test_profile cascade;
8:
9: Profile dropped.
10:
11: SYS@sydb>select username,profile from dba_users where username='OPS$SYWU';
12:
13: USERNAME PROFILE
14: ------------------------------ ------------------------------
15: OPS$SYWU DEFAULT
2.4 查询当前Session 用户配置文件系统参数的设置值:
1: OPS$SYWU@sydb>select resource_name,limit from user_resource_limits;
2:
3: RESOURCE_NAME LIMIT
4: -------------------------------- ----------------------------------------
5: COMPOSITE_LIMIT UNLIMITED
6: SESSIONS_PER_USER UNLIMITED
7: CPU_PER_SESSION UNLIMITED
8: CPU_PER_CALL UNLIMITED
9: LOGICAL_READS_PER_SESSION UNLIMITED
10: LOGICAL_READS_PER_CALL UNLIMITED
11: IDLE_TIME UNLIMITED
12: CONNECT_TIME UNLIMITED
13: PRIVATE_SGA UNLIMITED
2.5 查询当前Session 用户配置文件密码参数的设置值:
1: OPS$SYWU@sydb>select resource_name,limit from user_password_limits;
2:
3: RESOURCE_NAME LIMIT
4: -------------------------------- ----------------------------------------
5: FAILED_LOGIN_ATTEMPTS 10
6: PASSWORD_LIFE_TIME 180
7: PASSWORD_REUSE_TIME UNLIMITED
8: PASSWORD_REUSE_MAX UNLIMITED
9: PASSWORD_VERIFY_FUNCTION NULL
10: PASSWORD_LOCK_TIME 1
11: PASSWORD_GRACE_TIME 7
3.创建用户:
3.1 创建一个缺省用户(要具有 Create User 系统权限):
1: OPS$SYWU@sydb>create user test
2: 2 identified by test
3: 3 /
4:
5: User created.
6: OPS$SYWU@sydb>grant create session,resource to test;
7:
8: Grant succeeded.
系统使用缺省的默认表空间:Users(对该表空间的空间没有使用权限),默认临时表空间:temp,默认的用户配置文件:DEFAULT,缺省用户不具有任何权限,需要赋于权限后才能使用;
1: OPS$SYWU@sydb>select username,default_tablespace,temporary_tablespace,profile,account_status from dba_users where username='TEST';
2:
3: USERNAME DEFAULT_TABLESPACE TEMPORARY_TABLESPACE PROFILE ACCOUNT_STATUS
4: ------------------------------ ------------------------------ ------------------------------ ------------------------------ -----------------
5: TEST USERS TEMP DEFAULT OPEN
3.2 创建一个自定义非缺省用户:
1: OPS$SYWU@sydb>create user test1
2: 2 identified by test1
3: 3 default tablespace tbs01
4: 4 temporary tablespace temp
5: 5 quota unlimited on tbs01
6: 6 quota 100m on tbs02
7: 7 profile general_profile
8: 8 /
9:
10: User created.
11: OPS$SYWU@sydb>grant create session,resource to test1;
12:
13: Grant succeeded.
3.3 用户表空间空间使用情况:
1: OPS$SYWU@sydb>conn test1/test1
2: TEST1@sydb>select tablespace_name,bytes,max_bytes,blocks,max_blocks from user_ts_quotas;
3:
4: TABLESPACE_NAME BYTES MAX_BYTES BLOCKS MAX_BLOCKS
5: ------------------------------ ---------- ---------- ---------- ----------
6: TBS02 0 104857600 0 12800
7: TBS01 0 -1 0 -1
MAX_BYTES =-1 表示unlimited;非-1表示用户在该表空间上可以使用的空间最大值;
4.更改用户:
可以在用户创建后更改默认表空间、临时表空间、空间限额、用户配置文件、密码,必须具有 Alter User 系统权限:
4.1 更改用户默认表空间:
1: OPS$SYWU@sydb>alter user test1 default tablespace tbs02;
2:
3: User altered.
更改默认表空间同时更改空间限额:
1: OPS$SYWU@sydb>alter user test1 default tablespace tbs02 quota unlimited on tbs02;
2:
3: User altered.
4.2 更改用户临时表空间:
1: OPS$SYWU@sydb>alter user test1 temporary tablespace temp;
2:
3: User altered.
不能在临时表空间上设置空间限额,临时表空间的使用情况可以查询v$tempfile和dba_temp_files 视图:
1: OPS$SYWU@sydb>select file_name,tablespace_name,bytes,blocks,status,maxbytes,maxblocks,user_bytes,user_blocks from dba_temp_files;
2:
3: FILE_NAME TABLESPACE_NAME BYTES BLOCKS STATUS MAXBYTES MAXBLOCKS USER_BYTES USER_BLOCKS
4: ------------- ------------------------------ ---------- ---------- ------- ---------- ---------- ---------- -----------
5: /u01/app/orad TEMP 378535936 46208 ONLINE 3.4360E+10 4194302 377487360 46080
6: ata/sydb/temp
7: 01.dbf
4.3 更改用户配置文件(要具有Alter Profile系统权限):
1: OPS$SYWU@sydb>alter user test1 profile default;
2:
3: User altered.
4.4 更改用户密码(要具有Alter User系统权限):
1: OPS$SYWU@sydb>alter user test1 identified by test1;
2:
3: User altered.
也可以通过password 命令修改:
1: OPS$SYWU@sydb>password test1
2: Changing password for test1
3: New password:
4: Retype new password:
5: Password changed
sys 用户密码也可以像这样修改,但通常情况下sys密码丢失或忘记,并且没有其它用户具有Alter User 系统权限时不得不通过在DBA用户组下通过ORAPWD重新建立密码文件;
1: [sywu@wusuyuan dbs]$ orapwd file=/u01/app/product/11.2.0/db_1/dbs/orapwsydb entries=10 force=y
2:
3: Enter password for SYS:
Windows 下密码文件在ORACLE_HOME/database/ ,密码文件名称格式为:pwdsid.ora;SO,Alter User 系统权限很大,应避免生成库上使用;
以上更改用户命令也可以这样:
1: OPS$SYWU@sydb>alter user test1
2: 2 identified by test1
3: 3 default tablespace tbs01
4: 4 quota unlimited on tbs01
5: 5 quota 10m on users
6: 6 temporary tablespace temp
7: 7 profile test_profile
8: 8 /
9:
10: User altered.
5.删除用户:
删除用户必须具有Drop User系统权限,如果有主外键或其它用户对象关联时原则上应先检查这些数据确认是否有用,确认后删除对象关联关系;也可以在删除用户时使用CASCADE语句删除对象关联关系并删除用户;可以通过检查系统视图确认关联对象;
1: OPS$SYWU@sydb>SELECT OBJECT_NAME,SUBOBJECT_NAME,DATA_OBJECT_ID,OBJECT_TYPE,STATUS FROM DBA_OBJECTS WHERE OWNER LIKE 'OPS$SYWU';
当有会话连接该用户时,必须先断开连接才能删除用户;
1: OPS$SYWU@sydb>drop user test1;
2: drop user test1
3: *
4: ERROR at line 1:
5: ORA-01940: cannot drop a user that is currently connected
可以这样处理,先查询出用户会话信息:
1: OPS$SYWU@sydb>select sid,serial# ,username from v$session where username='TEST1';
2:
3: SID SERIAL# USERNAME
4: ---------- ---------- ------------------------------
5: 16 41 TEST1
在数据库系统上杀死该会话进程:
1: OPS$SYWU@sydb>alter system kill session '16,41';
2:
3: System altered.
如果这样杀不死,可以先查询出进程信息,然后在操作系统上杀死进程:
1: OPS$SYWU@sydb>select spid, osuser,s.sid,s.username,s.program from
2: v$process p, v$session s where p.addr=s.paddr and s.username='TEST1';
linux 下用 kill杀死进程:
1: [sywu@wusuyuan ~]$ kill -s 9 2310
Windows 下用 oraKill(注:要在数据库端操作):
orakill sid spid;
sid 是:实例名,spid 是进程ID(注意中间不要加逗号);
最后在删除用户:
OPS$SYWU@sydb>drop user test1 cascade;