CONNECT USERNAME/PASSWORD@SERVERNAME AS SYSDBA
connect 是指链接到
username是指用户名
password是指密码
servername是指服务名
as sysdba是指已数据库管理员的身份登陆
不知道能不能帮到你。linux
oracle提供的认证模式
1. 操做系统验证(匿名登陆 不检验用户名和密码)
conn / as sysdba既是操做系统认证
只能用在本地 由于数据库软件安装在操做系统之上 用户必须是dba组;
能直接访问操做系统了 oracle就不须要限制了.sql
在类UNIX系统中 基于权限委派的缘由
对于普通用户
添加到oinstall dba组中便可
若是只添加dba组也不能够
由于oracle安装目录基本都是750权限 即便改目录权限 库函数权限也没法获取 还须要改
对于root用户
由于UNIX权限委派的第一步就是验证UID是否等于0
因此即便是添加到oinstall dba组也不能登陆shell
记住,不要用oracle之外的用户去操做oracle
就比如 老板不能去作前台同样 不要违背这些已规划好的规则.
2.密码文件认证
密码文件存储的位置 $ORACLE_HOME/dbs/orapw$ORACLE_SID数据库
oracle中有两类特殊的身份SYSDBA和sysoper,当DBA须要对数据库进行维护管理操做的时候,
必须具备这两类特殊身份之中的一种.
在数据库没有打开的时候,使用数据库内建的帐号是没法登录数据库的,
可是拥有SYSDBA或是SYSOPER权限的用户是能够登录的。
认证用户是否拥有两类特殊权限的方法有两种:OS认证和口令文件认证。 vim
Oracle数据库究竟使用OS认证仍是口令文件认证来进行管理取决于下面三个因素:
1.SQLNET.ORA参数文件中的参数SQLNET.AUTHENTICATION_SERVICES设置
2.PFILE(SPFILE)参数文件中的参数REMOTE_LOGIN_PASSWORDFILE设置
3.口令文件orapw$SID(Linux) | PWD$SID.ora(Windows) 是否存在windows
Oracle权限认证的基本顺序是这样的:
先由SQLNET.AUTHENTICATION_SERVICES的设置值来决定是使用OS认证仍是口令文件认证,
若是使用口令文件认证的话就要看后面两个条件了:
若是REMOTE_LOGIN_PASSWORDFILE参数设置为非NONE,
并且口令文件存在的话就能正常使用口令文件认证,不然将会失败。服务器
SQLNET.AUTHENTICATION_SERVICES参数
在SQLNET.ORA(位于$ORACLE_HOME/network/admin目录中)文件中,须要修改时直接用文本编辑器打开修改就好了,
对于不一样的操做系统SQLNET.AUTHENTICATION_SERVICES的取值会有些不同,一般咱们会用到下面的一些设置值:
linux下 none all nts 不设置或BEQ 四种状况
启动监听 lsnrctl start 用于网络链接 走密码文件
使用外部命令将sys的密码设置成a
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=a force=y
linux平台测试
第一种默认状况 没设置或者设置成BEQ
[oracle@dba admin]$ grep -v '#' sqlnet.ora网络
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)session
[oracle@dba admin]$
$ sqlplus sys/a@db10 as sysdba
能够登陆
$ sql / as sysdba
能够登陆
结论: 没设置或值为BEQ时 密码认证和OS认证都启用oracle
第二种状况 设置成none
[oracle@dba admin]$ grep -v '#' sqlnet.ora
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
SQLNET.AUTHENTICATION_SERVICES=(none)
[oracle@dba admin]$
[oracle@dba admin]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on Sat Apr 30 04:35:02 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn / as sysdba
ERROR:
ORA-01031: 权限不足
SQL> conn sys/a as sysdba
Connected.
SQL>
SQL> conn sys/a@db10 as sysdba
Connected.
SQL>
结论: (none) OS认证被屏蔽 必须走密码文件认证
第三种状况 设置成all
SQL> conn / as sysdba
Connected.
SQL> conn sys/a@db10 as sysdba
ERROR:
ORA-12641: Authentication service failed to initialize
Warning: You are no longer connected to ORACLE.
SQL>
结论: all 密码文件认证被屏蔽 只能OS认证
第四种状况 设置nts
[oracle@dba admin]$ grep -v '#' sqlnet.ora
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
SQLNET.AUTHENTICATION_SERVICES=(nts)
[oracle@dba admin]$
SQL> conn / as sysdba
ERROR:
ORA-01031: 权限不足
SQL> conn sys/a as sysdba
Connected.
SQL> conn sys/a@db10 as sysdba
Connected.
SQL>
结论: nts只能密码文件认证
windows平台测试
第一种 默认状况 设置nts
SQL> conn / as sysdba
已链接。
SQL> alter user sys identified by a;
用户已更改。
SQL> conn / as sysdba
已链接。
SQL> conn sys/a as sysdba
已链接。
SQL> conn sys/a@orawin as sysdba
已链接。
SQL>
结论: 设置nts(和linux不一致) 密码和OS认证都启用
第二种 设置成none
SQL> conn / as sysdba
ERROR:
ORA-01031: insufficient privileges
SQL> conn sys/a as sysdba
已链接。
SQL> conn sys/a@orawin as sysdba
已链接。
SQL>
结论: 设置成none(和linux一致) 只能密码认证 OS认证被屏蔽
第三种 设置成 all
SQL> conn / as sysdba
ERROR:
ORA-12641: 验证服务没法初始化
SQL> conn sys/a as sysdba
ERROR:
ORA-12641: 验证服务没法初始化
SQL> conn sys/a@orawin as sysdba
ERROR:
ORA-12641: 验证服务没法初始化
结论: 此参数在windows下 OS和密码认证都屏蔽了
第四种 不设置
SQL> conn / as sysdba
ERROR:
ORA-01031: insufficient privileges
SQL> conn sys/a as sysdba
已链接。
SQL> conn sys/a@orawin as sysdba
已链接。
SQL>
结论:只容许密码认证 OS认证被屏蔽
第五种 设置成beq
SQL> conn / as sysdba
ERROR:
ORA-01031: insufficient privileges
警告: 您再也不链接到 ORACLE。
SQL> conn sys/a as sysdba
已链接。
SQL> conn sys/a@orawin as sysdba
已链接。
SQL>
结论:只能使用密码认证 OS认证被屏蔽
REMOTE_LOGIN_PASSWORDFILE参数
此系统参数的设置制定了数据库使用口令文件的方法,此参数能够设置的值有三个:
REMOTE_LOGIN_PASSWORDFILE = NONE
不使用口令文件
REMOTE_LOGIN_PASSWORDFILE = EXCLUSIVE
使用口令文件,但只有一个数据库实例可用使用
REMOTE_LOGIN_PASSWORDFILE = SHARED
多个数据库实例共用一个口令文件,这种设置下是不能增长其余数据库用户做为特殊权限用户到口令文件中的。
alter system set REMOTE_LOGIN_PASSWORDFILE = NONE scope = spfile;
grant sysdba to scott;
select * from v$pwfile_users;
密码文件
存储sysdba sysoper身份验证的密码,固然也能够将普通用户提高到这个身份
sysdba 超级管理员 conn / as sysdba
sysoper 操做员 conn / as sysoper
两个身份的区别
sysdba 不授权限控制
sysoper 和sysdba比sysdba缺乏的权限:
1.不能建库
2.不能启动数据库到受限会话模式
3.不能进行热备份
4.不能进行数据库的不彻底恢复
5.不能查询dba_数据字典
其实咱们一般都用sysdba而不用sysoper
SYS@ora10g> conn / as sysdba
Connected.
SYS@ora10g> show user
USER is "SYS"
SYS@ora10g>
只要使用 as sysdba登陆 show user永远是sys
SYS@ora10g> conn / as sysoper
Connected.
PUBLIC@ora10g> show user
USER is "PUBLIC"
PUBLIC@ora10g>
只要使用 as sysoper登陆 show user永远是public
修改超级用户的口令
1.使用管理员(sys system)用户登陆 在数据库内部去修改
SYS@ora10g> show user
USER is "SYS"
SYS@ora10g> alter user sys identified by sys;
User altered.
SYS@ora10g> 这样就把sys的密码改为了sys
2.直接修改口令文件 但口令文件是二进制的 只能用orapwd命令去从新建立
SYS@ora10g> !orapwd
Usage: orapwd file=<fname> password=<password> entries=<users> force=<y/n>
SYS@ora10g> ! orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=oracle entries=1 force=y
SYS@ora10g> 这样就把sys密码设置成了oracle
受权
SYS@ora10g> grant sysdba to u1;
entries=<users> 默认的数值是4 也就是能容纳多少个用户
设置规律
0-4 能够容纳5个
5-8 能够容纳9个
9-12 能够容纳13个
依此类推...
[oracle@shell dbs]$ orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=oracle entries=1 force=y
O7_DICTIONARY_ACCESSIBILITY 参数的做用
sys是数据库库内部的超级用户 默认链接必须使用as sysdba身份
而这个参数能够无需使用as sysdba身份而直接使用sys链接 意义不大
SQL> conn / as sysdba
Connected.
SQL>
SQL> show parameter o7
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
O7_DICTIONARY_ACCESSIBILITY boolean FALSE
SQL>
SQL> alter user sys identified by a;
User altered.
SQL> conn sys/a
ERROR:
ORA-28009: connection as SYS should be as SYSDBA or SYSOPER
Warning: You are no longer connected to ORACLE.
SQL> conn / as sysdba
Connected.
SQL> show parameter o7
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
O7_DICTIONARY_ACCESSIBILITY boolean FALSE
SQL> alter system set O7_DICTIONARY_ACCESSIBILITY=true scope=spfile;
System altered.
SQL> startup force
ORACLE instance started.
Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 75499088 bytes
Database Buffers 205520896 bytes
Redo Buffers 2973696 bytes
Database mounted.
Database opened.
SQL> show parameter o7
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
O7_DICTIONARY_ACCESSIBILITY boolean TRUE
SQL> conn sys/a
Connected.
SQL> select count(*) from session_roles;
COUNT(*)
----------
32
SQL> select count(*) from session_privs;
COUNT(*)
----------
161
SQL> conn / as sysdba
Connected.
SQL> select count(*) from session_roles;
COUNT(*)
----------
0
SQL> select count(*) from session_privs;
COUNT(*)
----------
166
SQL>
各版本之间sys的权限分派
oracle805
svrmgrl
server manager line 缩写
管理底层数据库的启动中止
connect internal
sys数据库的全部者
system 管理者
sqlplus只能作查询
oracle8I
svrmgrl
server manager line 缩写
管理底层数据库的启动中止
connect internal
as sysdba 新增 但尚未彻底取代 svrmgrl connect internal
sqlplus 提高到能够启库停库
oracle9I
as sysdba 彻底取代了 svrmgrl和connect internnal
存在于数据库以外 因此没角色(role)
sys/a 数据库内部的管理员
有角色
***************************************************************************
oinstall和dba组中的用户,登陆服务器本机,直接经过OS的认证,直接登陆数据库
oracle用户是用来安装oracle数据库软件,哪一个用户装的,用哪一个用户操做
sqlplus user/pass@IP:port/service_names;---走密码文件
sqlplus sys/pass@IP:port/service_names as sysdba
sys用户经过as sysdba登陆,直接找密码文件中的密码,判断跟输入的密码是否一致
as sysoper 直接找密码文件中的密码,判断跟输入的密码是否一致
普通用户登陆,拿着密码到数据字典中获取密码,只有数据库打开的状况下才能执行
as sysdba|sysoper(描述符) 数据库尚未启动,若是想要启动数据库,须要验证身份
若是把as sysdba的密码也放在数据字典里,那么数据库关闭的时候,不能访问
数据字典,致使没人可以启动数据库
as sysdba:超级管理员身份的切换,切换到内部sys
as sysoper:操做员,切换到内部public
as sysdba链接数据库,显示的用户都是sys,sys用户是不能直接登陆的,必须是以as sysdba登陆
as sysdba的链接符进行切换,显示的用户是public
as sysoper链接数据库,显示的用户都是public
密码文件
$ORACLE_HOME/dba/orapw$ORACLE_SID
SYS@ora10g> 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)
SYS@ora10g> select username,password from dba_users where username='SCOTT';
USERNAME PASSWORD
------------------------------ ------------------------------
SCOTT 4DD35D67F0372586
conn sys/pass 默认关闭,不让链接
sqlplus / as sysdba;禁用
vim $ORACLE_HOME/network/admin/sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES=(beq);一个值能够不加(),通常写大写
beq none all nts
因平台的不一样,效果也不一样
beq:默认
sqlplus / as sysdba:容许登陆
sqlplus sys/oracle@IP:port/service_name as sysdba:容许登陆
none:
sqlplus / as sysdba;拒绝
sqlplus sys/oracle@IP:port/service_name as sysdba;容许登陆
all:
sqlplus / as sysdba;容许登陆
sqlplus sys/oracle@IP:port/service_name as sysdba;拒绝
nts:
sqlplus / as sysdba;容许登陆
sqlplus sys/oracle@IP:port/service_name as sysdba;拒绝
SYS@ora10g> show parameter remote_login_passwordfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
remote_login_passwordfile string EXCLUSIVE
$ORACLE_HOME/dba/orapw$ORACLE_SID密码文件不存在了:
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=abc force=y
密码文件的改变不影响数据字典中的密码,alter修改用户的密码,密码文件中的密码也改变
实验一:
第一步:
sqlplus /nolog
conn / as sysdba
seleect username,password from dba_users where username='SYS';
第二步:
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=abc force=y;--修改密码文件中的密码
第三步:
sqlplus /nolog
conn / as sysdba
seleect username,password from dba_users where username='SYS';
结果:第一步和第三步的结果集同样,改变密码文件中的密码,数据字典中的密码不改变
实验二:
第一步:
strings $ORACLE_HOME/dbs/orapw$ORACLE_SID
第二步:
sqlplus /nolog
conn / as sysdba
seleect username,password from dba_users where username='SYS';
alter user sys identified by sys123;--修改数据字典中的密码
seleect username,password from dba_users where username='SYS';
第三步:
strings $ORACLE_HOME/dbs/orapw$ORACLE_SID
结果:第一步和第三步的结果集不同,改数据字典中的密码,密码文件中的密码也随之改变
摘自:http://blog.csdn.net/lsz_qh/article/details/7349110