Oracle中的用户、角色、权限(一)
一、用户的创建
在oracle中,用户与schema是一一对应的关系,在创建一个用户的同时也就创建了一个相应的schema。所谓的schema就是指该用户下所有对象的集合。在创建一个用户的时候,若不显示指定表空间跟临时表空间,则会使用系统的默认表空间跟临时表空间。一般在创建用户的时候都会指定一个表空间,否则有可能使用系统的默认表空间(system表空间)。
通过database_properties数据字典可以查询数据库的默认表空间、临时表空间及其他信息:
SQL> desc database_properties;
Name Null? Type
----------------------------------------- -------- ----------------------------
PROPERTY_NAME NOT NULL VARCHAR2(30)
PROPERTY_VALUE VARCHAR2(4000)
DESCRIPTION VARCHAR2(4000)
SQL> select property_name,property_value from database_properties;
PROPERTY_NAME PROPERTY_VALUE
------------------------------ ------------------------------
DICT.BASE 2
DEFAULT_TEMP_TABLESPACE TEMPTS
DEFAULT_PERMANENT_TABLESPACE TBS_1
DBTIMEZONE +08:00
DEFAULT_TBS_TYPE SMALLFILE
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET ZHS16GBK
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_RDBMS_VERSION 10.2.0.1.0
GLOBAL_DB_NAME ORCL
EXPORT_VIEWS_VERSION 8
27 rows selected.
通过dba_tablespaces数据字典可以查询到数据库中已创建的表空间的相关信息:
SQL> desc dba_tablespaces;
Name Null? Type
----------------------------------------- -------- ----------------------------
TABLESPACE_NAME NOT NULL VARCHAR2(30)
BLOCK_SIZE NOT NULL NUMBER
INITIAL_EXTENT NUMBER
NEXT_EXTENT NUMBER
MIN_EXTENTS NOT NULL NUMBER
MAX_EXTENTS NUMBER
PCT_INCREASE NUMBER
MIN_EXTLEN NUMBER
STATUS VARCHAR2(9)
CONTENTS VARCHAR2(9)
LOGGING VARCHAR2(9)
FORCE_LOGGING VARCHAR2(3)
EXTENT_MANAGEMENT VARCHAR2(10)
ALLOCATION_TYPE VARCHAR2(9)
PLUGGED_IN VARCHAR2(3)
SEGMENT_SPACE_MANAGEMENT VARCHAR2(6)
DEF_TAB_COMPRESSION VARCHAR2(8)
RETENTION VARCHAR2(11)
BIGFILE VARCHAR2(3)
SQL> select tablespace_name,contents from dba_tablespaces;
TABLESPACE_NAME CONTENTS
------------------------------ ---------
SYSTEM PERMANENT
UNDOTBS UNDO
SYSAUX PERMANENT
TBS_1 PERMANENT
MYTBS PERMANENT
TEMPTS TEMPORARY
6 rows selected.
通过以下语句可以创建一个用户:
SQL> create user mytbs identified by mytbs default tablespace mytbs;
User created.
此时可以通过查询dba_users数据字典来查询数据库中已建立的用户的相关信息:
SQL> desc dba_users
Name Null? Type
----------------------------------------- -------- ----------------------------
USERNAME NOT NULL VARCHAR2(30)
USER_ID NOT NULL NUMBER
PASSWORD VARCHAR2(30)
ACCOUNT_STATUS NOT NULL VARCHAR2(32)
LOCK_DATE DATE
EXPIRY_DATE DATE
DEFAULT_TABLESPACE NOT NULL VARCHAR2(30)
TEMPORARY_TABLESPACE NOT NULL VARCHAR2(30)
CREATED NOT NULL DATE
PROFILE NOT NULL VARCHAR2(30)
INITIAL_RSRC_CONSUMER_GROUP VARCHAR2(30)
EXTERNAL_NAME VARCHAR2(4000)
SQL> select username,password from dba_users;
USERNAME PASSWORD
------------------------------ ------------------------------
DBSNMP E066D214D5421CCC
DIP CE4A36B8E06CA59C
TSMSYS 3DF26A8B17D0F29F
SYSTEM D4DF7931AB130E37
SYS 4DE42795E66117AE
MYTBS C7618B865F241C60
OUTLN 4A3BA55E08595C81
7 rows selected.
在oracle中也支持操作系统认证的用户,具体创建方法如下:
--显示oracle中的默认操作系统认证用户的用户名前缀
--即os_authent_prefix参数
SQL> show parameter os
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
optimizer_index_cost_adj integer 100
os_authent_prefix string ops$
os_roles boolean FALSE
remote_os_authent boolean FALSE
remote_os_roles boolean FALSE
timed_os_statistics integer 0
SQL> create user ops$test identified externally default tablespace test;
User created.
同时在linux下建立test用户,并设置相应的环境变量(ORACLE_SID、ORACLE_HOME、PATH等):
[root@localhost etc]# useradd test -g dba -G dba
[root@localhost etc]# id test
uid=501(test) gid=500(dba) groups=500(dba)
[root@localhost etc]# passwd test
Changing password for user test.
New UNIX password:
BAD PASSWORD: it is too short
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
[root@localhost test]# cp /home/oracle/.bash_profile /home/test/
cp:是否覆盖‘/home/test/.bash_profile’? yes
[root@localhost test]# su - test
[test@localhost ~]$ id
uid=501(test) gid=500(dba) groups=500(dba)
[test@localhost ~]$ echo $ORACLE_SID
orcl
[test@localhost ~]$ sqlplus /
SQL*Plus: Release 10.2.0.1.0 - Production on Tue Feb 22 14:49:43 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
ERROR:
ORA-01045: user OPS$TEST lacks CREATE SESSION privilege; logon denied
--以上错误主要是因为我们没有赋给该用户相应的权限,在下文中将介绍权限
以上主要介绍了用户的创建,在创建用户的时候可以给该用户指定更多的参数,具体可以到oracle官方联机文档(OracleSQL Reference)里查。当然,此时建立的用户并不能登录oracle,因为还没有相应的权限,在下一篇文章中将介绍这部分内容。