分类: LINUX
2009-05-18 09:07:33
第四章-用户创建与管理
4.1数据库的连接
基于操作系统的认证还和另外一个设置有关,我们可以在$ORACLE_HOME\network\admin下找到sqlnet.ora文件,这个文件中存在一个参数设置:SQLNET.AUTHENTICATION_SERVICES=(NTS)。这个文件由netca产生,如果安装软件时我们选择仅安装软件,那么这个文件可能并不存在,如果这个文件并不存在,那么本地认证将不可用。这个文件中的SQLNET.AUTHENTICATION_SERVICES参数设置为NTS,将启用系统认证;当这个参数被注释或者设置为NONE,那么操作系统认证将被关闭。
4.2用户的创建
创建用户的最简单语法如下:
CREATE USER user IDENTIFIED BY password;
更改缺省数据表空间的语法为:
Alter database default tablespace
更改缺省临时表空间的语法为:
Alter database default temporary tablespace
由于一直以来存在用户空间分配和使用问题,我们建议在创建用户时就为用户指定缺省的表空间。那么完善的创建用户的语句应该类似以下语句:
CREATE USER
DEFAULT TABLESPACE < tablespace_name >
TEMPORARY TABLESPACE < tablespace_name >;
4.3权限的授予
刚刚新建的用户需要CREATE SESSION的权限才能连接到数据库内部:
SQL> grant create session to eygle;
创建表权限:
SQL> grant create table to eygle;
Oracle的权限可以分为两类:
n
系统权限,每个系统权限允许用户执行一种或一类特定的数据库操作,例如CREATE SESSION就是一个系统权限。
n
对象权限,每个对象权限允许用户针对特定的对象种类执行一种特定的行为,例如CREATE TABLE就是一个对象权限。
这些权限可以通过oracle的视图DBA_SYS_PRIVS来查询,这个视图包含了被授予权限的用户信息(GRANTEE)以及具体的权限(PRIVILEGE)信息,如果授予权限时允许用户转授这个权限,那么ADMIN_OPTION就为YES:
查看用户获得的权限:
SQL> select * from dba_sys_privs where grantee=’eygel’
通常一个用户创建之后,我们授予用户两个角色就足够了,这两个角色是CONNECT和RESOURCE。接下来来一下这两个角色是哪些权限的集合:
SQL> select * from dba_sys_privs where grantee=’CONNECT’
现在回顾一下,为了创建一个可以访问数据库的用户,我们可能需要执行如下步骤:
SQL> create user eygle identified by eygle
Default tablespace users
Temporary tablespace temp;
SQL> grant connect,resourse to eygle;
此处不需要对空间进行授权,因为在RESOURSE角色分配了无限制使用默认表空间的权限(UNLIMITED TABLESPACE)
可以回收用户的UNLIMITED TABLESPACE权限:
SQL> revoke UNLIMITED TABLESPACE from eygle;
4.4外部认证
如果用户可以直接连接到操作系统,在创建用户时可以指定用户不通过口令,而是通过操作系统认证方式登录数据库:
SQL> create user ops$eygle identified externally default
tablespace user;
SQL> grant connect to ops$eygle;
这样用户在登录数据库时就不需要显示输入口令
如果要改成数据库认证:
SQL> alter user eygle identified by eygle;
值得注意的是REMOTE_OS_AUTHENT应该被设置为FALSE以防止远程系统认证用户的登录:
SQL> alter system set remote_os_authent=false scope=spfile;
4.5如何切换用户身份
在DBA管理数据库的过程中,经常需要切换为其他用户进行数据库维护,这就需要我们能够进行用户切换。
n
通过DBA用户连接数据库,从dba_users视图中查询得到oracle用户的口令加密串
SQL> select username.password from dba_user where username=’eygle’
n
然后可以修改这个用户的口令并连接到数据库:
SQL> alter user eygle identified by welcom;
n
在另外的session中,用DBA用户迅速将用户口令修改回原来的加密串(防止其他用户登录失败)
SQL>
alter user eygle identified by values ‘VDFSDFDFD78FDS’
4.6通过代理用户连接数据库
如果试图通过其他用户身份登录,上面的方法必须要修改用户口令,在那一瞬登录的用户仍然可能获得口令错误的提示,所以在10Gr2中,oracle提供了一个更好的解决方案企业用户代理:Enterprise user proxy。也就是说,我们可以创建一个共有代理用户,这个用户可以被用于代理企业用户或其他用户向目标用户切换,这个代理权限通常通过类似以下语句进行授权:
Alter user target_user grant connect through proxy_user;
来看一下以下的测试:
SQL> create user proxy identified by pproxy;
SQL> grant connect to proxy;
SQL> alter user eygle grant connect through proxy;
SQL> connect proxy[eygle]/pproxy;
这个有点类似linux的sudo。