第11章 用户与权限管理

用户和权限是Oracle数据库系统最基本的安全管理机制。用户通过SQL*Plus或者应用程序登录Oracle时,必须提供一个账号,即用户名和口令。登录后还必须有一定的权限才能完成相应的操作。用户具有什么样的权限,才能完成什么样的操作。如果用户希望访问数据库,首先应该由数据库管理员为其分配一个账号,然后再为它指定一定的权限,这样用户才能完成相应的操作。数据库管理员还可以通过PROFILE对用户使用口令及系统资源的情况进行控制。

11.1 用户管理

用户是一个数据库对象,是一系列数据库对象和权限的统称。用户所有的操作默认在自己的模式下进行,模式是一个用户所拥有的数据库对象的集合,每个用户都有自己的模式,用户与模式之间是一一对应的,模式的名字与用户名相同。例如,SCOTT用户的模式为SCOTT,在这个模式中包含了用户SCOTT拥有的所有数据库对象,包括表、视图、索引、存储程序等。

用户的数据库对象和数据分布在表空间中,每个用户都有默认的表空间。默认的表空间在创建用户时指定,如果不指定,那么SYSTEM表空间将被指定为该用户的默认表空间。

11.1.1 数据库中有哪些用户

在Oracle数据库中有三类用户,一类是sysdba,一类是sysoper,第三类是普通用户。其中前两类用户称为特权用户,它们拥有对所有数据库对象的一切权限,包括数据库本身。sys用户同时具有sysdba和sysoper两种权限,它在创建数据库时自动产生,不需要手工创建。

特权用户的口令一方面存放在数据库中,另一方面存储在口令文件中。如果为一个普通用户指定了sysdba或sysoper权限,那么这个用户也将成为特权用户。特权用户的信息可以从动态性能视图v$pwfile_users中获得。一个用户只要具有这两种权限,就可以以“as sysdba”或者“as sysoper”的方式登录数据库服务器。例如:


$sqlplus scott/tiger as sysdba


如果用户以“as sysdba”方式登录数据库服务器,那么他将成为sys用户。如果以“as sysoper”的方式登录,那么他将成为PUBLIC用户。这两种权限的范围大小是不一样的,例如,如果一个用户以“as sysdba”方式登录,那么他可以无条件地访问任何用户的数据,例如:


$sqlplus scott/tiger as sysdba

SQL>select*from user1.t1;


如果一个用户以“as sysoper”方式登录,那么他是不能访问其他用户的数据的。在后面的内容中,将对这两种权限进行详细的比较。

普通用户一般由sys用户创建,这类用户的权限比较小,一般只限于访问自己模式中的数据库对象。普通用户如果希望对数据库进行其他的访问,就需要具有相应的权限。