1、用户与模式
在Oracle中,拥有对象的用户与只访问其他用户拥有对象的用户之间的差异是一个非常重要的知识点。
具有创建对象权限并创建了对象的用户称为拥有某个模式。模式(Schema)是某个用户拥有的所有对象的集合。模式具有与用户相同的名称。
例如:如果某个数据库用户John创建了一个名为Customers的表,那么此时John也创建了自己的模式,并且成为John模式的拥有者.希望查询John模式中的新表的任何人都可以在表名前加上模式名并查询数据JOHN.CUSTOMERS(假定John为他们授予了相应的权限)。
2、创建用户
除了SYS和SYSTEM用户之外,Oracle Database 10G数据库通常还具有许多用户,这些用户在数据库创建阶段被定义。大多数用户的账户都被锁定,并且需要通过DBA或运行DBCA来进行人工解锁。
Oracle中创建一个用户的命令为CREATE USER。下面我们看看语法和各种参数:
CREATE USER username IDENTIFIED [BY password | EXTERNALLY | GLOBALLY AS extname] [DEFAULT TABLESPACE tablespacename] [TEMPORARY TABLESPACE tablespacename] [ACCOUNT LOCK | UNLOCK] [PROFILE profilename | DEFAULT] [PASSWORD EXPIRE] [QUOTA num [K|M]] | UNLIMITED ON tablespace [QUOTA num [K|M]] | UNLIMITED ON tablespace]...]
CREATE USER命令的各种参数
参数 | 说明 |
username | 要创建的用户的名称。创建用户必须指定用户名,并且是唯一的。最长30个字符,并且应当遵循Oracle命名约定(必须以一个字母开头,可以包含数字、字母、符号#、_或$) |
IDENTIFIED | 指定验证用户真实性的方法,有下列3种: —BY password。其中,password 表示DBA指定的一个口令。 —EXTERNALLY。使用这种方法时,运行数据库的计算机的操作系统会对用户名进行身份验证。 —GLOBALLY AS extame。全用这种方法时,用户名和口令会被传递至extname 服务进行登录验证。这种身份验证类型需要外部身份验证机制。 |
DEFAULT TABLESPACE | 如果在创建对象时没有指定表空间,那么就使用这个默认的表空间名来存储用户所创建的段。如果在创建用户时没有指定DEFAULT TABLESPACE参数,那么在数据库层次上配置的表空间就会成为要使用的数据库默认表空间。如果没有配置数据库默认表空间,那么这个参数默认为SYSTEM。强烈建议:始终为用户指定默认表空间,如果预期用户会创建段,那么最好在这个表空间上指定一个定额 |
TEMPORARY TABLESPACE | 用于存储临时段(例如排序段)的表空间的名称。如果在创建用户时没有指定TEMPORARY TABLESPACE参数,那么在数据库层次上配置的表空间就会成为要使用的数据库临时表空间。如果没有配置数据库临时表空间,那么这个参数默认为SYSTEM。强烈建议:为用户指定临时表空间。 |
ACCOUNT LOCK|UNLOCK | 允许在创建用户时显式地锁定或解锁用户帐户。默认为UNLOCK。 |
PROFILE | 指定将要指派给用户的配置文件(profile)。配置文件会确定口令管理,并且可以选择限制应用于用户的资源。如果没有指定这个参数或没有使用关键字DEFAULT,那么就会为用户指派默认的配置文件。 |
PASSWORD EXPIRE | 允许在创建用户时自动终止用户的口令,从而强制用户在第一次建立成功的实例连接时更改口令。 |
QUOTA | 允许为数据库内表空间上的用户配置一个定额。指定为字节、千字节(KB)或兆字节(MB)形式。如果预期用户会创建段,那么应当在默认表空间上指定一个定额。对于常规用户来说,不能为其在表空间上指定UNLIMITED定额 |
下面我们先创建一个用户做例子(学有所用啊,这里所需要的东西,可以让我把前面所学的都复习一通,全部SQL打过来,速度之快,可见我的学习成果还是很不错的):
$ sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on Tue Sep 23 03:32:39 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> connect / as sysdba
Connected to an idle instance.
SQL> startup nomount
ORACLE instance started.
Total System Global Area 264241152 bytes
Fixed Size 1218868 bytes
Variable Size 67110604 bytes
Database Buffers 192937984 bytes
Redo Buffers 2973696 bytes
SQL> alter database mount;
Database altered.
SQL> alter database open;
Database altered.
SQL> create tablespace mydemo
2 datafile '/ora02/oradata/ocp/mydemo.dbf' size 10M;
Tablespace created.
SQL> create temporary tablespace mydemotemp
2 tempfile '/ora02/oradata/ocp/mydemotemp.ora' size 5M;
Tablespace created.
SQL> create user dandan identified by dandan1982
2 default tablespace mydemo
3 temporary tablespace mydemotemp
4 profile default;
User created.
3、修改用户属性
使用ALTER USER命令可以完成任务,语法如下:
ALTER USER username
IDENTIFIED [BY password | EXTERNALLY | GLOBALLY AS extname]
[DEFAULT TABLESPACE tablespacename]
[TEMPORARY TABLESPACE tablespacename]
[ACCOUNT LOCK | UNLOCK]
[PROFILE profilename | DEFAULT]
[PASSWORD EXPIRE]
[QUOTA num [K|M]] | UNLIMITED ON tablespace
[QUOTA num [K|M]] | UNLIMITED ON tablespace]...]
SQL> alter user dandan identified by dandan; User altered.
除了用户名之外,用户的所有属性都可以通过使用ALTER USER命令被修改。
4、删除用户
删除用户都能猜到是用DROP USER命令了,不过因为用户可能具有某个模式,所以这命令语法不像DROP USER username 一样简单。让我们来看命令语法:
DROP USER username [CASCADE]
因为用户与模式链接在一起,所以删除用户也会删除相应的模式。如果没有在DROP USER命令中指定CASEADE选项,那么Oracle并不允许同时删除用户和模式。
要删除某个模式用户,就必须指定DROP USER命令的CASECADE选项。不过,最好的方法是首先删除这个用对象,然后再删除该用户。因为如果删除不当,会导致严重的后果。我们可以验证其他用户并不依赖于这些对象后再删除。
为了查找待删除用户拥有的对象,可以查询DBA_OBJECTS视图。
SQL> select object_name, object_type 2 from dba_objects 3 where owner = 'dandan'; no rows selected SQL> select object_name, object_type 2 from dba_objects 3 where owner = 'dandan'; no rows selected
这里没有返回任何查询结果,那么可以安全删除用户:
SQL> drop user dandan;
User dropped.