Oracle-安全管理
Posted 旷世奇才李先生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle-安全管理相关的知识,希望对你有一定的参考价值。
让石头裂开的不是最后一击,而是前面的99次击打
文章持续更新,可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】获取福利,回复【项目】获取项目源码,回复【简历模板】获取简历模板,回复【学习路线图】获取学习路线图。
文章目录
安全性对于数据库来说是重中之重,是衡量一个数据库产品的重要指标。例如银行的数据库数据、国家的军事数据等都是非常重要的,必须完善保护,防止被非法获取。这篇文章将重点介绍与oracle数据库安全管理相关的技术,包括用户管理、权限管理和角色管理。
一、用户管理
在安装oracle数据库的时候,默认的用户有sys、system、scott和sh。其中sys是超级管理员,具有最高权限,可以启动、修改和关闭数据库;system是普通管理员,不能启动和关闭数据库,但可以完成创建用户等管理工作;scott是普通用户;sh是大数据用户。
每一连接到数据库的用户必须是系统的合法用户。
1、创建新用户
我们必须以管理员身份登录才能创建新的用户,其基本语法格式如下所示。
create user user_name identified by password;
其中user_name为新用户的用户名,password为口令。该语法还有很多参数,这里就不一一详述,用户如果需要可以查找帮助文件。
创建新用户user1,口令为123456
create user user1 identified by 123456;
2、用户锁定与解锁
用户锁定是指用户暂时无法登录数据库,但不影响该用户的所有数据库对象的正常使用,当用户账号解锁后,用户可以和以前一样正常连接和登录数据库。
锁定的命令如下。
alter user user_name account lock;
解锁的命令如下。
alter user user_name account unlock;
3、修改用户账号信息
用户创建完成后,管理员可以对用户进行修改,包括修改用户口令、改变用户表空间等,基本语法如下所示。
alter user user_name identified by password;
将user1的口令修改为654321
命令如下所示。
alter user user1 identified by 654321;
4、删除用户账户
当一个数据库用户不再使用的时候,可以将该用户以及其拥有的所有对象都删除。基本语法如下所示。
drop user user_name [cascade]
如果该用户下面没有任何数据对象,可以直接使用drop user命令删除,如果该用户下面有对象,必须使用cascade参数。
删除用户user1
drop user user1;
二、权限管理
使用我们新创建的用户登录会报错,是因为每一个新创建的用户本身不具备任何的权限,而在oracle数据库里面,如果用户想要登录,则必须具有创建session的权限。
事实上,oracle数据库使用权限来控制用户对数据的访问和用户所能执行的操作。权限就是执行特定类型的sql命令或访问其他用户对象的权利。用户在数据库中可以执行哪些操作,以及可以对哪些对象进行操作,完全取决于该用户所拥有的权限。在oracle数据库中,用户权限分为两种。
系统权限:指系统级控制数据库的存取和使用的机制,即执行某种sql语句的能力。例如,能够启动或者停止数据库,能够创建、删除或者修改数据库对象(表,索引,视图等)。在oracle11g数据库中,有200多种系统权限。
对象权限:对某个特定的数据库对象执行某种操作的权限。例如特定表的插入、删除、修改、查询的权限。在oracle11g数据库中,有9中类型的对象权限。
1、系统权限的授予
grant <系统权限> to <用户名>
授予用户user1创建表的权限。
grant create session to user1;
2、系统权限的收回
revoke <系统权限> from <用户名>
撤销用户user1创建表的权限
revoke create table from user1;
撤销用户user1登录数据库的权限
revoke create session from user1;
3、用户系统权限的查询
与系统权限有关的数据字典是dba_sys_privs(所有系统权限)和user_sys_privs(用户拥有的系统权限)。可以使用查询命令在这几个数据字典中查询。
查看当前用户具有的系统权限
select * from user_sys_privs;
4、对象权限的授予
基本语法和系统权限的授予一样,如下所示。
grant <对象权限> on <对象> to <用户名>
授予user1用户对scott用户下数据表emp的select,insert和delete的权限。
grant select,insert,delete on scott.emp to user1;
5、对象权限的回收
基本语法如下所示
revoke <对象权限> on <对象> from <用户名>
回收user1用户对scott用户下数据表emp的select和delete的权限。
revoke select,delete on scott.emp from user1;
三、角色管理
oracle的权限有很多,在管理的时候如果要逐个授予,既费时又费力,为了简化管理,引入了角色的概念。所谓角色就是一系列相关权限的集合,即将所需要的权限先授予给角色,在需要的时候再将角色授予给用户,这样用户就得到了该角色所具有的所有权限,从而减少了权限的管理。
1、角色的定义
oracle数据库创建的时候系统自动创建一些常用的角色,这些角色已经由系统授予了相应的一些权限,管理员可以直接将这些角色授权给不同用户。这些常用的角色如下表所示。
dba:该角色包含所有系统的权限
connect:该角色向用户提供登录和执行基本函数的能力,可以具有创建表、视图、序列等的权限
resource:该角色具有创建过程、触发器、表、序列等的权限。
2、角色创建
基本语法如下
create role <角色名称> identified by <口令>
创建角色clerk,口令为123
create role clerk identified by 123;
3、为角色分配权限
角色创建后,既可以授予系统权限也可以授予对象权限,授予方法同上节介绍的授予用户权限的语法相同。
为角色clerk授予对scott用户下数据表emp的select,insert和delete的权限
grant select,insert,delete on scott.emp to clerk;
4、将角色授予用户
基本语法如下所示。
grant <角色名> to <用户名>
将clerk角色授予用户user1
grant clerk to user1;
5、角色权限的回收
把角色clerk对scott用户下数据表emp的select和delete的权限回收。
revoke select,delete on scott.emp from clerk;
6、角色信息查询
我们可以使用数据字典dba_role_privs、user_role_privs、roles_sys_privs等获取数据库角色及其权限信息。
查询角色clerk所拥有的系统权限信息。
select * from roles_sys_privs where role = 'clerk';
查询用户所拥有角色的信息
select * from dba_role_privs;
四、总结
这里的相关内容还没有整理完毕,文章后面持续更新,建议收藏。
文章中涉及到的命令大家一定要像我一样每个都敲几遍,只有在敲的过程中才能发现自己对命令是否真正的掌握了。
可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】获取福利,回复【项目】获取项目源码,回复【简历模板】获取简历模板,回复【学习路线图】获取学习路线图。
以上是关于Oracle-安全管理的主要内容,如果未能解决你的问题,请参考以下文章