oracle安全包括2大类
- oracle的数据库系统安全。主要包括字系统一级来控制用户对数据库中的系统资源的访问喝使用,如用户名、密码,用户可进行的系统操作和分配给用户的磁盘资源。
- oracle数据库中数据的安全。控制用户对数据库中对象的访问和使用。以及控制用户对数据库中对象的操作。
oracle数据库管理
- 利用用户名、密码控制对数据库的访问,利用权限限制用户对数据库中系统资源的访问。利用权限,视图来管理用户对数据库中对象的访问。
创建用户
语法: CREATE USER 用户名 IDENTIFIED BY 密码
只有系统管理员才有权限创建用户,而且刚创建的用户是没有任何权限的。甚至连最基本的登录数据库都无法登录。所以需要分配权限给用户。
权限
权限是用来执行某些特定的 SQL 语句的能力。
权限又分为 2 大类
- 系统权限。访问(使用)数据库(系统资源)的权限
- 对象权限。维护数据库中对象的能力。
模式
一组对象的集合,如,表、视图、序列号等等。模式由数据库的用户所拥有,并且与用户具有相同的名字。在实际使用中模式和用户是一回事。
常用的系统权限
- CREATE USER:创建用户
- DROP USER:删除用户
- SELECT ANY TABLE:查询任何用户的表和视图的权限
- CREATE ANY TABLE:在任何模式中创建表
- DROP ANY TABLE:删除任何模式中所建得表
- CREATE SESSION:连接数据库
- CREATE TABLE:在用户自己的模式中创建表
- CREATE VIEW:在用户自己的模式中创建视图
- CREATE SEQUENCE:在用户自己的模式中创建序列号
- CREATE PROCEDURE:在用户自己的模式中创建过程
ANY 关键字表示在任何模式中都有定义的权限
赋予权限
首先创建一个用户
CREATE USER cat IDENTIFIED BY miaomiao
grant create session to cat;
赋予 cat 用户更多的权限(查询任何用户的表,建表,建视图)
grant select any table, create table, create view tocat;
选择用 cat 登录 这时因为赋予了 可以查看任何用户的表权限,所以我们可以查询到 SCOTT 用户下的 emp表
select * from scott.emp;
结果如下:使用新用户建立新表
create table baby_cat as select * from scott.emp;
此时会提示
权限不足导致无法将表格建立在 user 表空间当中。所以还需要为 该 cat 用户分配表空间使用权限以及使用的磁盘大小。
切换 DBA 用户 sys 或者 system
alter user cat default tablespace users quota 20m on users;
该语句的意思为,当个 cat 用户建立表时,如果未指定表空间,那么默认建立在 users 空间当中,并且分配磁盘大小为 20M。查看用户权限
可以通过数据字典 SESSION_PRIVS 来查看用户拥有的所有权限
select * from session_privs;
结果如下
撤销用户权限
语法:
REVOKE [权限名1],[权限名2] FROM 用户名
例如,收回 cat 用户的4个权限, SQL 如下。
REVOKE SELECT ANY TABLE, CREATE TABLE, CREATE VIEW, CREATE SESSION FORM cat
角色
假如所管理的数据库用户有1000个,每个用户都需要10种一样的权限,这个时候赋权就成了一件麻烦事,每个10种,1000个就要写1000次一样的赋权 SQL 。
而为了简化这方面的工作,oracle 引入了角色这个概念。通过创建一个角色,将所需要的权限赋予该角色,然后将角色在赋予剩下的全部用户。这样一来,省事很多。至于为什么不直接用系统管理员这样做,那是因为系统管理员权限很高,有些权限不能赋予非管理用户,一旦赋予出去的话会造成混乱。
创建角色,并授权
语法:
CREATE ROLE 角色名
如下 创建了一个名为 animal 的角色
create role animal;
然后为该角色授权
grant select any table, create table, create view, create session to animal;
接着以该角色登录。登录之后,我们就可以用该角色为其他用户赋予本身所拥有的权限了。
grant animal to dog, cat, pig;
上例将 animal 的所有权限全新赋给了 dog,cat,pig 3个用户