1、区分dba,sysdba ,sysoper三者区别:
dba:只是一个角色。这个角色有个各种权限。
sysdba:这个难于理解,但是我可以把它理解成 拥有特定权限的一个身份。
当我们执行这样一句话:conn scott/liu123 as sysdba.这时,scott用户以sysdba的身份登录数据库。非常值得注意的是,这时的用户是SYS。 我们可以执行 show user 来验证。其输出结果为 user is "SYS"。
sysoper:这也是一个拥有特定权限的一个身份,scott用户以sysoper的身份登录数据这时,用户是PUBLIC。 我们可以执行 show user 来验证。其输出结果为 user is "PUBLIC"。
总结:
sysdba拥有最高的系统权限,登陆后是 sys
sysoper主要用来启动、关闭数据库,但是不能查询数据字典表。(关于集体测试参照:http://blog.csdn.net/changyanmanman/article/details/7354353)
sysoper 登陆后用户是 public,
sysdba和sysoper属于system privilege,也称为administrative privilege,拥有例如数据库开启关闭之类一些系统管理级别的权限sysdba和sysoper具体的权限可以看下表:
系统权限 |
sysdba |
sysoper |
区别 |
Startup(启动数据库) |
startup |
Shutdown(关闭数据库) |
shutdown |
|
alter database open/mount/backup |
alter database open/mount/backup |
|
改变字符集 |
none |
|
create database(创建数据库) |
None不能创建数据库 |
|
drop database(删除数据库) |
none |
|
create spfile |
create spfile |
|
alter database archivelog(归档日志) |
alter database archivelog |
|
alter database recover(恢复数据库) |
只能完全恢复,不能执行不完全恢复 |
|
拥有restricted session(会话限制)权限 |
拥有restricted session权限 |
|
可以让用户作为sys用户连接 |
可以进行一些基本的操作,但不能查看用户数据 |
|
登录之后用户是sys |
登录之后用户是public |
SYSDBA和SYSOPER系统权限允许我们在数据库打开之前以这两种身份去访问实例。
DBA 角色并未包含SYSDBA,SYSOPER这两个系统权限。他们是一类特殊的系统管理权限,允许管理员以这两种身份对数据库进行特殊的管理工作。
还有就是,不要轻易将SYSDBA,SYSOPER这两种系统权限授权给数据库的普通用户。也不要轻易将DBA角色赋给普通用户。在对数据库进行普通操作的时候,也不要以SYSDBA,SYSOPER登录。
2、用户与身份的关系:
下面举个例子:在scott用户下面创建一个测试表:
执行语句:create table admin_test(name varchar2(10)); 此时的用户方案是SCOTT。
再执行conn scott/liu123 as sysdba. —— 此时的方案是SYS
select * from admin_test;
这时会报错:ORA-00942: table or view does not exist.
这就说明,同一个用户在两个不同的方案中创建的对象,是不一样的,也不能再同个这个用户在别的方案中访问他。
3、设置REMOTE_LOGIN_PASSWORDFILE参数:
除了设置password fiel之外,给这个remote_login_passwordfile参数也是必须的,这个参数有如下值:
NONE:若给这个参数设置了这个值,那就像是password file文件不存在一样,这样没有连接特权的用户也可以进行不安全的连接。
EXCLUSIVE: 默认就是这个值,这种排他式的password 文件在一个数据库中只能允许一个实例,用这个模式时,可以运行用户添加,修改,删除一个用户。甚至你可以修改SYS用户的密码:ALTER USER SYS SET ....。
SHARED:这样的一个password file可以允许一个系统上有多个数据库,也可以允许一个数据库对应多个实例(rac)。这种模式的密码文件(password file )不能被修改,这就意味着你不能添加删除任何用户,即使你拥有sysdba权限也不行,如果你想添加删除用户,只能是先把这个参数的模式改为EXCLUSIVE,然后修改后再改为SHARED.然后再共享这个文件。
最后,如果这个参数被丢失了,那就和等于NONE是一样的。
如何设创建password file?
可以用平orapwd 命令创建此文件:
C:/>orapwd Usage: orapwd file=<fname> password=<password> entries=<users> force=<y/n>
where file - name of password file (mand), password - password for SYS (mand), entries - maximum number of distinct DBA and force - whether to overwrit OPERs (opt), There are no spaces around the equal-to (=) character.
C:/> |
File参数:口令文件名称
Password参数:sys用户的口令
Entries参数:为其他特许的Oracle用户帐户保留的条目数量
remote_login_passwordfile参数在数据库的哪里呢?怎么设置它呢?来,咱们慢慢来:
首先这个remote_login_passwordfile参数在init.ora初始化文件中,其具体目录为$ORACLE_HOME/dbs/init.ora. 用vi编辑器加上remote_login_passwordfile=EXCLUSIVE这句。
行了,可以在sqlplus中查看了:
SQL> show parameter remote_login_passwordfile
NAME TYPE VALUE ------------------------------------ ----------- ----------- remote_login_passwordfile string EXCLUSIVE SQL> |
EXCLUSIVE值:该参数说明只有一个数据库可以使用这个口令文件。在这种模式下,口令文件可以包含用于多个特许的Oracle账户的口令。这是推荐的操作模式,特别是在运行RMAN时。如果希望将RMAN与来自于远程客户端的数据库连接,则必须使用该参数设置。
需要注意的是:这个参数不是动态参数。需要在数据库加载到MOUNT状态下修改,另外改变以后需要重新启动数据库,参数的设置才能够生效。
如何添加用户到password file中:
当你给一个用户赋予了SYSDBA或SYSOPER权限之后,这个用户的名字和权力的信息就被加入到了password file中,注意此时的模式必须是EXCLUSIVE的,如果是别的就会报错。
当一个用户的SYSDBA或SYSOPER权限被收回了,那就把相应的信息从password file中删除。
这两种权限是不能授权给某个角色的,因为角色必须是数据库启动后才能用,但是这两权限应该是操作系统角色可用的。数据库未启动之前就可以授权给某个用户。
下面是练习者自己加一个用户:
create user liu identified by liu555; ——成功创建一个新的用户。
给liu用户赋权sysdba: grant sysdba to liu 。
好了出问题了:ORA-01994: GRANT failed: password file missing or disabled.
ymptoms of The Error:
-------------------------
In unix system whenever you tried to grant sysdba privilege to a user it returns with error.
ORA-01994: GRANT failed: password file missing or disabled.
Cause of The Problem:
------------------------
The oracle software owner is not the owner of the passwordfile.
Solutions of The Problem:
----------------------------
1)Log on to Unix box as the same user who owns the file $ORACLE_HOME and create the password file as follows.
$orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=password entries=4 force=y
(注意文件名:应该为orapw$ORACLE_SID,否则无法识别。我就犯了这个错误)
2)Now grant sysdba privilege to the users that you need. Check V$PWFILE_USERS about the entry.
SQL>GRANT SYSDBA to SYSTEM; ——这是原来的。
我的是:grant sysdba to liu。 ——授权成功。
Check V$PWFILE_USERS about the entry:
用 select * from v$PWFILE_USERS.查看。
3)Check the owner of $ORACLE_HOME/dbs/orapw$ORACLE_SID
This would typically,
SQL> !ls -l $ORACLE_HOME/dbs/orapw$ORACLE_SID
-rw-r----- 1 oracle oinstall 1536 Apr 23 16:31 /oracle/app/oracle/product/10.2.0/db_1/dbs/orapwdata1
4)If it is not to dba then change the ownership by
$chown oracle:dba $ORACLE_HOME/dbs/orapw$ORACLE_SID
Also change permission by,
$chmod 4640 $ORACLE_HOME/dbs/orapw$ORACLE_SID
Related Documents: