一、用户的创建及权限、角色的分配:
- 用户的创建:
create user <username> identified by <password> [default tablespace <tsName>] [temporary tablespace <tsName>][password expire][account <lock|unlock>]。 - 用户创建时默认的表空间和临时空间:
如果在创建用户的时候不输入default tablespace <tsName> temporary tablespace <tsName>,则user的表空间和临时空间为全局默认的default tablesplace和temporary tablespace。同时全局的default tablesplace和temporary tablespace不能drop。除非指定了新的default tablesplace和temporary tablespace。默认的default tablesplace和temporary tablespace可以通过以下语句查询:
SELECT * FROM database_properties
默认表空间的更改通过以下语句实现:
alter database default tablespace <ts_name>
alter database temporary tablespace <ts_name> - 账号的锁定和删除:
锁定和解锁:alter user <username> account [lock|unlock]
删除:drop user <username> cascade。此语句不可回退。在删除用户时,一般先锁定用户一段时间。观察一段时间,确定用户的删除不会对数据库产生影响后在删除。 - 用户密码的管理:
a、10g的登录次数:
在oracle 10g中,默认如果输入密码错误10次后,将lock用户。这是由用户绑定的profile 决定的:
select * from dba_profiles where resource_name='FAILED_LOGIN_ATTEMPTS'。
可以通过以下语句恢复到无限制:
alter profile default limit FAILED_LOGIN_ATTEMPTS unlimited (在user没有DBA权限的时候这条语句是不能被执行的,那么如何通过sys用户更改:)
实际上用户登录失败次数是记录在USER$.LCOUNT字段中的。
b、11g中的密码大小写区分:
在11g中密码默认是区分大小写的。这是通过SEC_CASE_SENSITIVE_LOGON来控制的。当其为false时,不区分大小写:
alter system set sec_case_sensitive_logon=false;
同时11g中还给出了DBA_USERS_WITH_DEFPWD视图用户查询那些具有缺省密码的用户
c、口令负责度校验:
默认未开启用户密码复杂度校验。通过运营$ORACLE_HOME/rdbms/admi/utlpwdmg.sql来创建启用。此文件创建一个verify_function 函数并修改用户默认的profile参数。
d、密码的修改:
alter user <username> identified by <password|externally>
密码失效:alter user <username> password expire。 - 权限和角色的授予:
a、权限分为系统权限和对象权限,前者包括:create session、create tablespace、create table等。后者包括:
表权限:select、delete、update、insert、alter等。
视图权限:select、delete、insert、update等。
过程和函数权限:execute、debug等。
新创建的user想连接数据库并create table必须具有 create session和create table权限。同时对需要create table的tablespace 具有一定的quota。更改用户的quota可通过以下语句:
alter user <username> quota <size(eg:10m)> on <tsname(eg:users)>
b、权限的授予和回收:
授予:grant <role|privilege> [on <objectName>] to <username> [with <admin|grant> option]
回收:revoke <role|privilege> [on <objectName>] from <username>
对于sys privilege 不能跨用户revoke,但是对于对象权限可以跨用户回收。
c、系统权限的查看:select * from dba_sys_privs where grantee=''。其中结果中的admin_option由grant中的with admin option子句决定。当存在子句时为true。否则为false。为true时表明被grant的user有权将此privilege或者role 授予其他用户。
对象权限的查看:select * from dba_tab_privs where grantee=''
系统所有角色的查看:select * from dba_roles
角色授予的查看:select * from dba_role_privs where grantee='’
d、默认向用户grant resource角色时,用户会获得unlimited tablespace 权限。其可以在system tablespace无限制的使用。更严格的管理是回收该权限。对不同的表空间quota单独grant:
revoke unlimited tablespace from <username>;alter user <username> quota unlimited on <tsname> 。类似于这种独立的quota授予可以再dba_ts_quota表中查询的到。
e、对于对象权限除对象的所有者之外,具有 grant any object privilege 或者with admin option 的用户也可以将该对象的权限授权他人。
f、角色(role):
创建角色:create role <roleName>。角色对于grank给另外一个角色。
在数据库内部,user和role都存储在user$表中,通过type#字段区分。其中0是role ,1是user。通过DBA_ROLES的定义可以看出系统中存在两个特殊的角色PUBLIC 和_NEXT_USER :
select name, decode(password, null, 'NO', 'EXTERNAL', 'EXTERNAL',
'GLOBAL', 'GLOBAL', 'YES')
from user$
where type# = 0 and name not in ('PUBLIC', '_NEXT_USER')
PUBLIC 是一个特殊的角色。其所拥有的权限(一般为对象权限,可通过dba_tab_privs查看)会被所有用户所拥有。所有控制PUBLIC 角色的权限对安全有着很大的影响。 - 过度授权:execute/create ANAY PROCEDURE 是非常重要的权限,一般都不授予给普通用户
- 外部认证:
如果用户可以直接连接到操作系统,在创建用户的时候可以指定用户不通过口令登录数据库,而是通过外部系统认证的方式登录数据库。在windows下通过修改注册表实现外部认证:
在注册表HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb10g_home1下添加字符串键名:OSAUTH_PREFIX_DOMAIN=FALSE。然后通过以下方式建立用户create user <ops$name> identified externally。这样在登录数据库的时候就不需要显示的输入密码。用户名的前缀OPS$是为了兼容以前版本。通过参数OS_AUTHENT_PREFIX可以设置,将其设置为空字符时,那么创建用户时就不需要输入前缀,更加方便:
alter system set os_authent_prefix='' scope=spfile;
然后重启数据库。通过如下方式创建用户:
create user <name> identified externally
(测试不成功) - 操作系统认证方式:
在windows下可以通过connect / as sysdba登录数据库。这是通过操作系统认证方式登录数据库的。在windows系统中我们可以在管理-用户和组-组中找到ora_dba组,可以看到我们登录操作系统的用户在其中,如果将其删除,则不能使用connect / as sydba登录数据库。
在$oracle_home/network/admin下可以找到sqlnet.ora文件,其中存在一个SQLNET.AUTHENTICATION_SERVICES = (NTS)
,当期被注释或者为none时,操作系统认证将被关闭(windows)。在linux下则注释为启用操作系统认证,为NONE时关闭操作系统认证。
- sys用户审计:
audit目录可以通过show parameter audit_file_dest查看。默认audit只记录sys用户的登录,如果参数 audit_sys_operations=ture时,则审计sys用户的所有信息。
如何查看具体的审计文件:每个审计文件的格式都是ora_processId.aud格式。其中processid表示当前 session对应的数据库进程ID,通过以下方式查询:
select p.SPID "processID",s.SID "sessionId"
from v$process p join v$session s on p.ADDR = s.PADDR
where s.SID=(select sid from v$mystat where rownum=1)
(我的adump目录为空。。是不是关闭了什么。ps:找到解释了:audti trail会记录在windows的事件管理中,如果是linux/unix平台则会记录在audit_file_dest参数指定的文件中。) - 用户行为审计:
参考http://my.oschina.net/dtpanda/blog/127451。 - fga:
参考:http://my.oschina.net/dtpanda/blog/127453
简单的说就是把一个用户的登陆权付给一个代理用户,登陆代理用户就相当于登陆了其代理的用户。步骤如下:
create user proxy identified by proxy
grant connect to proxy
alter user <target_user(eg:study)> grant connect through <proxy_user(eg:proxy)>;(可以将多个用户执行这个操作)
connect proxy[study]/proxy;
结果显示已连接:执行show user 显示用户为study。
ps:相关sql语句
- select * from dba_users;--查看所有用户
- select * from dba_roles;--查看所有的角色
- select * from system_privilege_map;--查看所有的权限
- select * from session_privs;--查看当前session的权限
- select * from session_roles;--查看当前session的角色
- select * from dba_sys_privs d where d.grantee='';--查看对应用户或者角色的权限
- select * from dba_role_privs where grantee=''—查看相应用户或者角色的对应的角色
- select * from database_properties;--查看当前数据库的属性。可以查看默认表空间
- select * from dba_tab_privs;--擦查看被授予的对象权限。
profile:给用户分配profile(alter user study profile PROFILE_TEST;)
然后 alter system set resource_limit=true。