天天看点

我的Oracle 9i学习日志(21)-- 用户管理

<a target="_blank" href="http://blog.51cto.com/attachment/201004/100129703.png"></a>

图1

<b>验证机制:</b>

可通过以下方式之一对需要访问数据库的用户进行验证:

• 数据字典

• 操作系统

• 网络

<b>数据库方案(schema)</b>

方案是与某个用户关联的对象(包括:表、触发器、约束、索引、视图、序列、存储程序单元、同义词、用户定义的数据类型、数据库链接等)的特定集合。创建数据库用户时,就会相应地为该用户创建同名的方案。用户只能与同名的方案关联,因此用户名和方案经常互用。

<b>Checklist for Creating Users</b>

•确定用户需要在其中存储对象的表空间。

•确定每个表空间的限额。

•指定一个缺省表空间与临时表空间。

•创建用户。

•向用户授予权限与角色。

创建新用户:数据库验证

语法:

使用以下命令创建新用户:

CREATE USER user

IDENTIFIED {BY password | EXTERNALLY}

[ DEFAULT TABLESPACE tablespace ]

[ TEMPORARY TABLESPACE tablespace ]

[ QUOTA {integer [K | M ] | UNLIMITED } ON tablespace

]...]

[ PASSWORD EXPIRE ]

[ ACCOUNT { LOCK | UNLOCK }]

[ PROFILE { profile | DEFAULT }]

其中:

User:是用户名

BY password:指定用户在登录时需通过数据库验证,还必须提供口令

EXTERNALLY:指定用户需通过操作系统验证

GLOBALLY AS:指定对用户进行全局验证

DEFAULT 或TEMPORARY TABLESPACE:为用户标识缺省或临时表空间

QUOTA:定义表空间中允许用户拥有对象所具有的最大空间(可将限额定义为整数字节或千字节/兆字节。关键字UNLIMITED 用于指定用户拥有的对象可使用表空间内的全部可用空间。缺省情况下,用户在任何表空间上都没有限额。)

PASSWORD EXPIRE:强制用户在使用SQL*Plus 登录到数据库时重置口令(该选项仅在用户通过数据库进行验证时有效)。

ACCOUNT LOCK/UNLOCK:可用于显式锁定或解除锁定用户帐户(UNLOCK 为缺省设置)

PROFILE:用于控制资源使用和指定用户的口令控制机制。

口令验证方法是必需的。如果指定了口令,则Oracle 服务器将在数据字典中对其进行维护。用户通过服务器进行验证时,可使用Oracle 服务器提供的口令控制机制。

<b>操作系统验证:</b>

用CREATE USER 命令的IDENTIFIED EXTERNALLY 子句指定用户必须通过操作系统进行验证。当用户直接登录到运行Oracle 服务器的计算机上时,该选项通常很有用。

操作系统验证的用户名:

OS_AUTHENT_PREFIX 初始化参数用来指定操作系统验证的用户名的格式。该参数的缺省值为OPS$,以便与Oracle 服务器的早期版本向后兼容。要将前缀设置为NULL 值,该初始化参数指定为:OS_AUTHENT_PREFIX = ““

例:

CREATE USER OPS$aaron

IDENTIFIED EXTERNALLY

DEFAULT TABLESPACE USERS

TEMPORARY TABLESPACE temp

QUOTA 15m ON USERS

PASSWORD EXPIRE;

此处指定允许操作系统用户aaron 无需经过Oracle 服务器验证即可访问数据库。因此,若要使用SQL*Plus 登录到系统,则UNIX 用户aaron 必须从该操作系统输入下列命令:

$ sqlplus /

注:

• 使用OS_AUTHENT_PREFIX=OPS$ 时:提供了灵活的用户验证方式,既可通过操作系统进行验证,也可通过Oracle 服务器进行验证。在这种情况下,DBA 可通过输入下列格式的命令创建用户:

CREATE USER ops$user

IDENTIFIED BY password ...

• 登录到运行Oracle 服务器的计算机上的用户无需提供口令。如果用户从远程客户机连接,则可提供口令以实现连接。

• 设置另一个初始化参数REMOTE_OS_AUTHENT=TRUE,指定用户可通过远程操作系统进行验证。缺省值FALSE 表示用户只能通过运行Oracle 服务器的计算机进行验证。应小心使用该参数,因为可能存在安全隐患。

• 如果数据库中的某些用户通过操作系统进行验证,则更改OS_AUTHENT_PREFIX 可防止这些用户登录到数据库。

<b>更改用户的表空间限额</b>

使用下列命令修改表空间限额或重新分配表空间:

ALTER USER user

[ DEFAULT TABLESPACE tablespace]

[ TEMPORARY TABLESPACE tablespace]

[ QUOTA {integer [K | M] | UNLIMITED } ON tablespace

[ QUOTA {integer [K | M] | UNLIMITED } ON tablespace ]

...]

如果分配的限额为0,用户拥有的对象仍保留在撤消的表空间内,但不能给它们分配新的空间。例如,如果表空间USERS 内有一个10 MB 的表,若将该表空间的限额改为0,则不能再为该表分配新区。任何未更改的选项保持不变。

注:对于UNLIMITED TABLESPACE 权限应格外注意,因为它优先于限额设置。

<b>删除用户</b>

DROP USER user [CASCADE]

原则:

• 在删除用户前,CASCADE 选项将删除方案中的所有对象。如果方案中包含任何对象,则必须指定该选项。

• 不能删除当前与Oracle 服务器连接的用户。

<b>获取信息;</b>

• DBA_USERS

• DBA_TS_QUOTAS

关于普通用户无法使用sqlplus的问题(求解决):

环境RedHat5.4,Oracle9.0.2.4

$ id

uid=500(lty) gid=500(lty) groups=500(lty)

$ env|grep ORACLE

ORACLE_SID=lty

ORACLE_BASE=/u01

ORACLE_HOME=/u01/oracle

export PATH=$PATH:/u01/oracle/bin

 $ sqlplus /                                      #lty为系统认证用户。

-bash: sqlplus: command not found

$ /u01/oracle/bin/sqlplus /

-bash: /u01/oracle/bin/sqlplus: Permission denied

查询文件权限:

$ ls -l sqlplus

-rwxr-x--x 1 oracle oinstall 663004 Feb 17 22:43 sqlplus

请问在不改变用户主属的条件下我该如何解决普通用户不能执行sqlplus的问题?

改变主属后问题依旧

uid=500(lty) gid=501(oinstall) groups=501(oinstall),502(dba)

$ export ORACLE_HOME=/u01/oracle ORACLE_SID=lty PATH=$PATH:/u01/oracle/bin

$ slqplus /

-bash: slqplus: command not found

问题已解决,谢谢关注!

解决方法:chmod 755 oracle

本文转自 d185740815 51CTO博客,原文链接:http://blog.51cto.com/luotaoyang/294898,如需转载请自行联系原作者