Oracle安全管理简述

ORACLE安全管理

SQLPLUS格式化显示
SQL> SET PAGESIZE 0; //输出每页行数,缺省为24,为了避免分页,可设定为0。
SQL> SET LINESIZE 80; //输出一行字符个数,缺省为80
SQL> COL COLUMN NAME FOR A20; //字段名在SQLPLUS界面输出的长度

O R A C L E H O M E ORACLE_HOME ORACLEHOME/SQLPLUS/下会有一份GLOGIN.SQL的文件,这是一份全局文件,每次进入SQLPLUS的时候都会读取这份文件,在这份文件里面可以保存常用的一些系统变量,下次重新登录就不用再重新设置了啊,对经常使用SQLPLUS来说会比较方便,以下是我的常用变量:
SET LINESIZE 120
SET PAGESIZE 100
DEFINE _EDITOR=VI###ORACLE##,这样不必要每次在输入这个命令,同时将默认缓冲池设置得尽可能大
SET SERVEROUTPUT ON SIZE 1000000

用户管理、权限管理
模式SCHEMA
所谓的SCHEMA就是一个用户所有对象的集合体,一般情况下模式名和用户名是一致的,但是模式名不等于用户名

DESC DBA_USERS; 用管理员身份登录可以查看数据库下的所有用户的信息

LINUX服务器图形化界面用户管理
1.用ROOT用户登录
2.#SYSYTEM-CONFIG-USERS
3.在弹出的图形化界面可以添加新用户或者管理现有用户

–创建用户语法:CREATE USER 用户名 IDENTIFIED BY 密码
–创建普通用户默认表空间为USERS,当然也可以指定表空间。
–在创建用户时加入DEFAULT TABLESPACE 表空间,就可以指定用户存在的表空间而不是默认。
–在创建用户时可以加入QUOTA 大小 ON 表空间,这个可以指定用户是对该表空间的使用大小,例如
指定10M,那该用户在对应进行的数据处理超过10M即不能再访问此表空间,如果不设定则默认是无限制,
还有一个情况,如果指定了10M但是超出了,这时可以指定其他表空间进行数据访问。

有两点是创建数据库用户时需要注意:
1.在创建用户的时候虽然用户名写的是小写,但是存储到数据字典的时候会换成大写,这样会在实际情况导致
登录时用户名不一致的错误,但是如果一定要指定是小写并且存储到数据字典里面的也是小写的话,就要在创建
用户的时候用引号括起来,这样引号里面的用户名是小写那就是小写,大写同上。
2.当创建完用户之后,此用户是没有任何权限的,连登录数据库的权限都没有。
3.如果没有设置用户对某个表空间的配额(QUOTA)的话,那么即使这个用户对该表空间有写的权限,但是也写不
进去的。

DESC DBA_USERS --查看数据库用户的基本信息
DESC DBA_TS_QUOTAS --查看数据库用户的表空间配额大小,已使用大小。

ALTER SUER USERNAME QUOTA UNLIMITED ON TABLESPACENAME --设置用户对于表空间配额无上限。

有一点注意:
上面有说过通过DBA_TS_QUOTAS数据字典可以查看全局用户的配合情况,这里有一个前提,
就是你所要查看配额的用户必须是在创建这个用户的时候是显示使用QUOTA 指定配合大小或者指定无限制配额,
不然不设置配额大小的创建用户语句是不会出现在这个视图表中的。

修改用户信息:
1.通过DBA_USERS里的结果得到,像数据库里的用户很多都是密码过期以及上锁的(EXPIRED & LOCKED),
2.如果用户密码过期只需要重置密码即可,ALTER USER 用户名 IDENTIFIED BY 新密码;
3.当然我们也可以手动将用户密码设置为过期密码,ALTER USER 用户名 PASSWORD EXPIRE;
4.解锁用户 ALTER USER 用户名 ACCOUNT UNLOCK;
5.锁定账户ALTER USER 用户名 ACCOUNT LOCK;
6.当重置密码和解锁用户后,那表示该用户已可以正常使用。

用户如果指定了表空间也可以修改默认表空间,通过ALTER USER 用户名 DEFAULT TABLESPACE XX;
用户如果指定表空间配额大小不够了,也可以修改原来的表空间表额,也可以重新指定一个新的表空间
配额,通过ALTER USER QUOTA 20M XX修改表空间配额

--给予用户登录权限
GRANT CREATE SESSION TO PAS;
--查看当前数据库连接的用户有哪些,可以通过V$SESSION数据字典查看
DESC V$SESSION;
SELECT  USERNAME,SID,SERIAL# FROM V$SESSION WHERE USERNAME = 'PAS';
--切断当前会话连接
ALTER SYSTEM KILL SESSION  '33,53' IMMEDIATE;

–以上皆为普通用户设置

–管理员身份在本机登录ORACLE数据库是通过外部验证方式,
无论密码错或者为空都可以在ORACLE数据库服务端登录数据库,
但是通过客户端工具就必须填写密码。

–修改SYS管理员密码,两种方法:
1.SYS管理员密码是保存在 O R A C L E H O M E ORACLE_HOME ORACLEHOME/DBS路径下面,
通过ORACLE用户登录服务器,然后输入
ORAPWD FILE=ORAPWPAS PASSWORD=PAS ENTRIES=16 FORCE=Y;
通过以上一句命令即可将SYS管理员用户的密码修改,
如需修改密码一定要进入到DBS目录下输入命令才能修改,在其他目录下修改不了不生效。
2.可以直接通过ALTER USER SYS IDENTIFIED BY 新密码 去修改管理员密码,
但必须是通过SYS管理员身份登录才能修改,其他用户不足以此权限修改。

–对于普通用户来说的密码都是存储在数据字典里面的,所以必须通过数据库字典里存储的
密码校验才能登录数据库,不管是本机还是客户端的连接。

–问题:普通用户能不能使用外部验证?
答:可以,创建OS验证(操作系统验证方式,不通过数据字典验证);
1.SHOW PARAMETER OS; --OS验证记录的信息
2.REMOTE_OS_AUTHENT --是否支持远程外部验证,类型是布尔型,默认参数值是FALSE,
上述有说到用管理员身份登录ORACLE服务器本机是可以不通过密码或者密码为空都可以
直接登录的,但是利用客户端还是必须要使用密码,就因为此处的参数值为FALSE。
3.OS_AUTHENT_PREFIX是ORACLE用来验证用户尝试连接到SERVER时指定的一个前缀,
ORACLE把该参数的值和操作系统账户名和密码连接起来。当需要连接的时候,ORACLE
把带有前缀的操作系统用户名和数据库中ORACLE的用户名进行比较;
然而,可以将该参数设为空,这样可以消除给操作系统的账户添加任何的前缀。

将BOB用户设置为外部验证方式登录:
1.将OS_AUTHENT_PREFIX参数值设置为空,支持给操作系统账户添加任何前缀
ALTER SYSTEM SET OS_AUTHENT_PREFIX='' SCOPE=SPFILE;
2.将REMOTE_OS_AUTHENT参数值设置为TRUE,操作系统账户支持远程外部验证。
ALTER SYSTEM SET REMOTE_OS_AUTHENT=TRUE SCOPE=SPFILE;
3.将用户设置为外部验证方式(操作系统验证方式)
ALTER USER BOB IDENTIFIED EXTERNALLY;
4.给予BOB用户登录权限
GRANT CREATE SESSION TO BOB;
5.创建操作系统的BOB用户
USERADD BOB --创建用户
PASSED  BOB --设置密码
6.重定向配置文件
1.通过ROOT用户登录服务器
2.CAT ~ORACLE/.BASH_PROFILE > ~BOB/.BASH_PROFILE --将ORACLE用户的配置文件重定向到BOB用户下
7.用BOB用户登录ORACLE完成外部验证
1.SU - BOB
2.SQLPLUS /

执行完以上七个步骤后,已经可以完成BOB用户的外部验证。
利用操作系统用户登录数据库的密码肯定是正确的,因为操作系统都登录不上
数据库肯定也访问不了。

数据库用户登录分为数据字典验证和(OS验证)操作系统验证,
SYS用户是通过 O R A C L E H O M E ORACLE_HOME ORACLEHOME/DBS/ORAPW+实例名的二进制密码文件进行外部验证
像BOB用户数据库已经将管理方式交由操作系统进行外部管理,文件存放位置在CAT /ETC/PASSWD
里面都是操作系统管理的用户,所以能直接登录,而且其他用户需要相同设置才能进行外部管理,否则还需要密码进行登录校验。

举个🌰,假如LINUX服务器是有ORACLE用户的,数据库里面也有ORACLE用户,但是因为数据库里的ORACLE用户没有将密码验证方式交由LINUX服务器进行外部管理,虽然两个用户同名同姓,但是管理的决策者不一样,还是需要进行数据库验证。

授予和撤销权限:
ORACLE用户权限分为两种:

	对象权限:SELECT DISTINCT PRIVILEGE FROM DBA_TAB_PRIVS;
	对象权限也就是用户与用户之间的权限
	系统权限:SELECT DISTINCT PRIVILEGE FROM DBA_SYS_PRIVS;
系统权限就是对象与数据库系统之间的权限

–增加系统权限
在使用 GRANT CREATE 权限1,权限2.。。 TO 用户的时候,加上(WITH ADMIN OPTION)这个后缀,
就会将SYS赋予对应用户的权限,被授予权限的这个用户可以将同样的权限授予给另外一个用户,
反之如果不加上该后缀则无法授予。

DESC USER_SYS_PRIVS --查看用户自己本身有多少系统权限可以使用

–创建好的用户即使他具有创建表的权限,但是也不能写,必须要设置配额才可以。
–只要含有ANY的命令也都属于系统权限

--收回权限的命令REVOKE
--REVOKE CREATE TABLE FROM USERNAME ; --收回用户创建表的权限。

所谓的对象权限:
一般是一个用户对另外的一个用户授权,让其可以访问自己模式里的对象。

所谓的系统权限:
–只要含有ANY的命令也都属于系统权限。

--赋予对象权限
GRANT SELECT ON PAS.AA TO BOB; --BOB用户可以通过SELECT语句访问 PAS用户的AA表;
DESC USER_TAB_PRIVS --查查表的被授予和授予用户的关系以及是否拥有可传递性记录

USER_TAB_PRIVS.GRANTEE :被授予者
USER_TAB_PRIVS.GRANTOR :授权者

REVOKE SELECT ON PAS.AA FROM BOB --去除BOB访问PAS用户AA表的权限。

通过管理员将系统权限赋予给 A 用户并且加上(WITH ADMIN OPTION)时,A用户再将被赋予的权限
在授予给 B 用户,这是如果收回(REVOKE)A 用户的权限那么B用户的权限还是会保留的,
但是如果是对象权限的话,A用户的权限被收回了(REVOKE),那么B用户通过A用户获得的权限也会
收回。

----假设共100个用户,现在要给这些用户添加一个A权限,就要执行100条命令。
为了更方便的管理权限,我们可以使用ROLE(角色).

所谓的ROLE(角色)就是权限的集合。把这个角色当成一个权限授权给用户。

--查看数据库中有哪些角色
DESC DBA_ROLES;

ORACLE角色权限分为两种:
	系统权限:SELECT * FROM ROLE_SYS_PRIVS;
	
	对象权限:SELECT * FROM ROLE_TAB_PRIVS;

–之前有讲到用户的权限,但用户之上还会有角色的存在,所以也会有角色对应的权限,
通过上两句命令可以查看某个角色所具有的权限。

--创建角色/使用角色
1.通过管理员登录
2.CREATE ROLE ROLENAME; --创建角色语句
3.GRANT CREATE SESSION, CREATE TABLE TO ROLE NAME; --授予角色登录数据库和创建表权限
4.GRANT ROLENAME TO USERNAME; --将角色授予用户,用户同时持有角色身上所属的权限使用
--查看目前用户所拥有的角色
DESC USER_ROLE_PRIVS;

--查看当前会话中用户所使用的角色
DESC SESSION_ROLES;

SELECT * FROM SESSION_ROLES;
--禁用角色
SET ROLE NONE; --将当前用户所使用的所有角色禁用,无法使用对应权限

--激活角色
SET ROLE XX; --如果用户本身启用YY角色,激活了XX后会覆盖掉YY角色

SET ROLE XX,YY; --激活两个角色

SET ROLE ALL; --激活所有角色,使当前用户可以使用这两个角色权限

SET ROLE ALL EXCEPT YY; --除了YY角色,激活其余全部角色。
--设置角色密码
ALTER ROLE YY IDENTIFIED BY ORACLE;

--删除角色密码
ALTER ROLE YY NOT IDENTIFIED;

--用户使用带密码角色
SET ROLE YY IDENTIFIED BY ORACLE;

--用户同时使用带密码和不带密码的角色
SET ROLE YY IDENTIFIED BY ORACLE,XX;
--查看角色是否有密码
1.管理员身份登录
2.SELECT PASSWORD_REQUIRED FROM DBA_ROLES WHERE LOWER(ROLE)='YY';

–禁用或启用当前用户的角色,无需登录管理员用户进行操作,自身用户即可设置

–删除角色
1.管理员身份登录
2.DROP ROLE YY;

–总结:
1.用户可能同时存在多个角色,但不一定所有角色都是可用;
2.不止可以将角色授予用户,角色和角色之间也可以互相授予;
3.授予用户角色时,也可以跟用户权限一样赋予延伸性(WITH ADMIN OPTION);
4.可以使用SQL DEVELOPER执行命令,也可以使用OEM图形化界面进行操作。

--删除当前连接并且已经产生数据的用户
1.DROP USER BOB; --假如BOB用户是正在连接的用户,这里是删除不掉的。
2.SELECT USERNAME,SID,SERIAL# FROM V$SESSION WHERE USERNAME = 'BOB' --找到BOB用户的会话号(128,8888)
3.ALTER SYSTEM KILL '128,8888' IMMEDIATE;--马上切断该会话ID对应的会话;
4.此时BOB用户已经断开链接了,但是还是删除不了,因为BOB用户已经创建了数据或者对象,需要使用 CASCADE;
5.DROP USER BOB CASCADE; --完成用户删除

–创建和管理配置文件
/*
所谓的配置文件就是资源限制文件,不同的配置文件可以设置不同的限制条件,用户
使用什么配置文件就会受到相应的约束
*/

–查看数据库当中有哪些配置文件;
DESC DBA_PROFILES;

/*
1.可以通过DBA_USER查看某一个用户的配置文件,以BOB用户为例,它对应的配置文件就是DEFAULT;
2.通过SELECT * FROM DBA_PROFILES WHERE PROFILE = ‘DEFAULT’; --查看DEFAULT配置文件信息
3.列2 RESOURCE_NAME表示为限制内容,CPU,SGA…
4.列3 RESOURCE_TYPE表示为限制手段(KERNEL表示硬件资源限制,PASSWORD表示密码策略限制)
5.列4 LIMIT表示为是否有无限制(UNLIMITED表示无限制)
*/

当每个用户创建的时候都可以指定配置文件,创建完后用户所对应的约束限制就是配置文件中记载的内容。

--创建配置文件
CREATE PROFILE XX LIMIT; 这里创建的配置文件里面的内容会有16条记录也就是16条限制,都是创建时默认自带的。
--在创建时指定配置文件内容的限制

CREATE PROFILE XX LIMIT FAILED_LOGIN_ATTEMPTS 3; --这里在创建配置文件后把密码登录次数校验设置3次,如果创建的时候没有指定任何限制的大小(LIMIT),那所限制的范围会根据DEFAULT配置文件的限制大小去执行。

--修改用户的配置文件归属
ALTER USER TOM IDENTIFIED BY ORACLE PROFILE XX; --修改TOM的配置文件为XX

--创建用户时指定配置文件
CREATE USER TOM IDENTIFIED BY ORACLE PROFILE XX; --创建用户时指定配置文件

--修改配置文件内的限制次数
ALTER PROFILE XX LIMIT FAILED_LOGIN_ATTEMPTS 4 --将登陆限制次数改为4次

/*
–在配置文件中有一个限制内容为(PASSWORD_VERIFY_FUNCTION),这个限制的手段是为NULL,
这个有什么作用呢?我们在数据库SQLPLUS或者客户端工具创建用户时,密码没有做任何校验,类似于长度、
是否只能数字这种校验都没有,这是在实际应用中还是很不规范的,如果我们想要增加这个校验只需要启用这个限制内容即可:
1.用管理员用户登录SQLPLUS命令行
2.@?/RDBMS/ADMIN/UTLPWDMG.SQL --执行ORACLE数据库自带的一个脚本文件,它的作用就是创建用户时将密码校验启用。@代表本地,?代表 O R A C L E H O M E ORACLE_HOME ORACLEHOME环境变量的路径
3.创建完后查看DEFAULT这个配置文件中(PASSWORD_VERIFY_FUNCTION)的限制手段就更新为(VERIFY_FUNCTION_11G),而不是之前的NULL了,代表已经启用密码校验。
4.就算用管理员用户也要进行密码校验了现在。
5.通过ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION NULL,就可以取消密码校验。

在做硬件资源限制的时候,有一点要清楚,就是默认情况下资源限制的限制手段都是无限制(UNLIMITED),但是也可以通过上面的SQL语句修改它的限制,但是基本都不会生效的,就算已经在表里做了改变。因为还需要修改一个
参数才能使修改过的资源限制手段生效,ALTER SYSTEM RESOURCE_LIMIT = TRUE; 原来是FALSE,只有修改了这个参数后,硬件资源的限制手段才会生效,而密码策略限制不受这个参数影响。

可以创建多个配置文件给多个用户,实现不同限制的管理;
在管理数据库的时候,必须要懂得这种资源和密码的限制以及设定,才能很好的管理数据库,避免不必要的资源浪费。
*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值