用户(user)与模式(schema)的区别
A user is a name defined in the database that can connect to and access objects.
Oracle用户是用连接数据库和访问数据库对象的。(用户是用来连接数据库访问数据库)。
A schema is a collection of database objects (used by a user.).
Schema objects are the logical structures that directly refer to the database’s data.
模式是数据库对象的集合。模式对象是数据库数据的逻辑结构。
用户认证方式
OS vs DB(包含pwdfile)
$ORACLE_HOME/network/admin/sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES = none | all | ntf(windows)
none : 表示关闭操作系统认证,只能密码认证
all : 用于linux或unix平台,关闭本机密码文件认证,采用操作系统认证,但远程可以使用密码文件认证
nts : 用于windows平台
pwdfile(v$pwfile_users)
进行DBA权限的身份认证(比如数据库未启动之前)
Usage: orapwd file= entries= force= ignorecase= nosysdba=
# 等号(=)两边不能有空格
# file 指定密码文件名 orapw (不是orapwd)
windows平台上密码文件的名字为PWD.ora
# password 指定密码
# entries - maximum number of distinct DBA (optional),
# force 密码文件已存在时,强制覆盖
# ignorecase 11g,指定是否大小写敏感
# nosysdba, Database Vault组件使用,指定sysdba是否可通过密码文件登录
密码文件查找的顺序
--->orapw--->orapw--->Failure
remote_login_passwordfile = none | exclusive |shared 位于$ORACLE_HOME/dbs/spfile$ORACLE_SID.ora参数文件中
none : 不使用密码文件认证
exclusive :要密码文件认证,自己独占使用(默认值)
shared :要密码文件认证,不同实例dba用户可以共享密码文件 表示在RAC或者多实例公用host的情况下,使用一份passwordfile。这种方式下,sys的密码是不能够轻易修改的。此外,对于非sys用户加入到密码文件中,也有一些限制。
以sysdba登录时要加 as sysdba,否则不会有sysdba权限
往密码文件中增加用户和修改dba用户密码:
grant dba to
alter user identified by
用户的创建
DB用户:
CREATE USER user_name
IDENTIFIED BY password|externally // 如果密码是数字,请用双引号括起来
[DEFAULT TABLESPACE tbs_name]
[TEMPORARY TABLESPACE tbs_name]
[QUOTA n K|M|unlimited ON tbs_name]
[PASSWORD EXPIRE]
[ACCOUNT LOCK|UNLOCK]
[PROFILE profile_name]
CREATE USER jward
IDENTIFIED BY password
DEFAULT TABLESPACE data_ts
QUOTA 100M ON test_ts
QUOTA 500K ON data_ts
TEMPORARY TABLESPACE temp_ts
PROFILE clerk;
GRANT CREATE SESSION TO jward;
OS用户:
外部认证
1、查看操作系统认证前辍
SQL> show parameter os_authent_prefix
NAME TYPE VALUE
------------------------------------ ----------- -------
os_authent_prefix string ops$
2、在操作系统创建一个用户,并加入到相关的组中,设置环境变量
useradd huayd
gpasswd -a huayd oinstall # id oracle 且 775 /u01
cp /home/oracle/.bash_profile /home/huayd/
3、创建数据库用户,名字为 前辍+操作系统用户
SQL> create user ops$huayd identified externally;
SQL> grant create session to ops$huayd;
4、登录
登录到操作系统
su - huayd
sqlplus /
用户状态
sys@oray>select * From USER_ASTATUS_MAP;
STATUS# STATUS
---------- --------------------------------
0 OPEN
1 EXPIRED
2 EXPIRED(GRACE)
4 LOCKED(TIMED)
8 LOCKED
5 EXPIRED & LOCKED(TIMED)
6 EXPIRED(GRACE) & LOCKED(TIMED)
9 EXPIRED & LOCKED
10 EXPIRED(GRACE) & LOCKED
基本状态: open,expired,expired(grace),locked(timed),locked
组合状态: 5,6,9,10 # 位运算
这五种基本状态又可以分为三类:1.正常状态;2.锁定状态;3.密码过期状态。
1)OPEN状态不用多解释,表示用户处于正常状态。
2)用户被锁定状态,LOCKED和LOCKED(TIMED)两种状态都属于锁定状态
用户被锁定一般分为两种:一种是DBA显式的通过SQL语句对用户进行锁定;另外一种是被动的锁定,例如默认情况下如果密码输入错误超过10次(这个限制是由PROFILE中的FAILED_LOGIN_ATTEMPTS控制的,该信息可以通过DBA_PROFILES视图查询)
(1)显式锁定sec用户LOCKED状态演示
sys@oray>alter user scott account lock;
sys@oray>select username, account_status from dba_users where username = 'SCOTT';
USERNAME ACCOUNT_STATUS
------------------------------ --------------------------------
SCOTT LOCKED
(2)输入10次错误密码后被动锁定LOCKED(TIMED)状态演示
尝试输入10次错误密码后再次查询用户状态。
sys@oray>select username, account_status from dba_users where username = 'SCOTT';
USERNAME ACCOUNT_STATUS
------------------------------ --------------------------------
SCOTT LOCKED(TIMED)
3)用户密码过期状态,EXPIRED和EXPIRED(GRACE)两种状态都属于密码过期状态
密码是否过期是通过修改PROFILE中的PASSWORD_LIFE_TIME实现的,密码过期后还可以使用的天数是通过PROFILE中的PASSWORD_GRACE_TIME控制的。
关于密码过期我们也可以使用SQL显式的去完成,简单演示一下。
sys@oray> alter user sec password expire;
sys@oray> select username, account_status from dba_users where username = 'SCOTT';
USERNAME ACCOUNT_STATUS
------------------------------ --------------------------------
SCOTT EXPIRED
分别解释这四种组合状态
1)EXPIRED & LOCKED(TIMED)状态表示用户过期后,错误密码尝试次数超过PROFILE中的FAILED_LOGIN_ATTEMPTS的限制;
2)EXPIRED(GRACE) & LOCKED(TIMED)状态表示用户在密码过期后的有效期内,不成功登录次数超过PROFILE中的FAILED_LOGIN_ATTEMPTS的限制;
3)EXPIRED & LOCKED状态表示用户过期的同时处于锁定状态
4)EXPIRED(GRACE) & LOCKED状态表示用户在密码过期后的有效期内被DBA手工锁定。
用户管理
ALTER USER avyrros
IDENTIFIED EXTERNALLY
DEFAULT TABLESPACE data_ts
TEMPORARY TABLESPACE temp_ts
QUOTA 100M ON data_ts
QUOTA 0 ON test_ts
PROFILE clerk;
DROP USER user_name [cascade]
profile
dba_profiles
1、对数据库资源做限制
{ { SESSIONS_PER_USER 每个用户名所允许的并行会话数
| CPU_PER_SESSION 一个会话一共可以使用的CPU时间,单位是百分之一秒
| CPU_PER_CALL 一次SQL调用(解析、执行和获取)允许使用的CPU时间
| CONNECT_TIME 限制会话连接时间,单位是分钟
| IDLE_TIME 允许空闲会话的时间,单位是分钟
| LOGICAL_READS_PER_SESSION 限制会话对数据块的读取,单位是块
| LOGICAL_READS_PER_CALL 限制SQL调用对数据块的读取,单位是块
| COMPOSITE_LIMIT “组合打法”
} { integer | UNLIMITED | DEFAULT }
| PRIVATE_SGA 限制会话在SGA中Shared Pool中私有空间的分配 { size_clause | UNLIMITED | DEFAULT}
}
2、对密码做限制
{ { FAILED_LOGIN_ATTEMPTS 帐户被锁定之前可以错误尝试的次数
| PASSWORD_LIFE_TIME 密码可以被使用的天数,单位是天,默认值180天
| PASSWORD_REUSE_TIME 密码可重用的间隔时间(结合PASSWORD_REUSE_MAX)
| PASSWORD_REUSE_MAX 密码的最大改变次数(结合PASSWORD_REUSE_TIME)
| PASSWORD_LOCK_TIME 超过错误尝试次数后,用户被锁定的天数,默认1天
| PASSWORD_GRACE_TIME 当密码过期之后还有多少天可以使用原密码
} { expr | UNLIMITED | DEFAULT }
| PASSWORD_VERIFY_FUNCTION { function | NULL | DEFAULT }
创建profile
create profile new_profile limit password_reuse_max 10 password_reuse_time 30;
修改用户profile
alter user scott profile new_profile;
修改profile
alter profile limit PASSWORD_LOCK_TIME 2;
profile生效
sys@oray>show parameter resource
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
resource_limit boolean FALSE
11g安全新增功能
大小写敏感
sys@oray>show parameter case
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sec_case_sensitive_logon boolean TRUE
默认输错密码10次,锁定账号
FAILED_LOGIN_ATTEMPTS 10 # dba_profiles
密码复杂性校验
sys@oray>@?/rdbms/admin/utlpwdmg.sql
sys@oray>alter profile default limit password_verify_function verify_function_11g;
防止Dos攻击
sys@oray>show parameter sec_proto
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sec_protocol_error_further_action string CONTINUE
# 可指定 继续、断开连接或延迟接受请求
sec_protocol_error_trace_action string TRACE
# NONE、TRACE、LOG 或 ALERT。
防止强力攻击
sys@oray>show parameter sec_ma
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sec_max_failed_login_attempts integer 10
# 表示在连接尝试达到指定次数后会自动断开连接。即使未启用口令概要文件,也会强制实施此参数。
密码错误延迟验证
无需密码,修改回原始密码
select name,PASSWORD from user$
alter user scott identified by values 'F894844C34402B67';
默认密码用户管理
DBA_USERS_WITH_DEFPWD
用户改名(11.2.0.2)
需要修改隐含参数"_enable_rename_user"
ALTER user testusr RENAME TO testusr1 IDENTIFIED BY password;
1.查看所有用户:
select * from dba_user;
select * from all_users;
select * from user_users;
2.查看用户系统权限:
select * from dba_sys_privs;
select * from all_sys_privs;
select * from user_sys_privs;
3.查看用户对象权限:
select * from dba_tab_privs;
select * from all_tab_privs;
select * from user_tab_privs;
4.查看所有角色:
select * from dba_roles;
5.查看用户所拥有的角色:
select * from dba_role_privs;
select * from user_role_privs;
6.查看当前用户的缺省表空间
select username,default_tablespace from user_users;
7.查看某个角色的具体权限,如grant connect,resource,create session,create view to TEST;查看RESOURCE具有那些权限,用SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE='RESOURCE';
例:
限制user1用户只允许100个并发连接
SQL> alter system set resource_limit=true;
System altered
SQL> create profile profile_user1 limit sessions_per_user 100;
Profile created
SQL> ALTER USER user1 profile profile_user1;
User altered
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/203348/viewspace-1247309/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/203348/viewspace-1247309/